Jakarta ee WELD-001408:CDSessionBean类型与限定符@Default的未满足依赖关系

Jakarta ee WELD-001408:CDSessionBean类型与限定符@Default的未满足依赖关系,jakarta-ee,ejb,cdi,Jakarta Ee,Ejb,Cdi,我是JavaEE7的新手,为了学习,我做了一个管理CD数据库的应用程序。 我的简单应用程序一直工作到插入EJB模块,它表示一个javabean单例,它的工作是用一些记录填充我的数据库。让我们转到代码: 这是my beans.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/200

我是JavaEE7的新手,为了学习,我做了一个管理CD数据库的应用程序。 我的简单应用程序一直工作到插入EJB模块,它表示一个javabean单例,它的工作是用一些记录填充我的数据库。让我们转到代码: 这是my beans.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
   bean-discovery-mode="all">
</beans>
这很容易理解…但是我的这个JavaBean项目不起作用!问题是不满意的依赖项注入。。。我寻找了一些解决办法,并且尝试了其中的一些。我尝试在注入点使用远程接口,但没有成功。我试图将bean discovery mode=“annotated”更改为“all”,但仍然无法工作。我尝试使用限定符(@Default和CDSessionBean上的自定义限定符)。。。但又不起作用了。可能CDI未启用??如果是,我如何启用它? 非常感谢:D

编辑: 这是在注入点使用接口的DatabasePopulator的代码:

package ejbs;

import entities.CD;
import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.ejb.Singleton;
import javax.inject.Inject;

/**
 *
 * @author gfucc
 */
@Stateless
@Singleton
public class DatabasePopulator {

    @Inject
    private CDSessionBeanRemote cdEJB;

    @PostConstruct
    private void populateDB()
    {
        cdEJB.createCD(new CD("DefaultCD1", "DefaultAuthor", 1));
        cdEJB.createCD(new CD("DefaultCD2", "DefaultAuthor2", 2));
    }
}
如果在注入点使用远程接口,这是完整的堆栈跟踪:

package ejbs;

import entities.CD;
import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.ejb.Singleton;
import javax.inject.Inject;

/**
 *
 * @author gfucc
 */
@Stateless
@Singleton
public class DatabasePopulator {

    @Inject
    private CDSessionBeanRemote cdEJB;

    @PostConstruct
    private void populateDB()
    {
        cdEJB.createCD(new CD("DefaultCD1", "DefaultAuthor", 1));
        cdEJB.createCD(new CD("DefaultCD2", "DefaultAuthor2", 2));
    }
}
Informazioni:访问未访问的参考资料Informazioni:访问 未访问引用:中定义的注释符号 超类与会话ejb DatabasePopulator不兼容。 符号:类型位置:类ejbs.DatabasePopulator

Grave:的批注处理失败 文件:/C:/Users/gfucc/workspacetebeans/CDArchiveEJB/build/classes/ Informazioni:EclipseLink,版本:EclipsePersistenceServices- 2.6.1.v20150605-31e8258 Informazioni:/file:/C:/Users/gfucc/workspacetebeans/CDArchiveEJB/build/classes/\u CDArchiveEJBPU 登录成功Informazioni:EJB的可移植JNDI名称 CDSessionBean: [java:global/CDArchiveEJB/CDSessionBean!ejbs.CDSessionBeanRemote, java:global/CDArchiveEJB/CDSessionBean]Informazioni:
EJB CDSessionBean的Glassfish特定(不可移植)JNDI名称: [ejbs.CDSessionBeanRemote#ejbs.CDSessionBeanRemote, CDSessionBeanRemote]Informazioni:EJB的可移植JNDI名称 数据库填充器: [java:global/CDArchiveEJB/DatabasePopulator!ejbs.DatabasePopulator, java:global/CDArchiveEJB/DatabasePopulator]警告:WELD-000411: 观察者方法[BackedAnnotatedMethod]公共 org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@ ProcessAnnotatedType)接收所有注释类型的事件。 考虑使用@带注释或泛型类型限制事件 有限度地。警告:WELD-000411:观察者方法 [BackedNotatedMethod]私有 org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider.processAnnotatedType(@ ProcessAnnotatedType)接收所有注释类型的事件。 考虑使用@带注释或泛型类型限制事件 有限度地。警告:WELD-000411:观察者方法 [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@ ProcessAnnotatedType,BeanManager)接收所有 注释类型。考虑使用@注释或限制事件 具有边界的泛型类型。严重:生命周期中的异常 正在处理org.glassfish.deployment.common.DeploymentException:CDI 部署失败:WELD-001408:类型的不满足依赖关系 CDSessionBeanRemote在注入点使用限定符@Default [BackedAnnotatedField]@注入私有EJB.DatabasePopulator.cdEJB
在ejbs.DatabasePopulator.cdEJB(DatabasePopulator.java:0)中 org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:234)位于 org.glassfish.kernel.event.eventsiml.send(eventsiml.java:131)位于 org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:328) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:496) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219) 在 org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535) 位于java.security.AccessController.doPrivileged(本机方法) javax.security.auth.Subject.doAs(Subject.java:360)位于 com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557) 位于java.security.AccessController.doPrivileged(本机方法) javax.security.auth.Subject.doAs(Subject.java:360)位于 com.sun.enterprise.v3.admin.CommandRunnerImpl.docomand(CommandRunnerImpl.java:556) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.docomand(CommandRunnerImpl.java:1464) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722) 在 com.sun.enterprise.v3.admin.adminapter.docomand(adminapter.java:534) 在 com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(adminapter.java:224) 在 org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189) 在 com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 在 glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206) 在 glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180) 在 glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 在 org.glassfish.grizzly.filterchain.E
package ejbs;

import entities.CD;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.inject.Inject;


/**
 *
 * @author gfucc
 */
@Singleton
@Startup
public class DatabasePopulator 
{
    @Inject
    private CDSessionBean cdEJB;

    @PostConstruct
    private void populateDB()
    {
        cdEJB.createCD(new CD("DefaultCD1", "DefaultAuthor", 1));
        cdEJB.createCD(new CD("DefaultCD2", "DefaultAuthor2", 2));
    }
}
package ejbs;

import entities.CD;
import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.ejb.Singleton;
import javax.inject.Inject;

/**
 *
 * @author gfucc
 */
@Stateless
@Singleton
public class DatabasePopulator {

    @Inject
    private CDSessionBeanRemote cdEJB;

    @PostConstruct
    private void populateDB()
    {
        cdEJB.createCD(new CD("DefaultCD1", "DefaultAuthor", 1));
        cdEJB.createCD(new CD("DefaultCD2", "DefaultAuthor2", 2));
    }
}