Lookup EJB lança ClassCastException no iAS 10.1.3.2 em cluster [RESOLVIDO (UFA!)]

2 respostas
thiago.correa

Boa tarde,

eu estou com o seguinte problema, tenho duas máquinas em cluster rodando o ias 10.1.3.2, que aqui vou chamar de maquina-01 e maquina-02.
Nela estou tentando rodar uma aplicação com EJB, o problema é que, quando o cluster é direcionado para a maquina-01, a aplicação funciona
ok, porém, quando é direcionado para a maquina-02, rola um ClassCastException ao fazer o cast do retorno do Context.lookup. A stack trace que
eu tenho é a seguinte:

java.lang.ClassCastException: EquipamentoHome_EntityHomeWrapper162 at com.rge.novalig.web.servlets.NovaLigConsEquipServlet.getEquipamentos(NovaLigConsEquipServlet.java:431) at com.rge.imobiliaria.servlets.ConsultaEquipamentoServlet.getEquipamentos(ConsultaEquipamentoServlet.java:59) at _jsf._trocanome._popupEquipamento._jspService(_popupEquipamento.java:59) [SRC:/jsf/trocanome/popupEquipamento.jsp:20] at com.orionserver[Oracle Containers for J2EE 10g (10.1.3.2.0) ].http.OrionHttpJspPage.service(OrionHttpJspPage.java:59) at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:462) at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:597) at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:521) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:712) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:369) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:258) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:50) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:192) at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:283) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:197) at com.rge.imobiliaria.servlets.ConsultaEquipamentoServlet.service(ConsultaEquipamentoServlet.java:46) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:712) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:369) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:865) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:447) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.AJPRequestHandler.run(AJPRequestHandler.java:302) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].server.http.AJPRequestHandler.run(AJPRequestHandler.java:190) at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.2.0) ].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303) at java.lang.Thread.run(Thread.java:595)

A maneira que eu estou chamando o EJB é a seguinte:

Context context = new InitialContext();
Object object = context.lookup("Equipamento");
EquipamentoHome home = (EquipamentoHome) object;

O ejb-jar.xml está assim configurado:

<entity>
      <description>Entity Bean ( Container-managed Persistence )</description>
      <display-name>Equipamento</display-name>
      <ejb-name>Equipamento</ejb-name>
      <home>com.rge.ejb.EquipamentoHome</home>
      <remote>com.rge.ejb.Equipamento</remote>
      <ejb-class>com.rge.ejb.impl.EquipamentoBean</ejb-class>
      <persistence-type>Container</persistence-type>
      <prim-key-class>com.rge.ejb.EquipamentoPK</prim-key-class>
      <reentrant>False</reentrant>
      <cmp-field>
        <field-name>equipamento_id</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>nome</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>potencia</field-name>
      </cmp-field>
    </entity>

e a estrutura do diretório está assim

imobiliaria.ear
	|-commons-beanutils-1.7.0.jar
	|-segviaejb.jar
	|-imobiliaria.war
	|-META-INF
		|-application.xml
		|-orion-application.xml

Procurei em fóruns e em documentação, segui as dicas ali descritas, mas não obtive sucesso!

Vale a pena salientar que, quando não estava rodando em cluster (ou stand alone), ou até mesmo acessando as máquinas separadas (http://maquina-01/app ou
http://maquina-02/app) a aplicação rola ok!

Aguardo sugestões,

Obrigado!

2 Respostas

keller

Ola,

Context context = new InitialContext();  
Object object = context.lookup("Equipamento"); // nao ta faltando um "ejb/Equipamento" aqui?
System.out.println("Retorno do lookup: "+object);
EquipamentoHome home = (EquipamentoHome) object;
Equipamento equipamento = home.create();
// mais codigo aqui..

Boa sorte! :thumbup:

thiago.correa

Opa Keller,

o seu palpite deu certo, uma outra alternativa que eu havia encontrado seria colocar o jar com os EJBs no applib do container OC4J.

Valeu pela ajuda!!!

Criado 30 de novembro de 2007
Ultima resposta 3 de dez. de 2007
Respostas 2
Participantes 2