Olá,
Alguém sabe o por quê da geração de classes abstratas pelo plugin do Lomboz quando criamos um EJB com o Wizard?
Particularmente acho isso meio estranho, uma vez que “perdemos” a noção dos métodos definidos na interface SessionBean e que deveriam ser implementados (exemplo, o famoso setSessionContext que ontem eu postei um topico sobre ele…).
Ademais, se o EJB está declarado como abstrato, como é que o container J2ee consegue instanciar um objeto desse tipo? Por acaso é a classe xxxSession que o container instancia? Se isso for um pattern, alguem me avise que eu estou por fora.
Essa eh justamente uma grande vantagem que eu acho em usar o Lomboz. Na verdade o lomboz ira processar esse seu EJB (usando o xdoclet) e fara uma nova classe, que estende a sua classe, adicionando os metodos que voce nao criou, como ejbPassivate, blablabla.
Os containers, por sua vez, tambem fazem esse trabalho de estender seu EJB, no momento do deploy, para ativar as funcionalidade que voce definiu de modo declarativo no seu ejb-jar.xml. Essa estensao que os container fazem pode ser por AOP, por geracao de novas classes e compilacao, isso fica a cargo do container.
Para ficar um pouco mais claro, imaginemos um metodo criarUsuario num StatelessSessionBean. No ejb-jar.xml voce define que ele eh transacional, e que precisa de um usuario administrador para executar esse metodo. Uma possibilidade para o container, no momento do deploy seria sobrescrever o seu metodo criarUsuario da seguinte forma (em pseudo codigo):
public void criarUsuario(args) {
isUserInRole("admin");
beginTransaction;
super.criarUsuario();
endTransaction;
}
Eh por isso inclusive, que muitas pessoas defendem a substituicao de application servers por mecanismos de AOP, pois bastaria enxertar chamadas de metodos que verifiquem as necessidades do Componente, sem ter que comprar um Container que custa os tubos.
Espero que tenha esclarecido um pouco as “magicas” que acontecem com seus EJBs, dentro dos containers J2EE.
Nessa parte o metadata no 1.5 vai ajudar pacas, uma vez que te livra do AOP em muitos casos, provendo uma solucao bem mais elegante e facil de manipular.