我正在按照一些教程来习惯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();
}
}
任何线索?
答案 0 :(得分:0)
根据@Robert Panzer的建议,我能够解决在处理方法中@Disposes注释之后添加@DataRepository的问题。