JBoss, Hibernate MBean Service e Cliente remoto

Bom dia,

Primeiramente peço desculpas pelo enorme post, porém caso alguém queira ajudar, tal extensa apresentação do problema, será necessária .

Estou em um projeto que está utilizando Hibernate como MBean Service no jboss utilizando o modelo do site http://hibernate.org/66.html .

:arrow: Na web:
Como o projeto usa struts utilizo um plugin para pegar o SessionFactory via JNDI
e disponibilizo-o para o resto da aplicação colocando uma ref dele no contexto da aplicação.

Ok, tudo funciona beleza!

:arrow: Nos EJBs:
Utilizo tanto Session Beans Statefull quanto Stateless que pegam o SessionFactory via JNDI e passam para os DAOs que do hibernate.

Com estes EJBs faço várias operações com “subsistemas” , eles são Sessions Façades.
No caso chamo outros EJBs, que acessam conectores e ainda EJBs BMP que utilizam os DAOs do Hibernate por baixo dos panos(juro que não foi eu quem fiz isso!!).
Ah! Todos os EJBs são chamados via Component Remote Interface.

:!: Bom, quando a chamada aos EJBs Façades é realizada pela WEB tudo ocorre normalmente.

:?: A mesma chamada ao EJB Façade, no caso ao stateless, realizada por um cliente remoto, em outra máquina mesmo, mais notadamente outro Jboss, que tem uma classe de agendamento(sem contexto transacional nehum), as tais Scheduler,

http://www.huihoo.com/jboss/online_manual/3.0/ch13s58.html

que roda de tempos em tempos, faz a chamada corretamente, executa as operações e tudo parece estar normal.

:?: Porém, imediatamente após esta execução, na primeira chamada a qualquer método DAO(Hibernate) , quando este (que quando está como serviço do JBoss utiliza o gerenciamento de Transações dele baseado na API JTA) tenta usar a referência para o UserTransaction, recebe enão um NullPointerException.

Ou seja o serviço de agendamente remoto roda, e após isto qualquer acesso aos métodos DAOs, tanto na web, ou cliente remoto, recebem um NullPointerException ao tentar utilizar os métodos dos DAOs.

Quando coloquei este servico de agendamento no mesmo JBoss que está o EAR com a aplicação WEB e os EJBs e Connectores, o problema não ocorreu.

Como tais aplicações DEVEM ficar em máquinas distintas( por força maior) preciso entender o problema.

Alguém tem algum palpite ?

Obrigado e desculpem-me novamente pelo enorme post.

Adilson Chicoria Jardim

Estou com um problema semelhante. retirei este código:

  @PersistenceContext
  protected EntityManager em;

de dentro do Session bean Stateless e coloquei dentro do DAO ( Pois minha aplicação pode ser ser utilizada sem o AS )

Após isso, também fiquei com NPE quando rodava o projeto. Depois de muita pesquisa, descobri que o AS só injeta o EntityManager anotado com @PersistenceContext dentro de um EJB.

É esse seu caso ?

Olá Adilson,

tenho dois…

  1. vc poderia abrir sua arquitetura, colocando os fontes que apresentam problemas, as pilhas de erros, etc, etc, para uma análise detalhada, esperando que alguma alma caridosa acabe com seu sofrimento.

  2. se quiser mais privacidade, vc pode contratar um especialista que saiba exatamente onde dar a “martelada”.

Abraço.