Domanda

Ho un progetto web che viene fatto usando JSF e io abbiamo un modulo EJB troppo. Entro alcuni dati in una forma e cerco di salvare tali dati a DB tramite il mio session bean.

La sequenza è la seguente.

1) L'utente apre lo schermo con una forma
2) Egli riempie i campi del modulo con i dati
3) Risultati sul pulsante Salva
4) Le catture bean gestito tutti i valori immessi e li aggiunge a un ArrayList (contenenti entity bean. Mostrate di seguito)

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) Poi myArrayList viene inviato al modulo EJB per la persistenza. (Ho fatto la mappatura corretta troppo)

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

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

6) Quando raggiungo il session bean e provo per scorrere 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) Ma mi dà un ClassCastException & non capisco perchè .. !! :(

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

Qualcuno può per favore mi aiuti su questo .. ???
Sono totalmente perso qui come sto inviando & iterazione lo stesso tipo di oggetti ...: (

Grazie in anticipo.
Asela.

È stato utile?

Soluzione

Sei in quello che è stato definito "programma di caricamento classi Hell".

Il tipo di un oggetto dipende dalla classe e anche il classloader che esso caricato.

Si avrà due copie di quella classe distribuito in server, forse uno nel Web App e uno in EJB e diversi pezzi di codice sono raccogliendo la classe da diversi classloader.

Rimuovi quello dal Web App, organizzare le cose in modo che il Web App e EJB caricare la classe shaed dallo stesso luogo -. Spesso avendo la classe del bean è la migliore scommessa

Tuttavia, non mi piace EJB "sapere" su oggetti modulo, utilizzando una semplice classe DTO può essere pulito se piuttosto fastidioso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top