Requisitos para Configurar os Níveis de Isolamento de Acesso a Dados
Este artigo discute os critérios e efeitos da configuração de níveis de isolamento para componentes de acesso a dados que formam os módulos Enterprise JavaBeans (EJB) 2.x e mais recente.
Em um módulo EJB 1.1, é possível configurar o nível de isolamento no nível do método ou no nível do bean. Esse recurso também se aplica aos beans CMP (Container-managed Persistence) 1.1 que você monta nos módulos EJB 2.x. O WebSphere Application Server permite que o descritor de implementação de um bean CMP declare o nível de versão de 1.1, independentemente da versão geral do módulo.
No entanto, a capacidade de definir o nível de isolamento no nível do método ou do bean não se aplica a outros enterprise beans dentro de um módulo EJB 2.x, incluindo beans CMP 2.x. O WebSphere Application Server Versão 5.0 removeu esse recurso dos módulos EJB 2.0 para oferecer uma arquitetura que enfim forneça uso de conexão mais eficiente.
- Não é possível especificar o nível de isolamento no nível do método EJB ou no nível do bean.
- Se você configurar um aplicativo JDBC, um bean BMP (Bean-Managed Persistence) ou um servlet para participar de transações globais, qualquer conexão que for compartilhada não poderá aceitar um nível de isolamento especificado pelo usuário. Um WebSphere Application Server só pode definir um nível de isolamento especificado pelo usuário em uma conexão que não seja compartilhada em uma transação global. Geralmente, você deseja abster-se de especificar níveis de isolamento em conexões que podem ser compartilhadas.
- Nível de isolamento em conexões utilizadas pelos beans CMP 2.x
- Em um módulo EJB 2.x, quando um bean CMP 2.x utiliza uma nova origem de dados para acessar um banco de dados backend, o nível de isolamento é determinado pelo tempo de execução do WebSphere Application Server, com base no tipo de intenção de acesso designado ao bean ou ao método de chamada. Outros usuários da conexão não-CMP podem acessar essa mesma origem de dados e também utilizar a intenção de acesso e o suporte ao perfil do aplicativo para gerenciar seu controle de coincidência.
- Conexões utilizadas por outros enterprise beans 2.x e outros componentes não-CMP
- Para todas as outras instâncias de conexão do JDBC (conexões diferentes daquelas utilizadas pelos beans CMP), é possível especificar um nível de isolamento na referência de recursos da origem de dados. Para as conexões que podem ser compartilhadas, executadas em transações globais, esse método é a única maneira de definir o isolationLevel para conexões. Não é permitido tentar definir diretamente o nível de isolamento através do método setTransactionIsolation() em uma conexão compartilhável que é executada em uma transação global. Para utilizar um nível de isolamento diferente em conexões, é preciso fornecer uma referência de
recurso diferente. Defina esses padrões através da sua ferramenta de montagem.
Cada referência de recurso se associa a um nível de isolamento. Quando seu aplicativo utiliza esse nome de JNDI (Java™ Naming and Directory Interface) de referência de recurso para consultar uma origem de dados, cada conexão retornada dessa origem de dados utilizando essa referência de recurso tem o mesmo nível de isolamento.
Os componentes que necessitem utilizar conexões compartilháveis com vários níveis de isolamento podem criar várias referências de recurso, dando a elas nomes de JNDI diferentes, e fazer o código pesquisar a origem de dados apropriada para o nível de isolamento que precisam. Dessa forma, é possível utilizar conexões separadas com os diferentes níveis de isolamento ativados nelas.
É possível mapear essas várias referências de recurso para a mesma origem de dados configurada. No entanto, as conexões ainda vêm do mesmo pool básico; o gerenciador de conexão não permite o compartilhamento de conexões solicitadas pelas referências de recursos com níveis diferentes de isolamento. Considere o seguinte cenário:- Uma origem de dados está ligada a duas referências de recursos: jdbc/RRResRef e jdbc/RCResRef.
- RRResRef tem o nível de isolamento RepeatableRead definido. RCResRef tem o nível de isolamento ReadCommitted definido.
O produto não pedirá que você configure o nível de isolamento em uma referência de recurso da origem de dados para um módulo aplicativo não CMP. Se você não especificar o nível de isolamento na referência de recurso, ou se especificar TRANSACTION_NONE, o tempo de execução do WebSphere Application Server utilizará um nível de isolamento padrão para a origem de dados. O Application Server utiliza uma configuração padrão com base no driver JDBC.
Para a maioria dos drivers, o WebSphere Application Server utiliza um padrão de nível de isolamento de TRANSACTION_REPEATABLE_READ. No entanto, para drivers Oracle, o Application Server utiliza um nível de isolamento do TRANSACTION_READ_COMMITTED. Utilize a seguinte tabela para referência rápida:
Banco de Dados: Nível de isolamento padrão: DB2 RR Oracle RC Sybase RR Informix RR Apache Derby RR SQL Server RR Nota: Esses mesmos níveis de isolamento padrão são utilizados em casos de consultas diretas de JNDI de uma origem de dados.- RR = Leitura repetível de JDBC (TRANSACTION_REPEATABLE_READ)
- RC = Leitura consolidada de JDBC (TRANSACTION_READ_COMMITTED)
Para customizar o nível de isolamento padrão, você pode usar a propriedade customizada webSphereDefaultIsolationLevel para a origem de dados. Na maioria dos casos, defina o nível de isolamento no descritor de implementação quando compactar o arquivo EAR, mas em algumas situações talvez seja necessário customizar o nível de isolamento padrão. Esta propriedade não terá efeito se nenhuma das opções anteriores for usada, e esta propriedade customizada é fornecida para estas situações em que não há outro meio de configurar o nível de isolamento.
Utilize os seguintes valores para a propriedade customizada webSphereDefaultIsolationLevel:
Para definir essa propriedade customizada para uma origem de dados:Valores possíveis Nível de isolamento JDBC Nível de isolamento do DB2 8 TRANSACTION_SERIALIZABLE Leitura Repetitiva (RR) 4 (padrão) TRANSACTION_REPEATABLE_READ Estabilidade de Leitura (RS) 2 TRANSACTION_READ_COMMITTED Estabilidade de Cursor (CS) 1 TRANSACTION_READ_UNCOMMITTED Leitura Não Confirmada (UR) 0
TRANSACTION_NONE Sem consolidação (NC) - Clique em .
- Clique em Origens de Dados na seção Propriedades Adicionais.
- Clique no nome da origem de dados.
- Clique em Propriedades Customizadas.
- Crie a propriedade customizada webSphereDefaultIsolationLevel.
- Clique em Novo(a).
- Digite webSphereDefaultIsolationLevel para o campo de nome.
- Digite um dos valores possíveis no campo de valor.
- Nível de isolamento de referência de recurso
- Nível de isolamento especificado pela política de intenção de acesso
- Propriedade customizada que configura um nível de isolamento
- Configuração padrão do Servidor de Aplicativos.