Java @EJB注释使servlet崩溃
我的服务器中有这样的@EJB注释Java @EJB注释使servlet崩溃,java,servlets,ejb,Java,Servlets,Ejb,我的服务器中有这样的@EJB注释 import javax.ejb.EJB; import stateless.Staff; public class DisplayStaff extends HttpServlet { private static final long serialVersionUID = 1L; @EJB private StaffBean Staff_bean; .... } 如果没有该注释及其声明,servl
import javax.ejb.EJB;
import stateless.Staff;
public class DisplayStaff extends HttpServlet
{
private static final long serialVersionUID = 1L;
@EJB
private StaffBean Staff_bean;
....
}
如果没有该注释及其声明,servlet将工作并被调用。通过注释,我得到了错误
root cause
com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class controllers.DisplayStaff
root cause
com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=controllers.DisplayStaff/Stud_bean,Remote 3.x interface =stateless.StaffBean,ejb-link=null,lookup=,mappedName=,jndi-name=stateless.StaffBean,refType=Session into class controllers.DisplayStaff: Lookup failed for 'java:comp/env/controllers.DisplayStaff/Stud_bean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
root cause
javax.naming.NamingException: Lookup failed for 'java:comp/env/controllers.DisplayStaff/Stud_bean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=controllers.DisplayStaff/Stud_bean,Remote 3.x interface =stateless.StaffBean,ejb-link=null,lookup=,mappedName=,jndi-name=stateless.StaffBean,refType=Session' . Actual (possibly internal) Remote JNDI name used for lookup is 'stateless.StaffBean#stateless.StaffBean' [Root exception is javax.naming.NamingException: Lookup failed for 'stateless.StaffBean#stateless.StaffBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: stateless.StaffBean#stateless.StaffBean not found]]]
root cause
javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=controllers.DisplayStaff/Stud_bean,Remote 3.x interface =stateless.StaffBean,ejb-link=null,lookup=,mappedName=,jndi-name=stateless.StaffBean,refType=Session' . Actual (possibly internal) Remote JNDI name used for lookup is 'stateless.StaffBean#stateless.StaffBean' [Root exception is javax.naming.NamingException: Lookup failed for 'stateless.StaffBean#stateless.StaffBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: stateless.StaffBean#stateless.StaffBean not found]]
root cause
javax.naming.NamingException: Lookup failed for 'stateless.StaffBean#stateless.StaffBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: stateless.StaffBean#stateless.StaffBean not found]
root cause
javax.naming.NameNotFoundException: stateless.StaffBean#stateless.StaffBean not found
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.1.2 logs.
容器在中找不到您的bean 通常应该向bean的远程或本地接口注入引用,而不是bean本身:
@EJB
private StaffBeanRemote Staff_bean;
但是可以肯定的是,使用JNDI浏览器(通常在应用服务器的管理控制台上)来查看JNDI的确切名称。还要确保bean本身已部署并运行正常(也可以在管理控制台上进行检查)将引用的bean声明为静态
@EJB
private static StaffBean Staff_bean;
希望这能奏效。
多谢各位