Pregunta

I created a java class to handle sessions the was created in the class annotated @WebFilter

public class SessionLoader {

    public HttpSession session;

    public void pushSession(String tag, Object o) {
        if (session == null) {
            session = currentContext();
        }
        session.setAttribute(tag, o);
    }

    public Object pullSession(String tag) {
        if (session == null) {
            session = currentContext();
        }
        return session.getAttribute(tag);
    }

    public void removeSession(String tag) {
        if (session == null) {
            session = currentContext();
        }
        session.removeAttribute(tag);
    }

    public void clearSession() {
        if (session == null) {
            session = currentContext();
        }
        session.invalidate();
    }

    public HttpSession currentContext() {
        ExternalContext G = FacesContext.getCurrentInstance().getExternalContext();
        HttpSession sessions = (HttpSession) G.getSession(false);
        return sessions;
    }
}

In the managed bean I instantiate the SessionLoader class to use its methods.

public class AccessBean implements java.io.Serializable{


    private   SessionLoader loader = new SessionLoader();
    private String connectedUserName;
public void logoutUser() throws IOException {
        try {
            loader.clearSession();
        } catch (Exception e) {
            e.printStackTrace(System.out);
        }
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
        ec.redirect(ec.getRequestContextPath());
    }
}

during the deployment of the application in GlassFish the following error became

INFO: PWC2785: Cannot serialize session attribute accessBean for session eafd3249004855a2b1d6e8eb0f8c
java.io.NotSerializableException: ccf.sicav.sessions.SessionLoader
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
    at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:2067)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
    at org.apache.catalina.session.StandardManager.writeSessions(StandardManager.java:700)
    at com.sun.enterprise.web.WebModule.saveSessions(WebModule.java:1541)
    at com.sun.enterprise.web.WebContainer.unloadWebModule(WebContainer.java:2229)
    at com.sun.enterprise.web.WebContainer.unloadWebModule(WebContainer.java:2185)
    at com.sun.enterprise.web.WebApplication.stop(WebApplication.java:159)
    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:329)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.unload(ApplicationLifecycle.java:998)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.undeploy(ApplicationLifecycle.java:1024)
    at org.glassfish.deployment.admin.UndeployCommand.execute(UndeployCommand.java:330)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:348)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1259)
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:461)
    at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:212)
    at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179)
    at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:722)

how I solve this problem, I can change what class SessionLoader?

¿Fue útil?

Solución

You should not try to Serialize your SessionLoader class as it has HttpSession object, Just make your SessionLoader transient.

private transient  SessionLoader loader = new SessionLoader();

But you can still serialize the contents of your session attributes, for that you need to first iterate through your session attributes and serialize individually.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top