Я настраиваю приложение GWT на основе GWT/RequestFactory на стороне клиента и JPA/EclipseLink поверх WebLogic на стороне сервера.ClassCastException с GWT/RequestFactory на WebLogic
Однако во время разработки каждый раз, когда я что-то меняю на серверном коде (это может быть сущность, DAO или даже комментарий в файле Java!), Я получаю ClassCastException
между двумя, по-видимому, аналогичными классами, когда Я пытаюсь использовать свое приложение, и единственный способ избавиться от него - это перезагрузить мой сервер WebLogic. Даже повторное развертывание приложения не помогает.
10 февраля 2012 4:08:10 PM com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost СИЛЬНЫЙ: Неожиданное java.lang.ClassCastException ошибка: com.mycompany.MyClass не может быть приведение к com.mycompany.MyClass в com.mycompany.server.locator.CodeLevelLocator.getId (MyClassLocator.java:1) на com.google.web.bindery.requestfactory.server.LocatorServiceLayer.doGetId (LocatorServiceLayer.java: 168) по адресу com.google.web.bindery.requestfactory.server.LocatorServiceLayer.getId (LocatorServiceLayer.java:66) по адресу com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.getId (ServiceLayerDecorator.java:81)
Любая идея, как избежать этого рестарт сервера?
Спасибо.
EDIT: Я создаю щедрость на этом, потому что перезапуск WebLogic после каждого изменения сервера очень болезнен!
EDIT2 решаемые благодаря Джеймс, добавив следующее: контекста сервлета
public class DeploymentListener implements ServletContextListener {
private static Logger log = LoggerFactory
.getLogger(DeploymentListener.class.getName());
@Override
public void contextDestroyed(ServletContextEvent arg0) {
try {
// close the Entity Manager Factory.
EMF.close();
} catch (Exception e) {
log.error("Error closing the Entity Manager Factory", e);
}
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// nothing to do
}
}
Я не очень квалифицирован, чтобы отвечать, но я могу предложить следующее: Ошибка выглядит как проблема загрузчика классов, где jvm, по-видимому, имеет два разных объявления для одного и того же класса из двух загрузчиков классов и поэтому считает их разными классами , В большинстве контейнеров сервлетов используется специализированный загрузчик классов, чтобы изолировать приложения друг от друга и разрешать развертывание приложений - я думаю, что это не работает правильно в вашем случае. –
Спасибо за подсказку, но здесь я считаю, что здесь есть что-то конкретное [GWT/RequestFactory] (http://code.google.com/webtoolkit/doc/latest/DevGuideRequestFactory.html). Может быть, любой пользователь GWT здесь столкнулся с этой проблемой? – foch
Я на самом деле разработчик GWT и использую RF в большинстве своих проектов, но я достаточно точно знаю о проблемах загрузчика классов, чтобы предложить это предложение. Я никогда не видел эту проблему при перераспределении классов RF на Jetty или Tomcat. –