MyFaces CODI和Wildfly还不能一起使用



我目前正在尝试从JBOSS Weld AS7切换到Wildfly 8 Beta。我编译了它,但当试图加载页面时,我得到了以下异常:

Caused by: java.lang.IllegalStateException: class org.jboss.weld.context.SerializableContextualFactory$PassivationCapableSerializableContextual is no valid conversation scoped bean
    at org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.ConversationContextAdapter.get(ConversationContextAdapter.java:100) [myfaces-extcdi-bundle-jsf20-1.0.5.jar:1.0.5]
    at org.jboss.weld.context.PassivatingContextWrapper$AbstractPassivatingContextWrapper.get(PassivatingContextWrapper.java:70) [weld-core-impl-2.1.0.CR1.jar:2013-09-26 16:53]
    at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:81) [weld-core-impl-2.1.0.CR1.jar:2013-09-26 16:53]
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78) [weld-core-impl-2.1.0.CR1.jar:2013-09-26 16:53]
    at myprojectspace.project.OpenScenarioBean$Proxy$_$$_WeldClientProxy.getProjectList(Unknown Source) [classes:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_09]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_09]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_09]
    at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_09]
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:363) [javax.el-3.0-b07.jar:3.0-b07]

导致这种情况的类,即OpenScenarioBean是主页面的后备bean,声明如下:

@Named
@ViewAccessScoped
public class OpenScenarioBean implements Serializable {
    // ...
}

如果我删除ViewAccessScoped并将其替换为例如javax.enterprise.context.ConversationScoped,则网页将毫无例外地显示。

有人知道怎么解决这个问题吗?

我的猜测是:CODI还没有与Wildfly进行任何集成,因为在部署过程中,我也收到了一些警告,比如

12:26:36,103 WARN  [org.jboss.weld.Bean] (MSC service thread 1-7) WELD-001529: An   
InjectionTarget is created for a class   
org.apache.myfaces.extensions.cdi.jsf2.impl.listener.request.CodiFacesContextFactory which 
does not have any appropriate constructor.

但如果是这样的话,我想要ViewAccessScoped这样的东西,我想我应该换成DeltaSpike,希望他们在与Wildfly的集成中更快?(但该项目还处于早期阶段)。

我不太确定是否支持CODI,但现在应该有MyFaces支持。它是Multi-JSF支持的一部分。如果您使用MyFaces支持提供的安装脚本进行安装,并在其中添加CODI作为模块,那么它可能会工作。不过我只是猜测,因为我对CODI了解不多。

我确实找到了一个关于CODI支持问题的JIRA,但看起来它是JBoss AS7遗留下来的。

您的设置似乎存在Classloading问题。

最新更新