JNDI Lookups? Veja aqui ) que foi muito bem substituito por Injecao de Dependencias. EJB-QL nao era efetivo, sendo necessario utilizar JDBC ou outro mecanismo de persistencia e acesso ao banco de dados. Metodos de callback muitas vezes desnecessarios eram obrigatorios. ... Ja deu para entender porque tanta gente odeia (ou deveria) EJB. Tudo isso causava muitos problemas e gargalos nas aplicacoes, alta complexidade aliada a varias implementacoes alternativas (muita coisa ainda estava incompletada) e Anti-Patterns... deve ter muito programador que perdeu noites de sono, fez muita hora extra e naturalmente se apaixonou pelo Spring quando o mesmo comecou a se popularizar, e assim como que por consequencia, nunca mais quis ouvir falar de EJB (porem isto da outro post!).Na versao 3.x os EJB's foram completamente reestruturados implementando conceitos fundamentados no mundo open source como DI, CoC, JPA e Annotations. Abaixo vamos ver um comparativo entre as melhorias efetuadas da versao 3.0 para 3.1 e suas diferencas.Comparativo 3.0 x 3.1Stateless Session BeansCaso use EJB 3.0 sempre defina uma interface para seu Bean. Isto nao e uma opcao :)Stateless SessionsBeans : EJB para criar componentes especificos de regras de negocio onde naoexiste a necessidade de manter estado entre os metodos implementados. Exemplo: Public void showMessage (String message){ System.out.println(Sua mensagem e : +message); } Nao dependo de nenhum outro metodo para executar meu metodoshowMessage("Str"), isso significa que este metodo nao tem a necessidade de manterestado com outros metodos deste EJB.Anotacoes:@Stateless define um EJB como Stateless Session Bean.@Remote(Inferface.class) define que o EJB podera seracessado remotamente.@PostConstruct funciona como um metodo de instancia que eexecutado apos a sessao do EJB ser criada pelo EJB Container.@PreDestroy funciona como um metodo de instancia que eexecutado antes da sessao do EJB ser encerrada pelo EJB Container.Stateful Session BeansStateful Session Bean, tambem serve para criar componentesde negocio, porem seu funcionamento e o oposto de Stateless Session Beans. Com os SSB tenho a necessidade de manter estado comoutros metodos do EJB. Cada instancia deveser exclusiva, ja que e necessario manter o estado entre os metodos,porque oss dados de uma sessao nao devem se embaralhar com dados de outrassessoes.Exemplo:Imagine uma loja virtual onde voce tem os metodos: finalizarCompra(); consultarItensNoCarrinho(); adicionarItensNoCarrinho(); Os 'metodos' da sessao de um usuario nunca devem se 'embaralhar' com os 'metodos' de outros usuarios, caso isso ocorra os metodos que sao dependentes entre si serao prejudicados e nao irao realizar as funcoes para qual foram desenvolvidos.AnotacoesEJB 3.0 necessario definir uma interface para o bean emapear se o EJB tera acesso remoto ou local (similar ao stateless session bean)@Stateful e @ Remote ou @Local + (nomeInterface.class)EJB 3.1 nao e mais necessario definir uma interface se oacesso ao EJB for local. Deve-se mapear apenas com @StatefulUm Stateful sessionbean pode ser definido como ocioso onde e realocado da memoria principal paraum dispositivo secundario de armazenamento (HD por exemplo) ate ser requisitadanovamente.@Remove anotando um metodo com remove o EJB container aposa execucao deste metodo o EJB Container ira destruir a sessao do statefulsession bean corrente.@PostConstruct equivalenteao steteful session bean@PreDestroy - equivalente ao steteful session bean@PrePassivate uma instancia pode entrar no estado passivocaso nao esteja