[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Desespero total
- Subject: Desespero total
- From: Danilo Conde <danconde@xxxxxxxxxxxx>
- Date: Sat, 11 Dec 2004 20:44:29 -0200
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");