У меня есть среда, в которой 2 кластеризованных кота с балансировкой нагрузки указывают на одно и то же приложение.
Когда они работают в режиме липкой сессии, а не в общей сессии, они работают нормально. Сейчас я реализую отработки отказа для Tomcat. то есть, если один из них терпит неудачу, другой обрабатывает сеансы, которые были обработаны неудачным. И я пытаюсь репликации сеанса в памяти.
Когда я включаю эту функцию, я получаю некоторые исключения, такие как
org.apache.catalina.ha.session.DeltaManager
requestCompleted SEVERE: невозможно
сериализовать дельта-запрос для sessionid
[68930629D2318EFAC06F3D75FFA162D0.tomcat2]
java.io.NotSerializableException:
org.json.JSONObject
в java.io.ObjectOutputStream.writeObject0 (ObjectOutputStream.java:1156)
в java.io.ObjectOutputStream.defaultWriteFields (ObjectOutputStream.java:1509)
в java.io.ObjectOutputStream.writeSerialData (ObjectOutputStream.java:1474)
в java.io.ObjectOutputStream.writeOrdinaryObject (ObjectOutputStream.java:1392)
в java.io.ObjectOutputStream.writeObject0 (ObjectOutputStream.java:1150)
в java.io.ObjectOutputStream.writeObject (ObjectOutputStream.java:326)
в org.apache.catalina.ha.session.DeltaRequest $ AttributeInfo.writeExternal (DeltaRequest.java:374)
в org.apache.catalina.ha.session.DeltaRequest.writeExternal (DeltaRequest.java:272)
в org.apache.catalina.ha.session.DeltaRequest.serialize (DeltaRequest.java:287)
в org.apache.catalina.ha.session.DeltaManager.serializeDeltaRequest (DeltaManager.java:640)
в org.apache.catalina.ha.session.DeltaManager.requestCompleted (DeltaManager.java:1120)
в org.apache.catalina.ha.tcp.ReplicationValve.send (ReplicationValve.java:550)
в org.apache.catalina.ha.tcp.ReplicationValve.sendMessage (ReplicationValve.java:537)
в org.apache.catalina.ha.tcp.ReplicationValve.sendSessionReplicationMessage (ReplicationValve.java:519)
в org.apache.catalina.ha.tcp.ReplicationValve.sendReplicationMessage (ReplicationValve.java:430)
в org.apache.catalina.ha.tcp.ReplicationValve.invoke (ReplicationValve.java:363)
в org.apache.catalina.ha.session.JvmRouteBinderValve.invoke (JvmRouteBinderValve.java:210)
в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:293)
в org.apache.jk.server.JkCoyoteHandler.invoke (JkCoyoteHandler.java:190)
в org.apache.jk.common.HandlerRequest.invoke (HandlerRequest.java:291)
на org.apache.jk.common.ChannelSocket.invoke (ChannelSocket.java:769)
на org.apache.jk.common.ChannelSocket.processConnection (ChannelSocket.java:698)
в org.apache.jk.common.ChannelSocket $ SocketConnection.runIt (ChannelSocket.java:891)
в org.apache.tomcat.util.threads.ThreadPool $ ControlRunnable.run (ThreadPool.java:690)
на java.lang.Thread.run (Thread.java:619)
11 сентября 2009 19:21:06
org.apache.catalina.ha.session.DeltaManager
requestCompleted SEVERE: невозможно
сериализовать дельта-запрос для sessionid
[68930629D2318EFAC06F3D75FFA162D0.tomcat2]
java.io.NotSerializableException:
org.json.JSONObject
Поскольку JSON не сериализован, я помещаю его в ArrayList перед установкой в сеанс. И он отлично работает в среде без общего доступа.
Что мне нужно сделать, чтобы включить аварийное переключение? (Пожалуйста, скажите что-то вроде: не сохраняйте объект в сеансе. Это не единственный объект, который вызывает ошибку. Я получаю ошибки и для других объектов, таких как Источник данных и т. Д.)
Заранее спасибо
Umesh
Редактировать: уже реализованы сериализация и переходные процессы
открытый класс ABC реализует Сериализуемый
{
приватный статический финал long serialVersionUID = 2007L;
открытый статический временный источник данных;
Получение этой ошибкиjava.io.NotSerializableException: org.apache.tomcat.dbcp.dbcp.PoolingDataSource $ PoolGuardConnectionWrapper
...
сохранение атрибута 'ABC' со значением NOT_SERIALIZED