首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >焊接忽略生产者

焊接忽略生产者
EN

Stack Overflow用户
提问于 2013-07-24 15:51:14
回答 2查看 1.6K关注 0票数 2

我试图将war作为7.1.1服务器部署到JBoss中,在注入EntityManager时部署失败:

代码语言:javascript
复制
17:44:48,037 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.deployment.unit."c3e.war".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."c3e.war".WeldService: org.jboss.weld.exceptions.DeploymentException: Exception List with 1 exception:
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [EntityManager] with qualifiers [@Default] at injection point [[field] @Inject xyz.beans.UploadImpl.em]
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:275)
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:244)
    at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:107)
    at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:127)
    at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:346)
    at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:331)
    at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:366)
    at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:83)
    at org.jboss.as.weld.services.WeldService.start(WeldService.java:76)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)

通常情况下,我预计这将导致焊接无法找到一个合适的豆子注入。但是,我为EntityManager定义了一个生产者,因此:

代码语言:javascript
复制
@ApplicationScoped
public class Resources {
    @PersistenceContext(unitName="myUnit", type=PersistenceContextType.EXTENDED)
    private EntityManager entityManager;

    @Produces
    public EntityManager getEntityManager() {
        return entityManager;
    }
}

它抱怨的注入点如下:

代码语言:javascript
复制
@RequestScoped
@Named("upload")
public class UploadImpl implements Upload, Serializable {
    private static final long serialVersionUID = 1L;

    @Inject
    EntityManager em;
}

在另一个项目中,完全相同的设置工作得很好。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-25 08:20:43

在上面的一个注释中回答了问题:@Produces注释是从错误的包导入的。谢谢你,安托万·萨博特-杜兰德!

票数 2
EN

Stack Overflow用户

发布于 2013-07-24 17:06:37

这只是一个很长的机会,但是有两种类型的注释:javax.faces.bean.ApplicationScopedjavax.enterprise.context.ApplicationScoped。我猜您的生产者是用JSF注释而不是CDI注释的。

正如CDI规范所述:

1.2.6.与JSF JavaServer Faces的关系是一个web层表示框架,它为图形用户界面com组件提供一个组件模型,并提供一个事件驱动的交互模型,该模型将用户界面组件绑定到通过统一EL访问的对象。该规范允许为任何bean分配统一的EL名称。因此,应用程序可以利用本规范定义的复杂上下文和依赖项注入模型。

这意味着您可以自由地将CDI注入JSF托管bean,但事实并非如此。容器里的东西

如果您想要使用CDI,就必须对您的注释进行修改,才能从javax.enterprise.context包中获得。

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

https://stackoverflow.com/questions/17838997

复制
相关文章

相似问题

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