CDI:异常,因为处理方法没有看到生产方法

时间:2014-08-14 18:32:16

标签: java-ee tomcat7 cdi weld

我正在按照一些教程来习惯CDI,就像我遇到困难一样。实际上我有一个Factory类负责创建要由CDI使用的EntityManager的实例,并且还有一个处理方法,用于在请求结束时关闭管理器启动的连接。问题是我的处理方法显然无法看到我的generate方法,并且在Tomcat 7提供的此错误消息中是明确的。

SEVERE:将上下文初始化事件发送到类org.jboss.weld.environment.servlet.Listener的侦听器实例的异常 org.jboss.weld.exceptions.DefinitionException:WELD-001424声明了以下处理方法,但未解析为生成器方法:[Disposer method [[method] public br.com.logtec.producer.DataRepositoryProducer.finalize(EntityManager) ]]     在org.jboss.weld.bootstrap.Validator.validateDisposalMethods(Validator.java:541)     在org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:371)     在org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:380)     在org.jboss.weld.environment.servlet.Listener.contextInitialized(Listener.java:182)     在org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4992)     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5490)     在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     在org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1575)     在org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1565)     at java.util.concurrent.FutureTask $ Sync.innerRun(Unknown Source)     at java.util.concurrent.FutureTask.run(Unknown Source)     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)     at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)     在java.lang.Thread.run(未知来源)

这是我的班级:

@Singleton 公共类DataRepositoryProducer {

private static EntityManagerFactory factory;

@Produces
public EntityManagerFactory getEntityManagerFactory() {
    if (factory == null) {
        factory = Persistence.createEntityManagerFactory("pu");
    }
    return factory;
}

@Produces
@DataRepository
@RequestScoped
public EntityManager produceEntityManager() {
    return getEntityManagerFactory().createEntityManager();
}

public void finalize(@Disposes EntityManager manager) {
    manager.close();
}

}

任何线索?

1 个答案:

答案 0 :(得分:0)

根据@Robert Panzer的建议,我能够解决在处理方法中@Disposes注释之后添加@DataRepository的问题。