2011-01-05 3 views
0

У меня есть веб-проект, который выполняется с использованием JSF & У меня тоже есть модуль EJB. Я ввожу некоторые данные в ФОРМУ & попытаюсь сохранить эти данные в БД через мой сеансовый компонент.ClassCastException при передаче данных в модуль EJB

Последовательность шагов следующая.

1) Пользователь открывает окно с формой
2) Он заполняет поля формы с данными
3) Число просмотров на кнопку сохранения
4) управляемый компонент захватывает все введенные значения & добавляет их к ArrayList (содержащий объектные компоненты, показанные ниже.)

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) Когда я достигаю сессионный компонент & попытаться перебирать 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 

Может кто-то пожалуйста, помогите мне в этом .. ???
Я полностью потерял здесь, как я посылаю & переборе тот же тип объектов ... :(

Спасибо заранее.
Asela.

+0

Как упакованы веб-сайты и ejb? В одном ухе или как автономные приложения? И как класс DymanicForm становится видимым для обоих? – Osw

ответ

1

Вы в то, что было названо «Загрузчик классов Ад».

Тип объекта зависит от класса, а также CLA ssloader, который загрузил его.

У вас будет две копии этого класса, развернутые на вашем сервере, возможно, одно в веб-приложении, а другое - в EJB, а разные биты кода собирают класс из другого загрузчика классов.

Удалите приложение из веб-приложения, упорядочивайте вещи так, чтобы ваше веб-приложение и EJB загружали класс shaed из одного и того же места - зачастую наличие класса в EJB - лучшая ставка.

Однако мне не нравятся EJB, «знающие» об объектах Form, используя простой класс DTO, может быть более чистым, если это довольно раздражает.

Смежные вопросы