Кластеризация с общим сеансом - ошибка объекта не сериализована - PullRequest
0 голосов
/ 11 сентября 2009

У меня есть среда, в которой 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

Ответы [ 3 ]

0 голосов
/ 11 сентября 2009

Если вы можете управлять объектами и нуждаться в них, то реализуйте сериализуемые & необходимые методы readObject (), writeObject ().

Любые объекты, которые потерпели неудачу, либо должны быть расширены для реализации сериализации, либо не сохранены непосредственно в сеансе, но помещены в другой объект как переходное поле. Вам необходимо сделать приложение достаточно устойчивым для восстановления этих объектов после перехода на другой ресурс.

0 голосов
/ 25 ноября 2013

Убедитесь, что при записи чего-либо в сеанс он должен реализовывать интерфейс java.io.Serializable

0 голосов
/ 11 сентября 2009

Вам нужно поместить его в объект, в котором поле, содержащее ссылку, помечено как переходное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...