[quote=Leozin][quote=victorwss]Entre usar EJB 2.1 e não usar nada e fazer tudo na unha eu fico com a segunda opção. NÃO EXISTE NEM NUNCA EXISTIU RAZÃO NENHUMA PARA SE USAR EJB 2.1. Os imbecis que inventaram o EJB 1.0 ao 2.1 deveriam ser fuzilados pelo grande dano que causaram a plataforma java.
[/quote]
Por que tu diz isso? Quer dizer que razão pra EJB 3 existe e não pra EJB 2?[/quote]
O EJB 3 é algo significativamente diferente do EJB 2. O uso de JPA em lugar de CMP e BMP é ótimo, afinal de contas CMP não serve para nada mesmo (é preferível fazer DAOs na mão, ou seja BMP) e BMP é um dinossauro perto do JPA. Mas mesmo assim, o EJB 3 também tem algumas coisas meio sem sentido.
Na minha opinião, regras de negócio bem codificadas não precisam utilizar dados armazenados em atributos de SLSB ou MDBs que tornam-se inválidos após o fim da invocação dos métodos pertinentes. Tais atributos ao meu ver só deveriam ser usados para DI, o resto deveria estar em passagem de parâmetros ou em outros tipos de classes comuns que não sabem nada sobre EJB. Retirando o caso específico da DI, se você não precisa utilizar os atributos de um objeto, então este objeto não precisa ser mantido em um pool de instâncias e nem ter um ciclo de vida maluco. A injeção de dependências poderia ser feita de outra forma, uma destas formas é que todos os atributos fossem do tipo ThreadLocal ao invés do tipo XXX, então você sempre precisaria só de uma única instância de cada classe daquilo que hoje são SLSBs e MDBs. Seria algo um tanto semelhante aos Servlets (o container os trata como se fossem singletons), e pelo que andei vendo por aí, o singleton session bean do EJB 3.1 vai ser algo mais ou menos parecido com isso. Aliás, o Spring prova que DI poderia ser feito em qualquer classe, logo não há muito sentido em se criar um tipo de classe de ouro em um pedestal e chamá-la de stateless session bean só para isso (talvez para chamadas remotas até faça sentido, mas acho que isso também poderia ser trabalhado de outra forma).
Quanto a anotações de transações e interceptors, estes seriam bem melhores se pudessem ser usados em qualquer classe e não apenas em EJBs. O Spring tá aí para provar que isso é possível. Basta que o classloader altere o bytecode carregado instrumentando ele de acordo com o que há nas annotations. Aliás, DI é implementado desta forma.
Quanto ao SFSB, confesso que este pode ser bem útil, inclusive no EJB 2.1, apesar de que no EJB 2.1 o preço a pagar era bem doloroso.
Bem, esta é a minha opinião, e sei que muita gente não concorda com ela. Talvez eu esteja errado, mas é essa a visão que eu tenho.