我試圖從升級CDI 1.0 CDI到1.2,但我現在面臨以下問題:WELD-001413:將綠豆...具有非鈍化能力的依賴生產者方法(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後出現問題。可能是一個錯誤? –