java - Weld 忽略生产者

标签 java jboss cdi weld

我正在尝试将 war 部署到 JBoss AS 7.1.1 服务器中,但在尝试注入(inject) EntityManager 时部署失败:

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)

通常我认为这是由于 Weld 无法找到合适的要注入(inject)的 bean 造成的。但是,我为 EntityManager 定义了一个生产者:

@ApplicationScoped
public class Resources {
    @PersistenceContext(unitName="myUnit", type=PersistenceContextType.EXTENDED)
    private EntityManager entityManager;

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

它提示的注入(inject)点如下所示:

@RequestScoped
@Named("upload")
public class UploadImpl implements Upload, Serializable {
    private static final long serialVersionUID = 1L;

    @Inject
    EntityManager em;
}

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

最佳答案

上面评论中回答的问题:@Produces 注释是从错误的包导入的。谢谢你,安东尼·萨博特·杜兰德!

关于java - Weld 忽略生产者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17838997/

相关文章:

java - 为什么 Event.fireAsync() 需要 @ObservesAsync 注释?

java - 如何使用 JSch ChannelExec 捕获远程输入

java - JBoss AS 5 中部署的 Java EE 的推荐分析方法

json - 字符集编码 Tomcat Windows/JBoss Linux

java - 在 Debug模式下部署 .war 失败并出现错误

wildfly - FacesContext 无法在带有 JSF 2.3 的 Wildfly 14 中注入(inject)(Mojarra,主模块)

java - 不同项目中的Bean接口(interface)和Bean实现

java - 静态类的替代品

java - Java 有专门的语言类吗?

java - 如何使用 spark-connector-api 在 where 子句中设置 blob 列?