首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >com.dao.implementation.EmployeeDAOImpl#com.dao.implementation.EmployeeDAOImpl javax.naming.NameNotFoundException:找不到

com.dao.implementation.EmployeeDAOImpl#com.dao.implementation.EmployeeDAOImpl javax.naming.NameNotFoundException:找不到
EN

Stack Overflow用户
提问于 2015-10-26 22:25:27
回答 1查看 944关注 0票数 0

我有一个EJB

代码语言:javascript
运行
复制
@Stateless
public class EmployeeDAOImpl implements EmployeeDAO{
}

我试图将其插入CDI托管bean中,如下所示:

代码语言:javascript
运行
复制
@Named("employeeController")
@RequestScoped
public class EmployeeController {

    @EJB
    private EmployeeDAOImpl emDAO;
}

但是,它引发以下异常:

代码语言:javascript
运行
复制
Caused by: com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=com.controllers.EmployeeController/emDAO,Remote 3.x interface =com.dao.implementation.EmployeeDAOImpl,ejb-link=null,lookup=,mappedName=,jndi-name=com.dao.implementation.EmployeeDAOImpl,refType=Session into class com.controllers.EmployeeController: Lookup failed for 'java:comp/env/com.controllers.EmployeeController/emDAO' 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}
    at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:740)
    at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:507)
    at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:170)
    at org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:165)
    ... 65 more
Caused by: javax.naming.NamingException: Lookup failed for 'java:comp/env/com.controllers.EmployeeController/emDAO' 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=com.controllers.EmployeeController/emDAO,Remote 3.x interface =com.dao.implementation.EmployeeDAOImpl,ejb-link=null,lookup=,mappedName=,jndi-name=com.dao.implementation.EmployeeDAOImpl,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'com.dao.implementation.EmployeeDAOImpl#com.dao.implementation.EmployeeDAOImpl' [Root exception is javax.naming.NamingException: Lookup failed for 'com.dao.implementation.EmployeeDAOImpl#com.dao.implementation.EmployeeDAOImpl' 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: com.dao.implementation.EmployeeDAOImpl#com.dao.implementation.EmployeeDAOImpl not found]]]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:636)
    ... 68 more
Caused by: javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=com.controllers.EmployeeController/emDAO,Remote 3.x interface =com.dao.implementation.EmployeeDAOImpl,ejb-link=null,lookup=,mappedName=,jndi-name=com.dao.implementation.EmployeeDAOImpl,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'com.dao.implementation.EmployeeDAOImpl#com.dao.implementation.EmployeeDAOImpl' [Root exception is javax.naming.NamingException: Lookup failed for 'com.dao.implementation.EmployeeDAOImpl#com.dao.implementation.EmployeeDAOImpl' 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: com.dao.implementation.EmployeeDAOImpl#com.dao.implementation.EmployeeDAOImpl not found]]
    at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:188)
    at com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1015)
    at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:745)
    at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:715)
    at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:159)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:471)
    ... 72 more
Caused by: javax.naming.NamingException: Lookup failed for 'com.dao.implementation.EmployeeDAOImpl#com.dao.implementation.EmployeeDAOImpl' 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: com.dao.implementation.EmployeeDAOImpl#com.dao.implementation.EmployeeDAOImpl not found]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:183)
    ... 77 more
Caused by: javax.naming.NameNotFoundException: com.dao.implementation.EmployeeDAOImpl#com.dao.implementation.EmployeeDAOImpl not found
    at com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:237)
    at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:204)
    at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:66)
    at com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:114)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:478)
    ... 81 more

这是如何造成的,我如何解决呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-26 23:16:57

而不是将EJB实现注入到@EJB中,而是注入它的接口EmployeeDAO

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33356710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档