Melhor estratégia para EJB remotos

Caros,

Tenho que criar um EJB que vai atuar como uma camada de serviço.

Outras aplicações vão acessar este EJB via uma classe Delegate que eu criei, tanto para acesso local (de dentro do próprio EAR do EJB) quanto remotamente (de aplicações em outros containers e/ou na mesma instância do EAR do EJB de serviço).

Ou seja, os clientes do serviço EJB, acessarão de fora ou de dentro da mesma VM/Container.

Quando estão rodando em outra VM/Container, eu só forneço para a app cliente o JAR com as interfaces do EJB e implementação do Delegate, mais as interfaces dos tipos de retornor e boa. Tudo funciona ok!

Quando estão na mesma VM/Container, se eu forneço o jar pra app cliente, dá pau, pelo menos no JBoss. Se eu não forneço, ele usa as classes do EAR onde está o serviço, ai parece funcionar.

No caso da app cliente rodar na mesma VM, qual seria a melhor estratégia a adotar? Isolar os EARs e compartilhar o JAR com as classes/interfaces em comum, ou deixar como eu mencionei?

Valeu!

No caso do JBoss, baseado na minha experiencia, sobre o uso LOCAL de EJBs :

  1. o EAR que contém os EJBs de serviço não podem ter o escopo de classes isolado pelo jboss-app.xml, senão os EJBs não ficarão visiveis para outras aplicações.

  2. seguindo a instrução 1, o JAR do EJB ficaria visivel globalmente para as outras aplicações e não seria necessário adicionar o codigo EJB cliente (skeleton).

  3. Adicionar o codigo EJB cliente pode causar problemas de classes duplicadas, então talvez não valha o risco.

  4. Talvez seja preciso configurar a estratégia da ordem de deployment do jboss para garantir que o EAR/JAR dos EJB carregue primeiro, antes das demais aplicações - isto é configuravel no Jboss.

abraços,

Eduardo Murai
SCJP & SCEA