Jetty nosql Использование MongoSessionManager на Heroku - PullRequest
0 голосов
/ 30 января 2012

У меня есть приложение Grails на герою. Я использую MongoSessionManager, который позволяет обмениваться данными сессии между узлами кластера heroku. Я также использую собственный класс начальной загрузки для настройки экземпляра Jetty для приложения Grails.

Проблема с MongoSessionManager в том, что когда Jetty пытается десериализовать объект из Mondodb, он генерирует ClassNotFoundException:

2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: 2012-01-30 15: 23: 56.121: ПРЕДУПРЕЖДЕНИЕ: oejnm.MongoSessionManager: 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: на java.net.URLClassLoader $ 1.run (URLClassLoader.java:217) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: at java.security.AccessController.doPrivileged (собственный метод) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: на java.net.URLClassLoader.findClass (URLClassLoader.java:205) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: at java.lang.ClassLoader.loadClass (ClassLoader.java:321) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:294) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: java.lang.ClassNotFoundException: org.codehaus.groovy.grails.web.servlet.GrailsFlashScope 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: at java.io.ObjectInputStream.resolveClass (ObjectInputStream.java:621) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: at java.io.ObjectInputStream.readNonProxyDesc (ObjectInputStream.java:1592) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: at java.io.ObjectInputStream.readClassDesc (ObjectInputStream.java:1513) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1749) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1346) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: at org.eclipse.jetty.nosql.mongodb.MongoSessionManager.decodeValue (MongoSessionManager.java:447) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: at java.lang.ClassLoader.loadClass (ClassLoader.java:266) 2012-01-30T15: 23: 56 + 00: 00 приложение [web.2]: at java.lang.Class.forName0 (собственный метод)

Кажется, что Jetty использует другой загрузчик классов, который не может найти класс, специфичный для моего веб-приложения. Есть ли способ настроить экземпляр Jetty, чтобы он мог найти все классы, которые использует мое приложение?

1 Ответ

1 голос
/ 02 февраля 2012

Если вы хотите только развернуть свои библиотеки в веб-приложении, то не легко.Обычно вы можете поместить его в $ jetty.home / lib / ext и т. П. И получить его в большем загрузчике классов.В этом встроенном режиме вы можете использовать методы системного и серверного классов в WebAppContext, но тогда я точно не знаю, как настроен экземпляр heroty jetty, поэтому могу обещать, что это сработает.

БлагодаряДэвид, хотя он и открыл проблему в bugzilla (bugs.eclipse.org под RT / Jetty) по этой проблеме (даже с исправлением, нам нравится), я применю исправление, и оно должно быть доступно в 7.6.1 и 8.1.1 выйдет через несколько недель или на ветвях master и jetty-8 позже сегодня.

cheers

[edit] исправление для этого было применено к master и jetty-8 и появится в7.6.1 и 8.1.1 спуски причала

...