EJB3 and jndi error.
xubin May 10, 2007 3:11 AMI have a project on JBoss AS 4.0.5.GA with EJB3, the jdk is sun jdk6. And there is a stateless session bean(slsb) in my project. Another servelt in tomcat access the slsb with jndi. The error is that I can not find the slbs by jndi.
Below is the code:
slsb:
package com.sacl.ibs.ejb3;
import java.io.Serializable;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.jboss.annotation.ejb.RemoteBinding;
import org.jboss.annotation.ejb.RemoteBindings;
@Stateless
@RemoteBindings(@RemoteBinding(jndiBinding="com.sacl.ibs.ejb3.IBSManager"))
public class IBSManagerBean implements IBSManager, Serializable {
private static final long serialVersionUID = -2836261119947098786L;
@PersistenceContext(unitName="ibs")
EntityManager em;
}servlet:
package com.sacl.ibs.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sacl.ibs.ejb3.IBSManager;
public class JNDIServlet extends HttpServlet{
private static final long serialVersionUID = 3636864192783338015L;
private static Context ctx;
private static IBSManager manager;
public void init(ServletConfig config) throws ServletException {
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
PrintWriter out = resp.getWriter();
if(ctx == null){
Properties env = new Properties();
env.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interface");
env.setProperty(Context.PROVIDER_URL, "jnp://localhost:1099");
out.println("env ok!");
try {
ctx = new InitialContext(env);
if(manager == null){
//manager = (IBSManager)ctx.lookup(IBSManager.class.getName());
manager = (IBSManager)ctx.lookup("java:"+IBSManager.class.getName());
out.println("manager ok!");
//ctx.lookup("java:comp/env/ejb/com/atsva/cmmts/ejb/DesignObjectManager");
}
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.println(e);
}
}
out.println(manager.hello("Kitty"));
} catch (Exception e) {
// TODO: handle exception
}
}
}When I run the servlet, it show "javax.naming.NameNotFoundException: com.sacl.ibs.ejb3.IBSManager not bound".
And in jboss as console, when jboss as start, it show:
13:49:51,609 INFO [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured
13:49:51,609 INFO [NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
13:49:51,843 INFO [EJBContainer] STARTED EJB: com.sacl.ibs.ejb3.IBSManagerBean ejbName: IBSManagerBean
13:49:51,906 INFO [EJB3Deployer] Deployed: file:/C:/jboss-4.0.5.GA/server/default/tmp/deploy/tmp33327IBS.ear-contents/IBS.par
13:49:51,953 INFO [EARDeployer] Started J2EE application: file:/C:/jboss-4.0.5.GA/server/default/deploy/IBS.ear
It don't say the session bean was been bound.
I'll appreciate any help with this.
Thanks