Hi, All
I have used the jetty server 7.1.3 as the app server for a while. First the JAAS (Java Authentication and Authorization service) is used and it worked with no error.
Secondly, we tried to use the Session Clustering with Database, a feature offered by the jetty server also. It's for the case in which there are multiple server instances running in a load balancing environment. The DB is used as a persistent storage for the session's attributes so the attributes can be shared by the server instances.
However, when the JAAS and Session Clustering with DB are in effect at the same time, a NonSerializableException was thrown as follows,
2010-10-06 15:51:08.549:WARN::Problem
persisting changed session data id=fredsft3xjud8yc59jaiszql57lo
java.io.NotSerializableException:
org.eclipse.jetty.server.session.JDBCSessionManager
at java.io.ObjectOutputStream.writeObject0(Unknown
Source)
at
java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at
java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at
java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at
java.io.ObjectOutputStream.writeObject0(Unknown Source)
at
java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at
java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at
java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at
java.io.ObjectOutputStream.writeObject0(Unknown Source)
at
java.io.ObjectOutputStream.writeObject(Unknown Source)
at
java.util.concurrent.ConcurrentHashMap.writeObject(Unknown Source)
at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at
java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown
Source)
at
java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at
java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at
java.io.ObjectOutputStream.writeObject0(Unknown Source)
at
java.io.ObjectOutputStream.writeObject(Unknown Source)
at
org.eclipse.jetty.server.session.JDBCSessionManager.updateSession(JDBCSessionManager.java:949)
at
org.eclipse.jetty.server.session.JDBCSessionManager$Session.complete(JDBCSessionManager.java:341)
at
org.eclipse.jetty.server.session.AbstractSessionManager.complete(AbstractSessionManager.java:144)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:199)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:860)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at
org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:47)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
at
org.eclipse.jetty.server.Server.handle(Server.java:335)
at
org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:588)
at
org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1029)
at
org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:549)
at
org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:211)
at
org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:418)
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:489)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
at java.lang.Thread.run(Unknown
Source)
Debugging into the code, it was found that the problem was caused in the following steps:
1). In the process of the JAAS, the code sets a class: SessionAuthentication as a session attribute. SessionAuthentication is implemented as a serializable object but its member, DefaultUserIdentity is not. So the SessionAuthentication is not a serializable object at all;
2). In Session Clustering with DB process, the JDBCSessionManager tried to save all the sessions' attributes-all of them must be serializable-to the database. However, one of the attribute, SessionAuthentication, is not a serialiable object, so the above exception is thrown and the process is interrupted.
Kindly hope you can help me for this.
Thanks,
M. J.