Lookup de EJB 3.0 Remoto

Salve pessoal,

Tenho um session bean dentro de um jar e essse jar dentro de um ear no JBoss 4.0.5.

Quero acessar esse bean a partir de um cliente remoto.

Já tentei fazer o lookup da seguinte maneira:

bean contendo:
@Stateless
public static final String JNDIname = ServiceProviderBean.class.getSimpleName() + “/remote”;

cliente fazendo lookup:
lookup(ServiceProviderBean.JDNIname);

bean contendo:
@Stateless
@RemoteBinding(jndiBinding=“br.com.xyz.services.provider.ServiceProviderBean”)

cliente fazendo lookup:
lookup(“ServiceProviderBean/remote”);

bean contendo:
@Stateless
@EJB(name=“sp”, beanInterface=ServiceProvider.class)

cliente fazendo lookup:
lookup(“java:/comp/env/sp”)

bean contendo:
@Stateless

cliente fazendo lookup:
lookup(“java:/comp/env/br.com.xyz.services.provider.ServiceProviderBean”);

e nada funcionou.

Só funcionou assim:

bean contendo:
@Stateless

cliente fazendo lookup:
lookup("//remote").

…porém, não quero usar esse lookup, para não ter que passar o nome do ear.

Como estou usando EJB3 e ele não necessita de ejb-jar.xml, o que está faltando para funcionar? Alguém poderia me dar um luz?

Agradeço desde já qualquer colaboração.

[]s,

Luiz

Boa tarde…

estou tendo o mesmo problema de só conseguir fazer o lookup no ejb3 utilizando lookup("//remote").

Alguem sabe como eu posso fazer isso sem utilizar o nome do ear.

Obrigado

Ai pessoal, vou colocar algumas coisas que usamos para acesso remoto de EJBS.

Fixture para acesso:

public class ServiceLocator {
	private Context context;

	public ServiceLocator(Context context) {
		this.context = context;
	}

	public ServiceLocator(Server server) throws NamingException {
		context = new InitialContext(JndiPropertiesBuilder.build(server));
	}

	/**
	 * Method responsible for fetching an instance of an EJB. Makes a lookup, if
	 * not found returns null
	 * 
	 * @param ejb
	 * @return
	 */
	public <T> Object lookup(Class<T> ejb) {
		try {
			Object lookup = context.lookup(ejb.getSimpleName() + "-remote");
			return lookup;

		} catch (NamingException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * Method responsible for fetching an instance of a remote service from a
	 * server selected by the manufacturer.
	 * 
	 * @param serviceRemoteBean
	 * @return
	 */
	public <T> Object getRemoteService(Class<T> serviceRemoteBean) {
		return lookup(serviceRemoteBean);
	}
}

public class JndiPropertiesBuilder {

	private JndiPropertiesBuilder() {
		// should not be instantiated.
	}

	public static Properties build(Server server) {
		Properties properties = new Properties();

		properties.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
		properties.put("java.naming.provider.url", server.getJndiName());
		properties.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");

		return properties;
	}
}

public enum Server {

	SELENIUM("http://URL_SERVER", "jnp://IP:1099");
	
	private String url;
	private String jndiName;
	
	private Server(String url, String jndiName) {
		this.url = url;
		this.jndiName = jndiName;
	}
	
	
	public String getUrl(){
		return this.url;
	}
	
	public String getJndiName(){
		return this.jndiName;
	}
}

O seu Bean remoto deve ser anotado da seguinte maneira:
@Stateless(mappedName = “ServiceBean-remote”)

O restante são as dependencias. Importante lembrar que esse exemplo é para Jboss 6x!
Abraço a todos.