2011-01-05 16 views
0

我有使用JSF &我有一個EJB模塊也做了Web項目。 我在表單中輸入&一些數據試着通過會話bean來保存這些數據到數據庫。ClassCastException異常傳遞數據時,EJB模塊

的步驟的順序如下。

1)用戶打開的窗口中有一個表格
2)他填滿了數據的表單字段
3)點擊保存按鈕
4)管理的bean捕獲所有輸入的數值&將它們添加到的ArrayList(含有實體bean。下面示出)

for(String tagName : formTagNames){ // For all the tag names in the FORM 
String value = request.getParameter(tagName); // Get the value of the field 
myArrayList.add(new DynamicForm(tagName, value)); // Create a bean & add to list 
} 

5)然後myArrayList被髮送到持久性EJB模塊。 (我已經正確映射太)

@EJB(name="DynamicFormFacadeLocal", mappedName="DynamicFormFacade/local") 
private static DynamicFormFacadeLocal dynamicFormFacadeLocal; 

// Send it to EJB module for persistence 
dynamicFormFacadeLocal.addDynamicFormFields(myArrayList); 

6)當我到了會話bean &試圖通過myArrayList

public Integer addDynamicFormFields(ArrayList<DynamicForm> formDetailsList) { 
if(formDetailsList == null || formDetailsList.isEmpty()) return 0; 

setupResources(); // Setting up all necessary connections & stuff 
int count = 0; 
try{ 
    entityTransaction.begin(); 
    for(DynamicForm form : formDetailsList){ 
    entityManager.persist(form); 
    count++; 
    } 
    entityTransaction.commit(); 
} 
catch(Exception e){ 
    e.printStackTrace(); 
    entityTransaction.rollback(); 
} 
finally{ 
    cleanupResources(); // Cleanup all connections & resources 
} 

return count; 
    } 

7)迭代,但它給了我一個ClassCastException &我不不明白爲什麼..! :(

18:17:42,210 INFO [org.hibernate.impl.SessionFactoryImpl] building session factory 
18:17:42,214 INFO [org.hibernate.impl.SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured 
18:17:42,219 ERROR [STDERR] java.lang.ClassCastException: com.test.dynamiform.beans.entity.DynamicForm cannot be cast to com.test.dynamiform.beans.entity.DynamicForm 
18:17:42,219 ERROR [STDERR] at com.test.dynamiform.beans.session.DynamicFormFacade.addDynamicFormFields(DynamicFormFacade.java:32) 
18:17:42,219 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
18:17:42,219 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
18:17:42,219 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
18:17:42,219 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source) 
18:17:42,220 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122) 
.... etc 

是否有人可以幫助我在這一個.. ???
爲我送&迭代對象相同類型我完全失去了這裏... :(

在此先感謝。
Asela。

+0

如何Web和EJB封裝?在一個耳朵或作爲獨立的應用程序?以及DymanicForm類如何對兩者都可見? – Osw 2011-01-06 12:44:38

回答

1

你在這個被稱爲「類加載器地獄」。

的對象的類型取決於類,也是CLA裝載它的ssloader。

您將有該類部署在自己的服務器,也許是一個在Web應用程序和一個在代碼從不同的類加載器拿起類的EJB和不同位的兩個副本。

從Web應用程序中刪除一個,安排一些東西,以便您的Web應用程序和EJB從同一個地方加載着色的類 - 通常讓EJB中的類是最好的選擇。

不過,我不喜歡的EJB「知道」關於表單對象,使用簡單的DTO類可能是如果相當惱人的清潔劑。