Cliente EJB remoto

7 respostas
H

Pessoal, estou começando com EJB. Já consegui fazer funcionar um EJB com um cliente Home aplicado em um Servlet, agora quero fazer funcionar com a inteface remota. Eu tentei fazer da seguinte forma (estou me baseando em um tutorial que encontrei). Será que alguém pode me ajudar?

Meu cliente remoto:

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

import aplicacao.interfaces.LoginHome;

public class TesteLogin
{
	
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		Hashtable t = new Hashtable();
        t.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        t.put(Context.PROVIDER_URL, "localhost");

		
		LoginHome home;
		try
		{
			Context context = new InitialContext(t);
			Object ref = context.lookup("java:/comp/env/ejb/Login");
			home = (LoginHome) PortableRemoteObject.narrow(ref, LoginHome.class);
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		
	}

}

Erro como resultado da execução:

javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
	at javax.naming.InitialContext.init(InitialContext.java:223)
	at javax.naming.InitialContext.<init>(InitialContext.java:197)
	at TesteLogin.main(TesteLogin.java:27)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:242)
	at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:42)
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
	... 4 more

7 Respostas

cd1

Olá hlhaas,

Você colocou os JARs certos do JBoss no classpath da sua aplicação? No momento, eu não tô lembrado exatamente quais são, mas se eu não me engano são uns 6 JARs… na dúvida, coloque tudo que tá em <JBOSS_HOME>/lib :stuck_out_tongue: O seu problema é que sua aplicação não tá encontrando aquela classe ali (org.jnp.interfaces.NamingContextFactory), que está em algum dos JARs necessários.

Até mais, :wink:

Leozin

tem o jboss-client-all eu acho… somente esse jar já é o suficiente

nao esquece de fazer com o context factory e tal

:stuck_out_tongue:

H

cd1,

eu coloquei todos os JARS que estão em <JBOSS_HOME>/lib e não resolveu. Eu estou achando que o apontamento “org.jnp.interfaces.NamingContextFactory” não deve estar correto.

H

Então,

utilizei a dica do Leozin e funcionou, o jar é o jbossall-client.jar, que está em <JBOSS_HOME>/client

Obrigado pessoal !

H

Leozin,

o que você quiz dizer com

nao esquece de fazer com o context factory e tal
?

Leozin

porque quando utilizei ejbs remotos tive que utilizar um INITIAL_CONTEXT_FACTORY e um objeto properties etc pra efetuar os jndi lookup

fabeen

tente substituir isto

Hashtable t = new Hashtable();
     t.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
     t.put(Context.PROVIDER_URL, "localhost");

por isto :

Properties props = new Properties();
      props.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); 
      props.put("java.naming.provider.url","jnp://localhost:1099");
Criado 18 de setembro de 2006
Ultima resposta 18 de set. de 2006
Respostas 7
Participantes 4