Frage

ich ein Web-Projekt haben, das getan wird mit JSF & Ich habe auch ein EJB-Modul. Ich gebe einige Daten in einer Form, und versuchen, diese Daten an die DB über meine Session-Bean zu speichern.

Die Reihenfolge der Schritte ist wie folgt.

1) Der Benutzer öffnet den Bildschirm mit einem Formular
2) Er füllt die Formularfelder mit Daten
3) Zugriffe auf die Schaltfläche Speichern
4) Die Managed Bean erfasst alle eingegebenen Werte und fügt sie in eine Arraylist (mit Entity Beans. Siehe unten)

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) Dann myArrayList ist mit dem EJB-Modul für die Persistenz gesendet. (Ich habe die Zuordnung korrekt auch getan)

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

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

6) Wenn ich erreichen die Session Bean & versuchen zu durchlaufen 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) Aber es gibt mir ein Classcast & Ich verstehe nicht, warum .. !! :(

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

Kann jemand bitte helfen Sie mir auf diesen einen .. ???
Ich bin total verloren hier als ich schicke & die gleiche Art von Objekten iterieren ...: (

Vielen Dank im Voraus.
Asela.

War es hilfreich?

Lösung

Sie sind in dem, was "Classloader Hell" bezeichnet worden.

Der Typ eines Objekts hängt von der Klasse und auch die Klassenladeprogramm, die es geladen wird.

Sie haben zwei Kopien dieser Klasse in Ihrem Server bereitgestellt, vielleicht einen in der Web App und eine in den EJB und verschiedenen Bits von Code sind die Klasse von verschiedenen Classloader Aufnehmen.

Nehmen Sie das eine von der Web App, die Dinge so einrichten, dass Ihre Web App und EJB die shaed Klasse von der gleichen Stelle laden -. Oft mit der Klasse in der EJB ist die beste Wette

Allerdings habe ich nicht wie EJBs „Wissen“ über Formularobjekte, eine einfache DTO-Klasse kann sauberer sein, wenn eher lästig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top