我有一个Java EE 7项目,我已经能够成功部署到桌面上的嵌入式Glassfish 4实例。但是,当我将同一项目部署到远程Glassfish 4实例时,该应用程序的行为不正常。
问题似乎与app中两个主要bean实例的范围有关,两者都声明如下:
@Named
@ViewScoped
public class OfferListBean
..和
@Named
@ViewScoped
public class EditBean
当我部署到远程服务器时,它会抛出以下异常:
Exception while loading the app : CDI deployment failure:WELD-000072 Bean declaring a passivating scope must be passivation capable. Bean: Managed Bean [class beans.EditBean] with qualifiers [@Default @Any @Named] org.jboss.weld.exceptions.DeploymentException: WELD-000072 Bean declaring a passivating scope must be passivation capable. Bean: Managed Bean [class beans.EditBean] with qualifiers [@Default @Any @Named] at org.jboss.weld.bean.ManagedBean.checkType(ManagedBean.java:210)
我在网上发现,这意味着bean需要实现Serializable,因此我实现了serializable,并且应用程序无一例外地部署。但是,当JSF页面尝试访问任一bean时,会抛出以下异常:
javax.el.PropertyNotFoundException: /offerreport/offerlist.xhtml @21,38 value="#{offerListBean.selectedManufacturer}": Target Unreachable, identifier 'offerListBean' resolved to null
我桌面上的操作系统是Windows 7,服务器是Windows 2003.本地JDK是1.8,服务器运行在1.7(我在Netbeans中将应用程序编译为1.7)。
非常感谢任何想法
答案 0 :(得分:0)
固定!解决方案是有另一个无状态的bean被注入EditBean和OfferListBean,它也需要被序列化。
至于为什么本地服务器和遥控器的要求之间存在差异的原因,我怀疑问题的根源在于两个环境不同。该服务器是运行Windows Server 2003的旧服务器,该公司让我试验。它只能运行Java 7.我的桌面运行Java 8.