Question

J'ai un projet web qui est fait en utilisant JSF et moi avons un module EJB aussi. J'entre des données sous une forme et essayer de sauver ces données à DB via mon bean session.

La séquence des étapes est le suivant.

1) L'utilisateur ouvre l'écran avec une forme
2) Il remplit les champs de formulaire avec des données
3) Visites sur le bouton Enregistrer
4) Le managed bean capture toutes les valeurs entrées et les ajoute à un ArrayList (contenant des haricots entité. Ci-dessous)

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) Ensuite, myArrayList est envoyé au module EJB de persistance. (Je l'ai fait la mise en correspondance correctement aussi)

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

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

6) Quand j'arrive et essayer de la fève de session pour itérer 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) Mais il me donne un ClassCastException et je ne comprends pas pourquoi .. !! :(

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

Quelqu'un peut-il me aider s'il vous plaît sur celui-ci .. ???
Je suis totalement perdu ici que j'envoie et itérer le même type d'objets ...: (

Merci à l'avance.
Asela.

Était-ce utile?

La solution

Vous êtes dans ce qu'on a appelé "Classloader Enfer".

Le type d'un objet dépend de la classe et aussi le classloader qui l'a chargé.

Vous aurez deux copies de cette catégorie déployée dans votre serveur, peut-être un dans l'App Web et un dans l'EJB et différents bits de code ramassez la classe de différents classloader.

Supprimer celle de l'App Web, arranger les choses afin que votre application Web et EJB charger la classe shaed du même endroit -. Avoir souvent la classe dans l'EJB est le meilleur pari

Cependant, je n'aime pas EJBs « savoir » sur les objets de formulaire, en utilisant une simple classe DTO peut être plus propre si plutôt ennuyeux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top