Erro no lookup para EJB SessionFacade

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:

[code] @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);
}[/code]

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!!!

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

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!!!

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: