2011-01-05 25 views
0

私はJSFを使用して実行されるWebプロジェクトを持っています&私はEJBモジュールも持っています。 FORM &にいくつかのデータを入力して、それらのデータをセッションBean経由でDBに保存しようとします。EJBモジュールにデータを渡すときにClassCastExceptionが発生する

手順は次のとおりです。

1)ユーザーは、フォーム
2)彼は、マネージドBeanが&はそれらを追加し、すべての入力した値を取り込み
3)保存ボタン
4)にヒットデータとフォームフィールドを埋めて画面が開きます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モジュールに送られます。私はセッション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 & Iドンを与える)

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

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

6を(私も正しくマッピングを行っています)なぜ理解できないの?.. !! :(

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 

は、誰かがこの1で私を助けてください... ???私は、オブジェクトの同じタイプを反復&を送ってるように私は完全にここに迷ってしまいました
を... :(

事前に

感謝。
Asela。

+0

webとejbはどのようにパッケージ化されていますか?単一の耳で、またはスタンドアロンアプリとして?そして、DymanicFormクラスはどのように両方に見えるようになりましたか? – Osw

答えて

1

あなたは「クラスローダー地獄」と呼ばれているものにしています。

オブジェクトの型は、クラスに依存し、また、CLAそれをロードしたssloader。

あなたのサーバーに配備されている2つのクラスのコピーがあります.1つはWeb Appに、もう1つはEJBにあり、異なるコードが異なるクラスローダーからクラスを取得しています。

Web Appから1つを削除して、Web AppとEJBがshaedクラスを同じ場所からロードするように配置します。多くの場合、EJBのクラスを持つことが最良の方法です。

しかし、フォームオブジェクトについて「知っている」EJBは好きではありません。単純なDTOクラスを使用すると、むしろ面倒な場合にはクリーンになる可能性があります。

関連する問題