Problema na execução de Bean Stateless no JBOSS 4.0.4

Olá,

Estou tentando executar uma aplicação EJB3 desenvolvida com JBOSS IDE 2.0 e JBOSS 4.0.4 GA. Eu tenho um bean remoto stateless chamado TestStatelessBean que herda de TestStateless. Abaixo estálistado o código deles:

package com.test.ejbs;

import javax.ejb.Remote;

@Remote
public interface TestStateless {
public String testBean();
}


package com.test.ejbs;

import javax.ejb.*;
import com.test.ejbs.TestStateless;

public @Stateless class TestStatelessBean implements TestStateless {

public String testBean() {
	return "the server returned this string";
}

}

Eu tenho um sevlet que chama o EJB:

package com.test.web;

import javax.servlet.;
import javax.servlet.http.
;
import javax.naming.;
import java.io.
;

import com.test.ejbs.*;

public class TestStatelessEJBServlet extends HttpServlet {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private TestStatelessBean statelessBean;

public void init() {
	try {
		Context context = new InitialContext();
		System.out.println("Before lookup");

// statelessBean = (TestStatelessBean) context.lookup(“TestStatelessBean/remote”);
statelessBean = (TestStatelessBean) context.lookup(TestStatelessBean.class.getName());
System.out.println(“After lookup”);

	} catch (NamingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
	PrintWriter writer = resp.getWriter();
	writer.write("The stateless bean returned this string: " + 
			     statelessBean.testBean());
}

public void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
	this.doGet(req, resp);
}

}


Se eu tento obter o bean com o código ?statelessBean = (TestStatelessBean) context.lookup(“TestStatelessBean/remote”);? Eu recebo uma class cast exception.

Se eu tento obter o bean com o código ?statelessBean = (TestStatelessBean) context.lookup(TestStatelessBean.class.getName());? Eu recebo uma Bean not bound exception.

I fiz o deployment do bean com a JBOSS IDE nos arquivos TestInstallation.ejb3 and TetsInstallation.war. O nome do meu projeto é ejb3teste, mas não acho que seja relevante. Esses dois arquivos estão em $JBOSS_HOME\server\default\deploy. O conteúdo de jndi.properties é:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099

O arquivo web.xml file contém:

<?xml version="1.0" encoding="UTF-8"?>



TestStatelessEJBServlet
com.test.web.TestStatelessEJBServlet


TestStatelessEJBServlet
/testStatelessEJB

O conteúdo do arquivo packaging-build.xml é:

<?xml version="1.0" encoding="UTF-8"?>

No jmx-console eu tenho:

jboss.j2ee

* jar=TestInstallation.ejb3,name=TestStatelessBean,service=EJB3
* module=TestInstallation.ejb3,service=EJB3
* service=ClientDeployer
* service=EARDeployer

jboss.web

  • J2EEApplication=none,J2EEServer=none,WebModule=//localhost/TestInstallation,j2eeType=Servlet,name=TestStatelessEJBServlet

The JNDI Namespace

Global JNDI Namespace

± XAConnectionFactory (class: org.jboss.mq.SpyXAConnectionFactory)
± TestStatelessBean (class: org.jnp.interfaces.NamingContext)
| ± remote (proxy: $Proxy58 implements interface com.test.ejbs.TestStateless,interface org.jboss.ejb3.JBossProxy,interface javax.ejb.EJBObject)


Estou chamando a servlet com a URL ?http://mymachine:8080/TestInstallation/testStatelessEJB?. Eu tenho que usar essa URL porque a URL ?http://localhost:8080/TestInstallation/testStatelessEJB? não funciona. É possível que o problema seja esse? O fato de eu não conseguir utilizar o localhost?

Muito obrigado.

Nei

Pessoal,

Postei a dúvida em outro fórum e fui informado de que devo fazer o cast com a interface e não com a classe, dessa forma:

private TestStateless testRemoteInterface;
testRemoteInterface = (TestStateless) context.lookup(“TestStatelessBean/remote”);

Feito isso, funcionou perfeitamente.

Nei