Aplique a extensão WebSphere, classe GenericDataStoreHelper,
para criar seu próprio auxiliar de armazenamento de dados para origens de dados que o servidor de aplicativos não suporta. Com esta classe auxiliar, sua configuração do JDBC pode
usar funções específicas do banco de dados durante as transações.
Antes de Iniciar
Se você estiver utilizando uma configuração com uma origem de dados não suportada pelo servidor de aplicativos, você poderá desejar criar um auxílio de armazém de dados customizado. Este auxiliar permitirá aproveitar o banco de dados para executar funções durante
uma transação que de outra forma não estariam disponíveis. Será preciso criar uma
classe DataStoreHelper definida pelo usuário, e existem informações para criar um novo manipulador
de exceções para capturar exceções que possam ser criadas com o uso
de seu manipulador de dados customizado.
Sobre Esta Tarefa
Recurso Reprovado: O campo de constante CUSTOM_HELPER na API da classe com.ibm.websphere.rsadapter.DataStoreHelper
foi reprovado.
Se você criar a sua própria classe de implementação DataStoreHelper, não chame setHelperType(DataStoreHelper.CUSTOM_HELPER). Em vez disso, deixe que o valor de HelperType seja configurado pela classe de implementação da qual foi herdado.
depfeat
Procedimento
- Crie uma classe que estenda os assistentes de armazenamento de dados existentes. Use o seguinte código como um exemplo; este tipo de origem de dados é baseado em um provedor JDBC
definido pelo usuário:
package com.ibm.websphere.examples.adapter;
import java.sql.SQLException;
import javax.resource.ResourceException;
import com.ibm.websphere.appprofile.accessintent.AccessIntent;
import com.ibm.websphere.ce.cm.*;
import com.ibm.websphere.rsadapter.WSInteractionSpec;
/**
* Exemplo de classe DataStoreHelper, demonstrando como criar um DataStoreHelper definido pelo usuário.
* A implementação de cada método é fornecida apenas como exemplo. Mais detalhes provavelmente
* serão necessários para qualquer DataStoreHelper customizada que seja criada para uso por um aplicativo real.
* Neste exemplo, substituiremos o doStatementCleanup(),getIsolationLevel(), e configuraremos
* userDefined.
*/
public class ExampleDataStoreHelper extends com.ibm.websphere.rsadapter.GenericDataStoreHelper
{
public ExampleDataStoreHelper(java.util.Properties props)
{
super(props);
// Atualizar os valores de DataStoreHelperMetaData para este auxiliar.
getMetaData().setGetTypeMapSupport(false);
// Atualizar os mapeamentos de exceções para este auxiliar.
java.util.Map xMap = new java.util.HashMap();
// Incluir um mapeamento de Código de Erro para StaleConnectionException.
xMap.put(new Integer(2310), StaleConnectionException.class);
// Incluir um mapeamento de Código de Erro para DuplicateKeyException.
xMap.put(new Integer(1062), DuplicateKeyException.class);
// Incluir um mapeamento de Estado SQL para a ColumnNotFoundException definida pelo usuário
xMap.put("S0022", ColumnNotFoundException.class);
// Desfazer um mapeamento de Estado SQL herdado de StaleConnection.
xMap.put("S1000", Void.class);
setUserDefinedMap(xMap);
// Se você estiver estendendo uma classe auxiliar, não será
// normalmente necessário emitir 'getMetaData().setHelperType(...)'
// pois o auxiliar personalizado herdará o tipo de auxiliar de sua
// classe-pai.
}
public void doStatementCleanup(java.sql.PreparedStatement stmt) throws SQLException
{
// Limpar a instrução para que ela possa ser armazenada em cache e reutilizada.
stmt.setCursorName("");
stmt.setEscapeProcessing(true);
stmt.setFetchDirection(java.sql.ResultSet.FETCH_FORWARD);
stmt.setMaxFieldSize(0);
stmt.setMaxRows(0);
stmt.setQueryTimeout(0);
}
public int getIsolationLevel(AccessIntent intent) throws ResourceException
{
// Determinar um nível de isolamento com base no AccessIntent.
// configurar o nível de isolamento padrão do WebSphere como TRANSACTION_SERIALIZABLE.
if (intent == null) return java.sql.Connection.TRANSACTION_SERIALIZABLE;
return intent.getConcurrencyControl() == AccessIntent.CONCURRENCY_CONTROL_OPTIMISTIC ?
java.sql.Connection.TRANSACTION_READ_COMMITTED :
java.sql.Connection.TRANSACTION_REPEATABLE_READ;
}
public int getLockType(AccessIntent intent) {
if ( intent.getConcurrencyControl() == AccessIntent.CONCURRENCY_CONTROL_PESSIMISTIC) {
if (intent.getAccessType() == AccessIntent.ACCESS_TYPE_READ) {
return WSInteractionSpec.LOCKTYPE_SELECT;
}
else {
return WSInteractionSpec.LOCKTYPE_SELECT_FOR_UPDATE;
}
}
return WSInteractionSpec.LOCKTYPE_SELECT;
}
}
- Opcional: Crie sua própria classe de manipulador de exceções. Utilize o seguinte código como guia:
package com.ibm.websphere.examples.adapter;
import java.sql.SQLException;
import com.ibm.websphere.ce.cm.PortableSQLException;
/**
* Exemplo de subclasse PortableSQLException, que demonstra como criar uma exceção definida pelo usuário
* para mapeamento de exceção.
*/
public class ColumnNotFoundException extends PortableSQLException
{
public ColumnNotFoundException(SQLException sqlX)
{
super(sqlX);
}
}
- Compile a classe ou classes DataStoreHelper recém-criadas. Você necessitará dos seguintes arquivos JAR no caminho de classe para compilá-las:
- Se você estiver utilizando um ambiente de desenvolvimento, como o Eclipse, precisará configurar esses arquivos JAR no caminho de classe para poder compilar. Em seguida,
crie um arquivo JAR depois que terminar de editar os arquivos (consulte a
documentação de ajuda de seu ambiente de desenvolvimento para obter instruções
específicas).
- Se você não tiver um ambiente de desenvolvimento e estiver utilizando o compilador javac:
- Crie o arquivo .java que estende o GenericDataStoreHelper ou qualquer outro auxiliar de armazém de dados, como mostrado na Etapa 1.
- Vá para o diretório inicial depois de terminar de editar o arquivo ou
arquivos no utilitário de linha de comandos.
- Configure o caminho de classe utilizando este comando:
- Compile sua classe ou classes. Por exemplo, nos sistemas operacionais Windows, digite o seguinte comando (isso compilará todos os arquivos .java no diretório que você especificou):
C:\javac your_directory\*.java
- No diretório Java, crie um arquivo JAR de todos os arquivos de classe
compilados em seu diretório. Por exemplo, digite o seguinte comando nos sistema operacionais Windows (mude myFile para o nome que você deseja para seu arquivo JAR):
C:\Java> jar cf myFile.jar *.class
Para obter informações adicionais sobre como usar o compilador javac, acesse o website do Oracle para o compilador
Java™.
- Coloque os arquivos JAR compilados em um diretório e atualize o caminho de classe para o provedor JDBC incluir esse local. Por exemplo, se o arquivo JAR for c:\myFile.jar,
modifique o caminho de classe JDBC para incluir c:\myFile.jar.
- Clique em .
- No campo Caminho de Classe, inclua o local dos arquivos JAR que você compilou. Por exemplo, pressione ENTER no campo e inclua uma nova linha:
c:\myFile.jar
- Configure o servidor de aplicativos para usar sua nova classe DataStoreHelper
customizada.
- No console administrativo, selecione Recursos > JDBC > Origens de Dados.
- Selecione a origem de dados que você deseja configurar com sua classe DataStoreHelper customizada.
- Na seção denominada Nome da classe auxiliar de armazém de dados,
selecione Especificar um auxiliar de armazém de dados definido pelo usuário.
- Digite o nome de classe do auxiliar de armazém de dados que foi criado.
- Aplique suas alterações e selecione OK.