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

Re: EP3



        Oi!

    Pois é... pilhas assim não aparecem no meu computador. Eu fiz o 
seguinte teste:

    1 - Implantei dois beans, um de sessão e um de entidade, em um SA 
(vou chamá-lo de SA 1)
    2 - Implantei os mesmos dois beans, um de sessão e um de entidade, 
em outro SA (vou chamá-lo de SA 2)
    3 - Enfiei um breakpoint no send_request.
    4 - Criei um cliente bobão que chama um bean em SA 1.
   
    O código (inicial) do método do Bean implantado em SA 1 que o 
cliente chama é (era) o seguinte:

            Object obj = 
initCtx.lookup("java:comp/env/external/itau/ejb/BankingSessionHome");
            BankingSessionHome ih = 
(BankingSessionHome)PortableRemoteObject.narrow(obj, 
BankingSessionHome.class);
            BankingSession itau = 
(BankingSession)PortableRemoteObject.narrow(ih.create(), 
BankingSession.class);
           
            /* Faz a transferência */
            this.add(-quantity); // Tira - isto chama um bean de 
entidade colocado
            itau.add(quantity);  // Põe - isto chama um bean de sessão 
remoto, que por sua vez chama um bean de entidade remoto

    Essa referência em java:comp/env aponta para a raíz do serviço de 
nomes CORBA em SA 2. Quando uso o código desse jeito, a chamada vai para 
o SA 2, entra no bean, etc, etc, mas o TxServerClientInterceptor não é 
executado.
    Resolvi, portanto, mudar o código acima para:

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

            InitialContext initCtx = new InitialContext(props);
            /* Cria uma seção para o outro JBoss */
            Object obj = initCtx.lookup("jboss/banking/BankingSessionHome");
            BankingSessionHome ih = 
(BankingSessionHome)PortableRemoteObject.narrow(obj, 
BankingSessionHome.class);
            Object inter = ih.create();
            BankingSession itau = 
(BankingSession)PortableRemoteObject.narrow(inter, BankingSession.class);
           
            /* Faz a transferência */
            this.add(-quantity); // Tira
            itau.add(quantity);  // Põe

    Quando chego na linha em que o método BankingSessionHome#create vai 
ser chamado, tomo uma:

    19:32:41,309 INFO  [STDOUT] java.lang.ClassCastException
        19:32:41,310 INFO  [STDOUT]     at 
com.sun.corba.se.internal.iiop.ShutdownUtilDelegate.isLocal(ShutdownUtilDelegate.java:39)
        19:32:41,311 INFO  [STDOUT]     at 
javax.rmi.CORBA.Util.isLocal(Util.java:262)
        19:32:41,312 INFO  [STDOUT]     at 
ejbtest.interfaces._BankingSessionHome_Stub.create(Unknown Source)
        19:32:41,335 INFO  [STDOUT]     at 
org.jboss.proxy.ejb.EjbObjectCorbaServant._invoke(EjbObjectCorbaServant.java:255)
            ....
        19:32:41,336 INFO  [STDOUT]     at 
org.jacorb.poa.RequestProcessor.invokeOperation(RequestProcessor.java:300)
        19:32:41,337 INFO  [STDOUT]     at 
org.jacorb.poa.RequestProcessor.process(RequestProcessor.java:595)
        19:32:41,338 INFO  [STDOUT]     at 
org.jacorb.poa.RequestProcessor.run(RequestProcessor.java:737)

    Meus stubs RMI/IIOP estão sendo gerados e inseridos em JARs contidos 
nos EARs que contêm os beans. Portanto não deve ser isso.
    Meu jboss.xml é:

    <jboss>

        <enterprise-beans>
            <session>
                <ejb-name>BankingSession</ejb-name>
                <jndi-name>jboss/banking/BankingSessionHome</jndi-name>
       
                <!-- Vamos usar IIOP -->  
                <invoker-bindings>
                    <invoker>
                        
<invoker-proxy-binding-name>iiop</invoker-proxy-binding-name>
                    </invoker>
                </invoker-bindings>
           
                <!-- Referência para um Entity Bean co-locado -->
                <ejb-local-ref>
                    <ejb-ref-name>ejb/MoneySourceLocalHome</ejb-ref-name>
                    
<local-jndi-name>jboss/banking/MoneySourceLocalHome</local-jndi-name>
                </ejb-local-ref>
           
            </session>       

            <entity>
                <ejb-name>MoneySource</ejb-name>
                
<local-jndi-name>jboss/banking/MoneySourceLocalHome</local-jndi-name>
            </entity>

        </enterprise-beans>
    </jboss>

    Gente, faz uns bons três dias que estou em cima dessas coisas e não 
consigo fazê-las funcionar. Estou quase jogando tudo o que eu fiz até 
agora no lixo e começando do zero de novo. Alguém aí tem alguma idéia?

    Abraços,

       Giuliano, já tendo um chilique.

