Servlets Glassfish错误:NameNotFoundException,因此servlet无法注入EJB
EJB ConverterBean应该位于何处以及如何定位,以便ConverterServlet可以注入EJB?不: 当然,我正在阅读关于这个主题的JavaEE7教程 浏览器中的InjectionException:Servlets Glassfish错误:NameNotFoundException,因此servlet无法注入EJB,servlets,jakarta-ee,glassfish,ejb,web-inf,Servlets,Jakarta Ee,Glassfish,Ejb,Web Inf,EJB ConverterBean应该位于何处以及如何定位,以便ConverterServlet可以注入EJB?不: 当然,我正在阅读关于这个主题的JavaEE7教程 浏览器中的InjectionException: HTTP Status 500 - Internal Server Error type Exception report messageInternal Server Error descriptionThe server encountered an internal e
HTTP Status 500 - Internal Server Error
type Exception report
messageInternal Server Error
descriptionThe server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Error instantiating servlet class net.bounceme.dur.servlets.ConverterServlet
root cause
com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class net.bounceme.dur.servlets.ConverterServlet
root cause
java.lang.IllegalStateException: Exception attempting to inject Remote ejb-ref name=net.bounceme.dur.servlets.ConverterServlet/converter,Remote 3.x interface =net.bounceme.dur.ejb.ConverterBean,ejb-link=null,lookup=,mappedName=,jndi-name=net.bounceme.dur.ejb.ConverterBean,refType=Session into class net.bounceme.dur.servlets.ConverterServlet: Lookup failed for 'java:comp/env/net.bounceme.dur.servlets.ConverterServlet/converter' 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
com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=net.bounceme.dur.servlets.ConverterServlet/converter,Remote 3.x interface =net.bounceme.dur.ejb.ConverterBean,ejb-link=null,lookup=,mappedName=,jndi-name=net.bounceme.dur.ejb.ConverterBean,refType=Session into class net.bounceme.dur.servlets.ConverterServlet: Lookup failed for 'java:comp/env/net.bounceme.dur.servlets.ConverterServlet/converter' 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/net.bounceme.dur.servlets.ConverterServlet/converter' 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=net.bounceme.dur.servlets.ConverterServlet/converter,Remote 3.x interface =net.bounceme.dur.ejb.ConverterBean,ejb-link=null,lookup=,mappedName=,jndi-name=net.bounceme.dur.ejb.ConverterBean,refType=Session' . Actual (possibly internal) Remote JNDI name used for lookup is 'net.bounceme.dur.ejb.ConverterBean#net.bounceme.dur.ejb.ConverterBean' [Root exception is javax.naming.NamingException: Lookup failed for 'net.bounceme.dur.ejb.ConverterBean#net.bounceme.dur.ejb.ConverterBean' 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: net.bounceme.dur.ejb.ConverterBean#net.bounceme.dur.ejb.ConverterBean not found]]]
root cause
javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=net.bounceme.dur.servlets.ConverterServlet/converter,Remote 3.x interface =net.bounceme.dur.ejb.ConverterBean,ejb-link=null,lookup=,mappedName=,jndi-name=net.bounceme.dur.ejb.ConverterBean,refType=Session' . Actual (possibly internal) Remote JNDI name used for lookup is 'net.bounceme.dur.ejb.ConverterBean#net.bounceme.dur.ejb.ConverterBean' [Root exception is javax.naming.NamingException: Lookup failed for 'net.bounceme.dur.ejb.ConverterBean#net.bounceme.dur.ejb.ConverterBean' 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: net.bounceme.dur.ejb.ConverterBean#net.bounceme.dur.ejb.ConverterBean not found]]
root cause
javax.naming.NamingException: Lookup failed for 'net.bounceme.dur.ejb.ConverterBean#net.bounceme.dur.ejb.ConverterBean' 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: net.bounceme.dur.ejb.ConverterBean#net.bounceme.dur.ejb.ConverterBean not found]
root cause
javax.naming.NameNotFoundException: net.bounceme.dur.ejb.ConverterBean#net.bounceme.dur.ejb.ConverterBean not found
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1.1 logs.
GlassFish Server Open Source Edition 4.1.1
Glassfish日志tail-f的摘录,从部署到NameNotFoundException:
项目的树形结构:
.
├── build.xml
├── nbproject
│ ├── ant-deploy.xml
│ ├── build-impl.xml
│ ├── genfiles.properties
│ ├── private
│ │ └── private.properties
│ ├── project.properties
│ └── project.xml
├── src
│ ├── conf
│ │ └── MANIFEST.MF
│ └── java
│ └── net
│ └── bounceme
│ └── dur
│ ├── ejb
│ │ ├── ConverterBean.java
│ │ ├── ConverterBeanLocal.java
│ │ └── PropertiesReader.java
│ └── servlets
│ └── ConverterServlet.java
├── test
└── web
├── index.html
└── WEB-INF
└── web.xml
13 directories, 14 files
我还尝试将servlet和ConverterBean放在同一个包中。您似乎已经为ConverterBean定义了一个名为ConverterBeanLocal的本地接口 因此,您需要在注射点使用:
@WebServlet("/converter")
public class ConverterServlet extends HttpServlet {
@EJB
ConverterBeanLocal converter;
或者,您可以完全摆脱ConverterBeanLocal接口,使代码更简单
.
├── build.xml
├── nbproject
│ ├── ant-deploy.xml
│ ├── build-impl.xml
│ ├── genfiles.properties
│ ├── private
│ │ └── private.properties
│ ├── project.properties
│ └── project.xml
├── src
│ ├── conf
│ │ └── MANIFEST.MF
│ └── java
│ └── net
│ └── bounceme
│ └── dur
│ ├── ejb
│ │ ├── ConverterBean.java
│ │ ├── ConverterBeanLocal.java
│ │ └── PropertiesReader.java
│ └── servlets
│ └── ConverterServlet.java
├── test
└── web
├── index.html
└── WEB-INF
└── web.xml
13 directories, 14 files
@WebServlet("/converter")
public class ConverterServlet extends HttpServlet {
@EJB
ConverterBeanLocal converter;