关闭 glassfish 时出现 NotSerializedException

发布于 2024-12-23 03:41:46 字数 4295 浏览 2 评论 0原文

由于 HtmlSelectOneMenu,关闭 Glassfish (3.1) 时出现 NotSerializedException。我在其他控制器 bean 中使用 HtmlSelectOneMenu,但它们不像这个那样绑定到支持 bean。当然,仅当服务器上存在活动会话时才会发生这种情况。

为有界 JSF 组件启动/停止 Glassfish 时如何避免异常?

控制器类

@ManagedBean
@SessionScoped
...

public class ActivityController implements Serializable {
    ..
    private DataModel<MyObjcet> items = null;
    private HtmlSelectOneMenu myMenu;
    ...

异常

INFO: PWC2785: Cannot serialize session attribute activityController for session a4591e053e65effc743dade67eef
java.io.NotSerializableException: javax.faces.component.html.HtmlSelectOneMenu
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
    at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:2067)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
    at org.apache.catalina.session.StandardManager.writeSessions(StandardManager.java:699)
    at org.apache.catalina.session.StandardManager.doUnloadToFile(StandardManager.java:618)
    at org.apache.catalina.session.StandardManager.unload(StandardManager.java:589)
    at org.apache.catalina.session.StandardManager.stop(StandardManager.java:879)
    at org.apache.catalina.core.StandardContext.stop(StandardContext.java:5509)
    at com.sun.enterprise.web.WebModule.stop(WebModule.java:529)
    at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:1049)
    at com.sun.enterprise.web.WebContainer.unloadWebModule(WebContainer.java:2191)
    at com.sun.enterprise.web.WebContainer.unloadWebModule(WebContainer.java:2146)
    at com.sun.enterprise.web.WebApplication.stop(WebApplication.java:151)
    at org.glassfish.internal.data.EngineRef.stop(EngineRef.java:169)
    at org.glassfish.internal.data.ModuleInfo.stop(ModuleInfo.java:302)
    at org.glassfish.internal.data.ApplicationInfo.stop(ApplicationInfo.java:314)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.unload(ApplicationLifecycle.java:997)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.disable(ApplicationLifecycle.java:1952)
    at com.sun.enterprise.v3.server.ApplicationLoaderService.stopApplication(ApplicationLoaderService.java:443)
    at com.sun.enterprise.v3.server.ApplicationLoaderService.preDestroy(ApplicationLoaderService.java:411)
    at com.sun.hk2.component.AbstractCreatorInhabitantImpl.dispose(AbstractCreatorInhabitantImpl.java:83)
    at com.sun.hk2.component.SingletonInhabitant.release(SingletonInhabitant.java:81)
    at com.sun.hk2.component.EventPublishingInhabitant.release(EventPublishingInhabitant.java:108)
    at com.sun.hk2.component.LazyInhabitant.release(LazyInhabitant.java:133)
    at com.sun.enterprise.v3.server.AppServerStartup.stop(AppServerStartup.java:415)
    at com.sun.enterprise.glassfish.bootstrap.GlassFishImpl.stop(GlassFishImpl.java:88)
    at com.sun.enterprise.v3.admin.StopServer.doExecute(StopServer.java:70)
    at com.sun.enterprise.v3.admin.StopDomainCommand.execute(StopDomainCommand.java:95)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.run(CommandRunnerImpl.java:383)

I get an NotSerializableException when shutting down Glassfish (3.1), due to an HtmlSelectOneMenu. I use HtmlSelectOneMenu in other controller beans, but they are not bound to the backing bean as this one. This happens only if there are sessions active on the server of course.

How can I avoid exception when starting/stopping Glassfish for the bounded JSF component ?

Controller Class

@ManagedBean
@SessionScoped
...

public class ActivityController implements Serializable {
    ..
    private DataModel<MyObjcet> items = null;
    private HtmlSelectOneMenu myMenu;
    ...

Exception

INFO: PWC2785: Cannot serialize session attribute activityController for session a4591e053e65effc743dade67eef
java.io.NotSerializableException: javax.faces.component.html.HtmlSelectOneMenu
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
    at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:2067)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
    at org.apache.catalina.session.StandardManager.writeSessions(StandardManager.java:699)
    at org.apache.catalina.session.StandardManager.doUnloadToFile(StandardManager.java:618)
    at org.apache.catalina.session.StandardManager.unload(StandardManager.java:589)
    at org.apache.catalina.session.StandardManager.stop(StandardManager.java:879)
    at org.apache.catalina.core.StandardContext.stop(StandardContext.java:5509)
    at com.sun.enterprise.web.WebModule.stop(WebModule.java:529)
    at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:1049)
    at com.sun.enterprise.web.WebContainer.unloadWebModule(WebContainer.java:2191)
    at com.sun.enterprise.web.WebContainer.unloadWebModule(WebContainer.java:2146)
    at com.sun.enterprise.web.WebApplication.stop(WebApplication.java:151)
    at org.glassfish.internal.data.EngineRef.stop(EngineRef.java:169)
    at org.glassfish.internal.data.ModuleInfo.stop(ModuleInfo.java:302)
    at org.glassfish.internal.data.ApplicationInfo.stop(ApplicationInfo.java:314)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.unload(ApplicationLifecycle.java:997)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.disable(ApplicationLifecycle.java:1952)
    at com.sun.enterprise.v3.server.ApplicationLoaderService.stopApplication(ApplicationLoaderService.java:443)
    at com.sun.enterprise.v3.server.ApplicationLoaderService.preDestroy(ApplicationLoaderService.java:411)
    at com.sun.hk2.component.AbstractCreatorInhabitantImpl.dispose(AbstractCreatorInhabitantImpl.java:83)
    at com.sun.hk2.component.SingletonInhabitant.release(SingletonInhabitant.java:81)
    at com.sun.hk2.component.EventPublishingInhabitant.release(EventPublishingInhabitant.java:108)
    at com.sun.hk2.component.LazyInhabitant.release(LazyInhabitant.java:133)
    at com.sun.enterprise.v3.server.AppServerStartup.stop(AppServerStartup.java:415)
    at com.sun.enterprise.glassfish.bootstrap.GlassFishImpl.stop(GlassFishImpl.java:88)
    at com.sun.enterprise.v3.admin.StopServer.doExecute(StopServer.java:70)
    at com.sun.enterprise.v3.admin.StopDomainCommand.execute(StopDomainCommand.java:95)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.run(CommandRunnerImpl.java:383)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

逆流 2024-12-30 03:41:46

使其暂时

private transient HtmlSelectOneMenu myMenu;

这样,该字段将在序列化(反序列化)时被跳过。顺便说一句,DataModel 也是不可序列化的。

另一方面,在大多数情况下,将成分直接粘合到支撑豆上会产生气味。您应该考虑寻找(或询问)一种不需要将组件绑定到 bean 的替代方法。

Make it transient.

private transient HtmlSelectOneMenu myMenu;

This way the field will be skipped on (de)serialization. By the way, the DataModel is also not serializable.

On the other hand, binding components directly to the backing bean is in most cases a smell. You should consider looking (or asking) for an alternative approach which does not require binding components to the bean.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文