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
- 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