>Ola Raphael,
>tudo bom cara?
>
>On Wed, Dec 08, 2004 at 04:12:55PM -0200, Raphael Camargo wrote:
>  
>
>>Estamos com problemas para rodar nosso teste. Nosso interceptador do
>>lado serivdor, ServerClientInterceptor, não está sendo chamado chamado
>>de jeito nenhum.
>>    
>>
>Pelo que eu testei, se o EJB implantado no Servidor de Aplicacoes (SA) nao
>acessar EJBs em outro SA, dai ele nunca chama esse metodo mesmo. Mas no meu
>teste, fiz um lookup do home de outro EJB em outro SA e dei um create nesse
>home. Dai ele chama o ServerClientInterceptor.send_request(ClientRequestInfo
>ri). Da uma olhada no stacktrace e tenta ver ate onde seu JBoss ta indo (isso
>e do lado do SA que chama um EJB em outro SA):
>
>17:33:29,012 INFO  [STDOUT]     at org.jboss.tm.iiop.TxServerClientInterceptor.send_request(TxServerClientInterceptor.java:107)
>17:33:29,013 INFO  [STDOUT]     at org.jacorb.orb.portableInterceptor.ClientInterceptorIterator.invoke(ClientInterceptorIterator.java:86)
>17:33:29,013 INFO  [STDOUT]     at org.jacorb.orb.portableInterceptor.AbstractInterceptorIterator.iterate(AbstractInterceptorIterator.java:67)
>17:33:29,014 INFO  [STDOUT]     at org.jacorb.orb.portableInterceptor.ClientInterceptorIterator.iterate(ClientInterceptorIterator.java:62)
>17:33:29,015 INFO  [STDOUT]     at org.jacorb.orb.ClientInterceptorHandler.invokeInterceptors(ClientInterceptorHandler.java:237)
>17:33:29,015 INFO  [STDOUT]     at org.jacorb.orb.ClientInterceptorHandler.handle_send_request(ClientInterceptorHandler.java:76)
>17:33:29,016 INFO  [STDOUT]     at org.jacorb.orb.Delegate.invoke_internal(Delegate.java:880)
>17:33:29,017 INFO  [STDOUT]     at org.jacorb.orb.Delegate.invoke(Delegate.java:857)
>17:33:29,019 INFO  [STDOUT]     at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)
>17:33:29,020 INFO  [STDOUT]     at org.omg.CosTransactions._ResourceStub.prepare(_ResourceStub.java:150)
>17:33:29,020 INFO  [STDOUT]     at org.jboss.tm.TransactionImpl$EnlistedCorbaResource.prepare(TransactionImpl.java:2202)
>17:33:29,020 INFO  [STDOUT]     at org.jboss.tm.TransactionImpl.prepareResources(TransactionImpl.java:1569)
>17:33:29,021 INFO  [STDOUT]     at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:326)
>17:33:29,021 INFO  [STDOUT]     at org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction(TxInterceptorCMT.java:457)
>17:33:29,022 INFO  [STDOUT]     at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:325)
>17:33:29,022 INFO  [STDOUT]     at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:149)
>17:33:29,022 INFO  [STDOUT]     at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:128)
>17:33:29,023 INFO  [STDOUT]     at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
>17:33:29,023 INFO  [STDOUT]     at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
>17:33:29,024 INFO  [STDOUT]     at org.jboss.ejb.EntityContainer.internalInvoke(EntityContainer.java:514)
>17:33:29,024 INFO  [STDOUT]     at org.jboss.ejb.Container.invoke(Container.java:854)
>17:33:29,025 INFO  [STDOUT]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>17:33:29,025 INFO  [STDOUT]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>17:33:29,025 INFO  [STDOUT]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>17:33:29,026 INFO  [STDOUT]     at java.lang.reflect.Method.invoke(Method.java:324)
>17:33:29,026 INFO  [STDOUT]     at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
>17:33:29,027 INFO  [STDOUT]     at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
>17:33:29,027 INFO  [STDOUT]     at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
>17:33:29,027 INFO  [STDOUT]     at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:242)
>17:33:29,028 INFO  [STDOUT]     at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
>17:33:29,028 INFO  [STDOUT]     at org.jboss.proxy.ejb.EjbObjectCorbaServant._invoke(EjbObjectCorbaServant.java:255)
>17:33:29,039 INFO  [STDOUT]     at org.jacorb.poa.RequestProcessor.invokeOperation(RequestProcessor.java:300)
>17:33:29,042 INFO  [STDOUT]     at org.jacorb.poa.RequestProcessor.process(RequestProcessor.java:595)
>17:33:29,042 INFO  [STDOUT]     at org.jacorb.poa.RequestProcessor.run(RequestProcessor.java:737)
>
>
>  
>
>>Estamos achando que pode ser um bug no JBoss. Vc conseguiu fazer este
>>interceptador rodar?
>>    
>>
>Aqui pelo menos parece que esse interceptador esta sendo chamado. Mas nem
>sei mais que que eu to fazendo direito... To meio perdido... :-)
>
>Nao sei se deu pra entender. Mas manda a mensagem para a lista, as vezes mais
>alguem pode estar com o mesmo problema que voce.
>
>Abracos e bom trabalho!
>
>  
>