[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Desespero total



Olá,

    Após o dia inteiro de tentativas frustradas de entender o que está 
acontecendo, acabo de concluir que eu não sei o que está acontecendo.
    O ambiente que eu preparei para testar e entender como as coisas 
funcionam pra implementar o EP é o seguinte:

1) Um servidor de aplicações (SA1) com um EJB sessão de fachada para 
outros entity beans (por acaso, são os EJBs do EP1 - alunos e 
disciplinas). A sessão com o invoker-proxy-binding para IIOP.
2) Um outro servidor de aplicações (SA2) com um EJB sessão que é apenas 
um proxy para o EJB sessão que está em SA1. Também configurado com o 
invoker-proxy-binding de IIOP. Ou seja, tudo que o EJB em SA2 faz é 
delegar os métodos para o session bean que está no SA1.
3) Os dois session beans estão configurados, no ejb-jar.xml, para 
<transaction-type>Container</transaction-type>. Dessa forma, meus EJBs 
não usam transações em lugar algum.
4) Usando o Jboss do jeito que ele é, sem nenhuma alteração minha
5) Meu aplicativo cliente de testes chama métodos do EJB que está em SA2

    Eu estava usando o serviço de nomes do CORBA (*) no SA2 para pegar a 
referência do EJB no SA1. Aparentemente, tudo funcionava, mas desse 
jeito aí, o único interceptador que eu via ser chamado era o 
TxServerInterceptor. Os outros dois eu não vi serem chamados nenhuma 
vez... Achei isso um pouco estranho, resolvi usar o serviço de nomes do 
Jboss, como o Giuliano disse que fez em um de seus emails. Troquei as 
propriedades por (**) e tentei rodar meu aplicativo de testes. Ele deu 
pau. O erro que dá no SA1 é o seguinte:

20:10:14,337 ERROR [LogInterceptor] RuntimeException in method: public 
abstract matricula.GerenciadorDeMatriculas 
matricula.GerenciadorDeMatriculasHome.create() throws 
java.rmi.RemoteException,javax.ejb.CreateException:
java.lang.RuntimeException: Not a TransactionImpl, but a 
org.jboss.proxy.ejb.ForeignTransaction
    at org.jboss.tm.TxManager.resume(TxManager.java:260)
    at 
org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:310)

    Esse erro aconteceu no SA1. Eu suponho que ele tenha passado mal com 
o contexto (ou falta dele)  que veio do SA2. Eu dei uma fuçada e não 
consegui descobrir nada. Alguém tem alguma idéia ?

    A minha principal dúvida é: o ambiente de testes que eu fiz é válido ?
    Posso confiar nas container managed transactions ?
    O "certo" é o EJB no SA2 pegar uma referência pro EJB no SA1 através 
do serviço de nomes do CORBA ou Jboss ? (eu suponha que isso não deveria 
fazer diferença, mas...)
   
Desde já agradeço,

Danilo, confuso.


(*)   
props.setProperty("java.naming.factory.initial", 
"com.sun.jndi.cosnaming.CNCtxFactory");
props.setProperty("java.naming.provider.url", 
"corbaloc::localhost:3528/JBoss/Naming/root");

(**)
props.setProperty("java.naming.factory.initial", 
"org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "jnp://localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jnp.interfaces");