我正在基於客戶端上的GWT/RequestFactory以及服務器端上的WebLogic上的JPA/EclipseLink設置GWT應用程序。但是,在開發過程中,每次我在服務器端代碼(它可以是一個實體,DAO,甚至是Java文件中的註釋!)都改變一些東西時,我在兩個明顯相似的類之間得到ClassCastException
我嘗試使用我的應用程序,擺脫它的唯一方法是重新啓動WebLogic服務器。即使重新部署應用程序也無濟於事。在WebLogic上使用GWT/RequestFactory的ClassCastException
2012年2月10日下午4時08分10秒 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) 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:
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顯然對來自兩個類加載器的同一類有兩個不同的聲明,因此認爲它們是不同的類。大多數servlet容器使用專門的類加載器來保持應用程序與其他應用程序的隔離,並允許重新部署應用程序 - 我的猜測是,在您的情況下這不能正常工作。 – 2012-02-10 19:05:46
感謝提示,但在這裏我相信[GWT/RequestFactory](http://code.google.com/webtoolkit/doc/latest/DevGuideRequestFactory.html)中有一些特定的內容。也許GWT的任何用戶都遇到過這個問題? – foch 2012-02-13 13:12:39
我其實是一個GWT開發人員,並且在我的大部分項目中都使用RF,但我知道類加載程序問題足以提供該建議。在將RF類重新部署到Jetty或Tomcat時,我從未看到過這個問題。 – 2012-02-13 14:14:44