ClassCastexception При прохождении данных в модуль EJB
-
25-09-2019 - |
Вопрос
У меня есть веб-проект, который сделан с помощью JSF, и у меня тоже есть модуль 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) Но это дает мне классное расслабиться, и я не понимаю, почему .. !! :(
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
Может кто-нибудь, пожалуйста, помогите мне на этом .. ???
Я полностью потерян здесь, как я посылаю и итацию одинаковых предметов ... :(
Заранее спасибо.
Асела.
Решение
Вы находитесь в том, что было назрено «ClassLoader Hell».
Тип объекта зависит от класса, а также классный загрузчик, который его загружал.
У вас будут два копии этого класса, развернутого на вашем сервере, возможно, один в веб-приложении, а один в EJB и разные биты кода поднимают класс с разных классов.
Удалите один из веб-приложения, организуйте вещи так, чтобы ваше веб-приложение и EJB загружают класс Shaed с того же места - часто имея класс в EJB, является лучшим ставкам.
Тем не менее, мне не нравятся EJBS «Знание» о формных объектах, использование простого класса Dто может быть более чистым, если довольно раздражает.