Erro no lookup local ejb 3.0

6 respostas
L

Boa tarde galera,
estou com problema no lookup local , quando dou lookup como remote funciona sussegado…eu li que para funcionar o local é necessario que esteja na mesma instancia da jvm…como eu faco para dar um run no meu cliente utilizando a mesma instancia da jvm do projeto?
testei no console , testei no eclipse e em nenhum funciona…todos apresentam o mesmo erro:
Exception in thread “main” javax.ejb.EJBException: Invalid (i.e. remote) Invocation of local interface (null container)

alguem pode me ajudar??

Muito Obrigado

6 Respostas

felipeguerra

Desculpa, mas eu não entendi nada da sua dúvida…

L

desculpe, oque acontece é o seguinte,
estou usando EJB 3.0 , e estou tentando fazer um lookup no meu bean stateful …
quando tento utilizar:

UsuarioInterface user = (UsuarioInterface) ctx
				.lookup("UsuarioBean/local");

me da o seguinte erro

Could not dereference object [Root exception is javax.ejb.EJBException: Invalid (i.e. remote) invocation of local interface (null container)

agora quando uso:

UsuarioInterface user = (UsuarioInterface) ctx
				.lookup("UsuarioBean/remote");

usando remote funciona perfeitamente, eu li pesquisando no dr Google, que para o @local funcionar, ele fala que o cliente tem que estar na mesma instancia da jvm do servidor…só que não sei como fazer isso…

T

O que é sua aplicação cliente? Um EJB? Servlet? Swing?

felipeguerra

Se vc iniciou o container EJB (JBoss), faz o lookup assim do seu cliente:

public static Object doServiceLocator(String name) throws NamingException {
		
		Properties properties 	= null;
		InitialContext context 	= null;
		//------------------------------------------------------------
		
		
		
		//------------------------------------------------------------
		properties 	= new Properties();
		//------------------------------------------------------------
		
		
		
		//------------------------------------------------------------
		properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
		properties.put(Context.PROVIDER_URL, "jnp://localhost:1099");
		properties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
		//------------------------------------------------------------
		
		
		
		//------------------------------------------------------------
		context 	= new InitialContext(properties);
		//------------------------------------------------------------

		return context.lookup(name);
	}
jgbt

Basicamente, sempre que vc da um “run” um instancia da jvm é iniciado. Portanto, se vc fez iniciou o Jboss, vc fex “run” e uma JVM foi iniciada.
Se agora vc pegar uma classe cliente e tmb tentar todar ela(run) uma OUTRA instancia da jvm vai ser iniciada, portando o loockup local nao vai funcionar.
Um exemplo de acesso local seria uma app web rodando no seu JBoss, acessando um EJB rodando no mesmo JBoss.

[]´s

L

hmm intendi, muito obrigado pela explicação…
dexa eu aproveitar que só tem fera aqui e perguntar mais uma coisinha, estou tentando utilizar no meu projeto uma colection como FetchType.LAZY …meu servidoe de aplicacao fica num container jboss, e meu servidor web esta em outro servidor que só tem o tomcat, só que tenho um problema quando tento acessar minha colection, da aquela tal de LayzeException lá…
tenho duas situações:
sei que para que o lazy funcione eu preciso manter uma mesma sessão com ejb aberta…
as duvidas são a seguinte:
como eu mantenho a sessão aberta no cliente console e no cliente web??

Muitissimo Obrigado pela ajuda!!!

Criado 30 de junho de 2008
Ultima resposta 30 de jun. de 2008
Respostas 6
Participantes 4