Сеанс кластеризации приложения Grails в Tomcat - PullRequest
2 голосов
/ 29 октября 2009

Кто-нибудь уже сделал это? У меня проблемы с загрузчиком классов при десериализации объекта сеанса grails.

Вот ошибка:

WARN net.spy.memcached.transcoders.SerializingTranscoder: Пойманный CNFE декодирование 1168 байт данных [exec] java.lang.ClassNotFoundException: com.myapp.User [exec] at or..codehaus.groovy.tools.RootLoader.findClass (RootLoader.java:156) [exec] в java.lang.ClassLoader.loadClass (ClassLoader.java:319) [exec] atg.codehaus.groovy.tools.RootLoader.loadClass (RootLoader.java:128) [exec] в org.codehaus.groovy.grails.cli.support.GrailsRootLoader.loadClass (GrailsRootLoader.java:43) [exec] в java.lang.ClassLoader.loadClass (ClassLoader.java:254) [exec] на java.lang.ClassLoader.loadClassInternal (ClassLoader.java:402) [exec] на java.lang.Class.forName0 (собственный метод) [exec] на java.lang.Class.forName (Class.java:247) [exec] в java.io.ObjectInputStream.resolveClass (ObjectInputStream.java:604) [exec] в java.io.ObjectInputStream.readNonProxyDesc (ObjectInputStream.java:1575) [exec] в java.io.ObjectInputStream.readClassDesc (ObjectInputStream.java:1496) [exec] в java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1732) [exec] в java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1329) [exec] в java.io.ObjectInputStream.readObject (ObjectInputStream.java:351) [exec] в net.spy.memcached.transcoders.BaseSerializingTranscoder.deserialize (BaseSerializingTranscoder.java:100) [exec] в net.spy.memcached.transcoders.SerializingTranscoder.decode (SerializingTranscoder.java:66)

Ответы [ 3 ]

1 голос
/ 29 октября 2009

Я думаю, что нет простого способа исправить это, поскольку Grails использует собственный загрузчик классов для загрузки классов домена (я предполагаю, что класс com.myapp.User является классом домена). В качестве обходного пути вы можете сохранить просто сохранить идентификатор пользователя в сеансе и использовать метод, подобный тому, который я описал здесь , для получения его по каждому запросу. Это также обеспечит преимущество уменьшения размера сеанса, который необходимо реплицировать.

0 голосов
/ 13 июня 2012

У меня та же проблема с CNFE при использовании SpyMemcached в среде разработки. CNFE (ClassNotFoundException) SpyMemcached, в основном, генерируется мультиклассировщиком ClassLoader в JVM. Поиск в этой статье: http://code.google.com/p/spymemcached/issues/detail?id=155, найти:

"У меня была эта проблема в прошлом, и я нашел решение. потому что клиент memcached загружается с помощью загрузчика классов и Класс сериализованного объекта загружается с использованием другого загрузчика классов. «

Итак, в моем случае я просто перемещаю memcached-VERSION.jar из ext-lib dir в app-lib dir (/ WEB-INF / lib). Затем клиент memcached и классы приложений находятся в одном ClassLoader, и это исключение очищается.

0 голосов
/ 30 октября 2009

Я когда-либо использовал липкие сессии только через настройку apache mod_proxy, поэтому никогда не пробовал делиться данными сессии между узлами. Это вариант для вас?

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