ClassCastException с GWT / RequestFactory в WebLogic - PullRequest
2 голосов
/ 10 февраля 2012

Я устанавливаю приложение GWT на основе GWT / RequestFactory на стороне клиента и JPA / EclipseLink через WebLogic на стороне сервера.

Однако во время разработки каждый раз что-то меняю на стороне серверакода (это может быть сущность, DAO или даже комментарий в файле Java!), я получаю ClassCastException между 2 внешне похожими классами, когда пытаюсь использовать свое приложение, и единственным способом избавиться от негоперезапустить мой сервер WebLogic.Даже повторное развертывание приложения не помогает.

10 февраля 2012 г. 16:08:10 com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost SEVERE: Неожиданная ошибка java.lang.ClassCastException: com.mycompany.MyClass не может быть преобразован в com.mycompany.MyClass в com.mycompany.server.locator.CodeLevelLocator.getId (MyClassLocator.java:1) в com.google.web.bindery.requestfactory.server.LocatorService.doGetId (LocatorServiceLayer.java:168) на com.google.web.bindery.requestfactory.server.LocatorServiceLayer.getId (LocatorServiceLayer.java:66) на com.google.web.bindery.requestfactory.server.Dercoayayer .DercoLayerJava: 81)

Есть идеи, как избежать перезапуска этого сервера?

Спасибо.

РЕДАКТИРОВАТЬ : я настраиваюНаграда за это, потому что перезапуск WebLogic после каждого изменения сервера действительно болезненный !!!

EDIT2 решена благодаря Джеймсу путем добавления следующего ServletContextListener:

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
    }

}

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Это проблема загрузчика классов, почему-то после повторного развертывания старые классы / экземпляры остаются где-то в вашем приложении.

Это может быть связано с JPA, используете ли вы блок персистентности, управляемый контейнером, или приложениеудалось?Управляемый контейнер не должен иметь этой проблемы, но управляемое приложение может, так как если вы не закроете старый EntityManagerFactory, он может остаться со старыми классами.Перед повторным развертыванием убедитесь, что вы закрыли все фабрики, или попробуйте контейнер, чтобы узнать, решит ли он проблему.

0 голосов
/ 27 февраля 2012

Не знаком с запуском GWT в Weblogic, но, возможно, это поможет.

Запустите ваш сервер в режиме отладки - он должен иметь возможность отслеживать изменения класса / jar во время выполнения.

Возможно, вам нужно только повторно опубликовать свой сервер, а не перезапускать его.

Наконец, у вас есть этот класс в jar-файле в другом месте вашего пути к классам?

...