【发布时间】:2017-03-09 14:26:41
【问题描述】:
我正在尝试从 CDI 1.0 升级到 CDI 1.2,但遇到以下问题:
org.jboss.weld.exceptions.UnserializableDependencyException: WELD-001413: The bean Managed Bean [class ViewProcessContext] with qualifiers [@Default @Named @Any] declares a passivating scope but has a non-passivation-capable dependency Producer Method [ConfigurationReader] with qualifiers [@Default @Any] declared as [[BackedAnnotatedMethod] @Produces @Default @Singleton public ConfigurationReaderProducer.process()]
at org.jboss.weld.bootstrap.Validator.validateInjectionPointPassivationCapable(Validator.java:442)
at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:380)
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:277)
at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:130)
at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:151)
at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:494)
at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:64)
at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:62)
at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:62)
at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:55)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
在 CDI 1.0 上运行良好的代码如下:
错误发生的地方:
@Named
@ConversationScoped
public class ViewProcessContext implements Externalizable {
//...
@Inject
private ConfigurationReader compReader;
//...
}
注入的依赖:
public interface ConfigurationReader extends Serializable {
}
制片人:
@ApplicationScoped
public class ConfigurationReaderProducer implements Externalizable {
//...
@Produces
@Default
@Singleton
public ConfigurationReader process() {
}
}
根据CDI spec:
生产者方法具有钝化能力当且仅当它永远不会 返回一个在运行时不支持钝化的值。
所以我的生产者总是返回一个能够钝化的实例。
我不明白为什么 Weld 抱怨它。
在这种情况下,生产者或依赖项有什么无效之处?
【问题讨论】:
-
您是否检查过您是否使用了正确的 Singleton-Annotation?
-
我刚刚检查了@markus_,它是正确的(
javax.inject.Singleton) -
奇怪的是它曾经在 CDI 1.0 上工作。在我更新到 CDI 1.2 和 Weld 2.3.0 后,问题出现了。可能是错误?
标签: java serialization cdi java-ee-7 weld