Erro no lookup para EJB SessionFacade

3 respostas
L

Olá,

Desenvolvi uma aplicação web com EJB, tudo bem organizado, projeto do EJB, Projeto de CLiente que implementa o padrão Business Delegate, para a chamada dos Session Facades do EJB e o Projeto Web, com toda a camada visual e a chamada do métodos do Business Delegate, porém, chegou o cliente e disse: "Quero as classes de teste do EJB"!!!

Tique que produzir uma classe de teste que fizesse uma chamada ao EJB, escrevi o seguinte código:

@Test
	public void testObterTodosEventoFinanceiro()throws Exception {
		
		Hashtable p = new Hashtable();
		p.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
		p.put(Context.PROVIDER_URL, "iiop://localhost:2809");
		
		Context ctx = new InitialContext(p);
		
		Object obj = ctx.lookup(Constantes.JNDI_HISTORICO);
				
		EventoFinanceiroFacadeHome eventoFacadeHome = 
			(EventoFinanceiroFacadeHome)obj;
		EventoFinanceiroFacade eventoFacade = eventoFacadeHome.create();
		
		EventoFinanceiro[] lista = eventoFacade.getAllEventoFinanceiroObjects();
		
		assertTrue("Ok!", lista.length>0);
	}

porém, ao testar não funciona e retorna o seguinte erro:

javax.naming.NamingException: Failed to initialize the ORB [Root exception is org.omg.CORBA.INITIALIZE: Unable to init plugins vmcid: IBM minor code: 504 completed: No]
at com.ibm.ws.naming.util.Helpers.getOrb(Helpers.java:321)
at com.ibm.ws.naming.util.WsnInitCtxFactory.getInitialContextInternal(WsnInitCtxFactory.java:400)
at com.ibm.ws.naming.util.WsnInitCtx.getContext(WsnInitCtx.java:117)
at com.ibm.ws.naming.util.WsnInitCtx.getContextIfNull(WsnInitCtx.java:712)
at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:171)
at javax.naming.InitialContext.lookup(InitialContext.java:363)
at MatrizBonusBusinessDelegateTeste.testObterTodosEventoFinanceiro(MatrizBonusBusinessDelegateTeste.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.omg.CORBA.INITIALIZE: Unable to init plugins vmcid: IBM minor code: 504 completed: No
at com.ibm.rmi.corba.PluginRegistry.initPlugin(PluginRegistry.java:229)
at com.ibm.rmi.corba.PluginRegistry.initPlugins(PluginRegistry.java:210)
at com.ibm.rmi.corba.PluginRegistry.initPlugins(PluginRegistry.java:216)
at com.ibm.rmi.corba.ORB.initializePlugins(ORB.java:580)
at com.ibm.rmi.corba.ORB.orbParameters(ORB.java:1328)
at com.ibm.rmi.corba.ORB.set_parameters(ORB.java:1215)
at com.ibm.CORBA.iiop.ORB.set_parameters(ORB.java:1681)
at org.omg.CORBA.ORB.init(ORB.java:364)
at com.ibm.ws.orb.GlobalORBFactory.init(GlobalORBFactory.java:86)
at com.ibm.ejs.oa.EJSORBImpl.initializeORB(EJSORBImpl.java:179)
at com.ibm.ejs.oa.EJSClientORBImpl.<init>(EJSClientORBImpl.java:83)
at com.ibm.ejs.oa.EJSClientORBImpl.<init>(EJSClientORBImpl.java:59)
at com.ibm.ejs.oa.EJSORB.init(EJSORB.java:102)
at com.ibm.ws.naming.util.Helpers.getOrb(Helpers.java:312)
... 26 more
Caused by: java.lang.NoClassDefFoundError: Invalid Implementation Key, com.ibm.CORBA.iiop.WLMPlugin
at com.ibm.ws.util.ImplFactory.loadClassFromKey(ImplFactory.java:363)
at com.ibm.ws.util.ImplFactory.loadClassFromKey(ImplFactory.java:354)
at com.ibm.ws.wlm.Factory$2.run(Factory.java:98)
at java.security.AccessController.doPrivileged(AccessController.java:246)
at com.ibm.ws.wlm.Factory.loadClass(Factory.java:96)
at com.ibm.ws.wlm.client.WLMClient.init(WLMClient.java:130)
at com.ibm.rmi.corba.PluginRegistry.initPlugin(PluginRegistry.java:224)
... 39 more

Se alguém puder me ajudar, ficarei grato, obrigado!!!

3 Respostas

G

Testar EJB é uma coisa complicada. Primeiro porque vocẽ precisa rodar os beans dentro do appserver, sendo assim você não está tendo testes unitários. Mas vamos deixar essa discução de lado :slight_smile:

O que eu faço normalmente é subir o EJB no appserver e chamar remotamente os beans. Porém uma coisa a lembrar é que cada container exporta seus EJBs de uma forma, apenas no JEE6 é que há um padrão.

Nesse caso é necessário que você diga qual o appserver está usando, e se suas classes são remotas. Ou então você pode implementar uma única classe remota que possa fazer as chamadas aos seus EJBs locais.

Abraços

L

Olá,

Obrigado pela atenção, mas me surgiu outras dúvidas …
gostaria de saber onde e como posso especificar meu appServer, estou usando o websphere 6.1, existe alguma configuração específica para ele?
mais uma pergunta, tenho mesmo que especificar se minhas classes são remotas? sendo que o acesso q faço a elas é um acesso remoto.

Desde já obrigado!!!

L

Pessoal, consegui resolver o problema com a adição de um .jar chamado:

com.ibm.ws.webservices.thinclient_6.1.0.jar

Este driver encontra-se no próprio diretório em que o WebSphere é instalado;

C:\Program Files\IBM\RAD\runtimes\base_v61\runtimes
ou
C:\Arquivos de Programas\IBM\RAD\runtimes\base_v61\runtimes

Obrigado!!! :smiley:

Criado 17 de abril de 2010
Ultima resposta 19 de abr. de 2010
Respostas 3
Participantes 2