Problemas ao fazer lookaps com ejb3

2 respostas
S

Beleza galera?
Estou fazendo um exemplo de ejb3 mas estou tendo problemas ao fazer lookups no meu session bean.
O erro é:

javax.naming.NameNotFoundException: CalculatorBean not bound
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
	at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
	at org.jnp.server.NamingServer.lookup(NamingServer.java:296)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
	at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:589)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at cliente.CalculadoraClient.main(CalculadoraClient.java:20)

Meinha interface remota:

package interfaces;

import javax.ejb.Remote;

@Remote
public interface Calculadora {
	public static final String JNDI_NAME = "CalculatorBean";
	long fatorial(int n);
}

Meu bean

package bean;

import interfaces.Calculadora;

import javax.ejb.Stateless;

@Stateless(mappedName="CalculatorBean")
public class CalculadoraBean implements Calculadora {

	public long fatorial(int n) {
		if (n < 0) throw new IllegalArgumentException();
		return n == 0 ? 1 : n * fatorial(n - 1);
	}

}

Estou usando java 6 e o jboss 4.2. Obrigado!

2 Respostas

M

E ai samurai, beleza ?
Olha, postando só o erro não adianta. Eu preciso saber como vc está tentando rodar a aplicação ?
Qual o servidro vc stá utilizando ?
Abraços

S

Beleza galera!
Consegui resolver o problema!
Existe 2 anotations

@RemoteBinding(jndiBinding="CalculadoraRemote")
@LocalBinding(jndiBinding="Calculadoralocal")

Com esses anottations eu consigo injetar um nome de binding para o meu ejb, ai o meu cliente pode acessar os meus ejbs com os nomes definidos nesses anotations.
O único problema é quando se define o mesmo nome para o local e para o remoto, neste caso deve se colocar após o nome do ejb o /remote ou o /local:

@RemoteBinding(jndiBinding="Calculadora/remote")
@LocalBinding(jndiBinding="Calculadora/local")

E o cliente deve acessar com o nome do ejb com o /local ou remoto:

Calculadora calculadora = (Calculadora) ctx.lookup("Calculadora/remote");

Agora só falta eu aprender timer bean
Mas isso funciona em qualquer servidor j2ee
Valeu pela ajuda gelera!

Criado 18 de novembro de 2007
Ultima resposta 19 de nov. de 2007
Respostas 2
Participantes 2