0

JSFを使用して実行されるWebプロジェクトがあり、EJBモジュールもあります。FORMにいくつかのデータを入力し、セッションBeanを介してそれらのデータをDBに保存しようとしています。

手順の順序は次のとおりです。

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

誰かがこれについて私を助けてくれますか..???
同じタイプのオブジェクトを送信して反復しているので、ここでは完全に失われています... :(

前もって感謝します。
アセラ。

4

1 に答える 1

1

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

オブジェクトのタイプは、クラスとそれをロードしたクラスローダーによって異なります。

そのクラスの2つのコピーがサーバーにデプロイされます。1つはWebアプリに、もう1つはEJBに配置され、コードのさまざまなビットがさまざまなクラスローダーからクラスを取得します。

Webアプリから1つを削除し、WebアプリとEJBが同じ場所からshaedクラスをロードするように配置します。多くの場合、EJBにクラスを含めることが最善の策です。

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

于 2011-01-05T13:47:11.570 に答える