gwt - WebLogic 上的 GWT/RequestFactory 的 ClassCastException

标签 gwt jpa weblogic eclipselink requestfactory

我正在客户端设置一个基于 GWT/RequestFactory 的 GWT 应用程序,并在服务器端设置基于 WebLogic 的 JPA/EclipseLink。

但是,在开发过程中,每当我更改服务器端代码上的某些内容(可以是实体、DAO,甚至 Java 文件中的注释!)时,我都会收到 ClassCastException当我尝试使用我的应用程序时,在两个明显相似的类之间,摆脱它的唯一方法是重新启动我的 WebLogic 服务器。即使重新部署应用程序也无济于事。

Feb 10, 2012 4:08:10 PM com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost SEVERE: Unexpected error java.lang.ClassCastException: com.mycompany.MyClass cannot be cast to com.mycompany.MyClass at com.mycompany.server.locator.CodeLevelLocator.getId(MyClassLocator.java:1) at com.google.web.bindery.requestfactory.server.LocatorServiceLayer.doGetId(LocatorServiceLayer.java:168) at com.google.web.bindery.requestfactory.server.LocatorServiceLayer.getId(LocatorServiceLayer.java:66) at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.getId(ServiceLayerDecorator.java:81)

知道如何避免服务器重新启动吗?

谢谢。

编辑:我正在为此设置赏金,因为每次服务器更改后重新启动 WebLogic 真的很痛苦!!!

EDIT2 通过添加以下 ServletContextListener 解决了 James 的问题:

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
    }

}

最佳答案

这是一个类加载器问题,在重新部署后,旧的类/实例仍保留在应用程序中的某个位置。

它可能与 JPA 有关,您使用的是容器管理的持久性单元还是应用程序管理的?容器管理不应该有这个问题,但应用程序管理可能会出现这个问题,就像您不关闭旧的 EntityManagerFactory 一样,它可以保留在旧的类中。确保在重新部署之前关闭所有工厂,或者尝试容器管理以查看是否可以解决问题。

关于gwt - WebLogic 上的 GWT/RequestFactory 的 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9230092/

相关文章:

java - 为什么如果我们将 HandlerRegistration 放入一个方法中,我们就无法删除Handler?

java - 与 Eclipselink DescriptorCustomizer 的软删除级联

web-applications - Weblogic 和 BOM

java - ejb-jar.xml : Allowed Methods for container-transaction tag

java - 实体类无法转换为 java.lang.Number

weblogic - 如何在 WLST(离线模式)下克隆 weblogic 服务器?

java - Errai 对 GAE 平台的支持

java - 从 servlet 下载文件客户端时出现意外字符

http - 使用 GWT RequestBuilder 时捕获 "302 Found"

java - Spring Controller : use domain objects as @RequestBody