Serviço de Intenção de Acesso
Intenção de acesso é um serviço de tempo de execução do servidor de aplicativos que permite gerenciar com precisão a persistência de um aplicativo.
O serviço de intenção de acesso define um conjunto de anotações declarativas usadas pelo contêiner Enterprise JavaBeans (EJB) e seus agentes para fazer otimizações de desempenho para acesso ao bean de entidade. Essas anotações são organizadas em conjuntos denominados critérios de intenção de acesso.
Os critérios de intenção de acesso contêm um conjunto de anotações consideradas como dicas pelo contêiner de EJB e seus agentes. A maioria das políticas de intenção de acesso são dicas representando abstrações de alto nível que podem ser mapeadas para um gerenciador de recurso de backend específico. É responsabilidade da maquinaria de persistência de EJB assegurar o controle de simultaneidade, a conexão e o gerenciamento de cache necessários ao realizar os detalhes da persistência. O gerenciador de persistência EJB pode utilizar dicas de intenção de acesso para melhores decisões sobre desempenho ao realizar sua tarefa atribuída. Um número menor de intenções de acesso são dicas para o contêiner de EJB, influenciando o gerenciamento de coleções de EJB.
Normalmente, você configura a intenção de acesso de nível de bean para seus aplicativos. Também é possível aplicar políticas de intenção de acesso a beans dentro do escopo de perfis de aplicativos. Consequentemente, é possível configurar beans com diversas e opostas políticas de intenção de acesso. A documentação sobre análise de perfil de aplicativos explica com detalhes adicionais como configurar um aplicativo para aplicar uma determinada política de intenção de acesso a um bean para um pedido e, então, aplicar outra política de intenção de acesso ao mesmo bean para um pedido diferente.
O suporte para aplicar políticas de intenção de acesso no nível de método está obsoleto no WebSphere Application Server Versão 6.0. Nesse processo de configurar a intenção de acesso, você aplica uma política a métodos no escopo de um módulo EJB para que a política se torne a intenção de acesso padrão para todos os pedidos nesses métodos.
Considerações sobre Design de Intenção de Acesso
Embora as políticas de intenção de acesso possam ser configuradas em qualquer método de um bean de entidade, alguns atributos de uma política só podem ser alavancados pelo ambiente de tempo de execução sob certas condições. Por exemplo, simultaneidade e intenção de acesso somente são utilizadas para beans de entidade CMP quando o método ejbLoad é orientado a abrir uma conexão e ler dados de um determinado recurso; esses dados são armazenados em cache e utilizados para orientar as consultas corretas durante a chamada do método ejbStore. Dicas de leitura antecipada somente são utilizadas durante a execução de um localizador para um bean. O incremento de coleta e de pré-busca do gerenciador de recursos são utilizados somente em localizadores de vários objetos. A configuração de políticas em métodos que não utilizam a política não é um erro. Somente determinados atributos de qualquer política são utilizados, mesmo quando a política é aplicada adequadamente a um método. Entretanto, configurar critérios desnecessariamente em todo um aplicativo obscurece o design do aplicativo e complica a manutenção do aplicativo.
Intenção de Acesso com Beans de Entidade BMP
A funcionalidade declarativa da intenção de acesso fornece grande poder a você como desenvolvedor de um bean de entidade CMP. Você pode fornecer sugestões sobre como o produto deve gerenciar os detalhes de persistência sem ter de gerenciar explicitamente nenhuma lógica de persistência no aplicativo. Existem situações, porém, nas quais você pode precisar desenvolver beans de entidade BMP. Como a única diferença significativa entre os componentes BMP e CMP é quem fornece a lógica de persistência, os beans de entidade BMP deverão estar aptos a utilizar as sugestões de intenção de acesso da mesma forma que o produto faz em nome dos beans de entidade CMP. Os beans de entidade BMP que utilizam o serviço de intenção de acesso participam na análise de perfis de aplicativos; ou seja, o valor dos atributos de intenção de acesso pode diferir de pedido para pedido, permitindo que o bean de entidade BMP modifique de forma transparente sua estratégia de persistência.
É possível aplicar critérios de intenção de acesso a métodos de beans de entidade BMP, bem como a métodos de beans de entidade CMP. Como as dicas de intenção de acesso não são contratuais por natureza, não existe obrigação para um bean de entidade BMP de explorá-las. Espera-se que os beans de entidade BMP utilizem somente os atributos de intenção de acesso que sejam importantes para esse bean específico.
O critério de intenção de acesso atual é ligado ao espaço de nomes java:comp para um determinado bean de entidade BMP. Esse critério é atual somente pela duração da chamada do método durante a qual o critério de intenção de acesso foi recuperado. Em um cenário típico, você armazenaria em cache o tipo de acesso durante a chamada do método ejbLoad para que ações apropriadas possam ser tomadas durante a chamada do método ejbStore.
Práticas Recomendáveis de Intenção de Acesso
Ao aplicar políticas de intenção de acesso a métodos EJB, considere as seguintes questões.
- Inicie configurando a política de intenção de acesso padrão para uma entidade. Depois que seu aplicativo tiver sido criado e iniciado, você poderá ajustar nele determinados caminhos de acesso utilizando os perfis ou a intenção de acesso de nível de método do aplicativo.
- Não combine tipos de acesso. Evite utilizar os critérios pessimista e otimista na mesma transação. Para a maioria dos bancos de dados, os critérios pessimista e otimista utilizam níveis de isolamento diferentes. Isso pode resultar em várias conexões ao banco de dados, o que o impede de tirar proveito dos benefícios de desempenho possíveis através do compartilhamento de conexões.
- Tenha cuidado ao aplicar a política wsPessimisticUpdate-NoCollision. Esse critério não assegura a integridade dos dados. Não é mantida nenhuma trava de banco de dados e, portanto, transações simultâneas podem sobrescrever atualizações umas das outras. Utilize essa política somente se tiver certeza de que apenas uma transação tenta atualizar o armazenamento persistente a qualquer hora.
Para obter informações adicionais sobre a Intenção de acesso da API de Persistência Java (JPA), consulte o tópico sobre Intenção de acesso da JPA.