EJB - Conflito de contexto - Como configurar

5 respostas
felipecaparelli

Olá Comunidade Java,

estou passando por uma situação complicada com EJBs e gostaria de um direcionamento.

Tenho um JBoss rodando duas instâncias dentro dele (PRD1 e PRD2), um para cada empresa. Porém, nas duas eu tenho um projeto especifico que foi replicado, só sendo modificado o nome dele. Mas os EJBs tem o mesmo nome e são remotos.

Acredito que devido a isso sempre que eu peço para utilizar um EJB ele usa sempre o que esta no PRD1 e nunca o da instancia PRD2.

O que devo configurar pra arrumar isso? Tentei mudar o nome do contexto mas não rolou.

Falta fazer mais alguma coisa? Não gostaria de ter que mudar o nome dos EJBs só para diferenciar.

5 Respostas

tiagogn

Olá, não sei se entendi bem o seu problema, mas para resolver problemas de mesmo nome com EJB’s, você pode especificar o caminho completo do seu EJB no momento do lookup, incluindo o jar no nome da ppesquisa, Ex: pacote1.jar#nomeDoEjb

Espero ter ajudado.

Ate+

maior_abandonado

não sei se entendi direito o que você disse, mas se você especificou fixo o nome dos EJBs, por exemplo no atributo name da anotação Stateless ou Statefull, esse nome fica no JNDI que é para o servidor em si, não para unicamente a sua aplicação, de forma que você não pode ter dois EJBs com o mesmo nome.

Minhas considerações:

Por que um projeto EJB para cada cliente? somente para ter o nome deste cliente? Se isso for para ser usado por mais de um cliente, então é uma idéia ruim, você vai gastar assim mais memória no seu servidor, vai usar mais conexões com o seu banco de dados, vai ter uma manuteibilidade ruim (imagina você no futuro com sei la… 15 clientes, cada vez que for dar manutenção nesse EJB você tem que atualizar 15 pacotes…)… enfim, te aconselho FORTEMENTE a deixar o seu EJB com um nome genérico se for isso e quando o seu cliente acessar o EJB ele deva enviar algum parâmetro identificando-se (código de cliente e senha, sei la).

Se você precisar assim mesmo deixar um pacote para cada cliente, então retire antes o nome do EJB especificado e deixe o container nomear o seu EJB, para que ele use o nome do pacote, que acredito que isso vai resolver o seu problema (vai fazer oq ue você quer… resolver novamente te digo, mais ou menos…).

felipecaparelli

Olá a todos e obrigado pelas dicas.

Vocês entenderam mais ou menos a situação.
O meu caso é o seguinte: tenho dois sistemas (um para cada empresa), um é cópia do outro, mas cada um deve possuir sua própria base de dados (isso já foi configurado), apesar das tabelas serem as mesmas os dados são diferentes. Por isso a cópia, não apenas pela identidade visual do sistema (mas isso tbm).

Deixe me ver se entendi direito: se eu modificar o atributo @ejb.bean jndi-name=“ejb/MeuEJB” do segundo para jndi-name=“ejb/MeuEJB2” vou parar de ter o problema? E o sistema vai conseguir continuar referenciando o mesmo? … claro, mudando os locais onde este é chamado pelo nome?

Tchello

Sim, eu entendi.
Quando você vai fazer um lookup do seu EJB, qual a porta que você especifica?
Pode ser ai o problema.
Por padrão o JBoss libera a porta 1099 para EJBs, mas como você tem duas instâncias cada uma deverá possuir uma porta diferente, capiche?

Abraços.

felipecaparelli

Huum… naum havia pensado neste caso da porta, mas o problema é que não tenho acesso ao ambiente de produção… só posso sugerir correções. De qualquer forma eu modifiquei o nome dos ejbs (atributo name e jndi-name) do segundo projeto para evitar o conflito. Pois, pelo que entendi do erro eles não conseguem conviver tendo o mesmo nome. Amanhã as correções entram em produção e dai eu coloco o resultado aqui.

Obrigado pela ajuda de todos… o GUJ sempre é ferramenta essencial na hora de corrigir problemas críticos por ter uma comunidade excelente. Dispense imitações :wink:

Criado 26 de fevereiro de 2011
Ultima resposta 28 de fev. de 2011
Respostas 5
Participantes 4