سؤال

لدي مشروع ويب يتم القيام به باستخدام JSF ولدي وحدة EJB أيضًا. أدخل بعض البيانات في نموذج وأحاول حفظ هذه البيانات إلى DB عبر حبة الجلسة الخاصة بي.

تسلسل الخطوات كما يلي.

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

هل يمكن لأحد أن يساعدني في هذا .. ؟؟؟
لقد ضاعت تمامًا هنا وأنا أرسل وأتكرر نفس النوع من الكائنات ... :(

شكرا لك مقدما.
آسيلا.

هل كانت مفيدة؟

المحلول

أنت في ما أطلق عليه اسم "ClassLoader Hell".

يعتمد نوع الكائن على الفصل وأيضًا جهاز تحميل الفئة الذي قام بتحميله.

سيكون لديك نسختان من تلك الفئة التي تم نشرها في الخادم الخاص بك ، وربما واحدة في تطبيق الويب وواحدة في EJB وتجهيزات مختلفة من التعليمات البرمجية تلتقط الفئة من charloader مختلف.

قم بإزالة التطبيق من تطبيق الويب ، وترتيب الأشياء بحيث يكون تطبيق الويب الخاص بك و EJB تحميل فئة Shaed من نفس المكان - غالبًا ما يكون وجود الفصل في EJB هو أفضل رهان.

ومع ذلك ، لا أحب EJBS "معرفة" عن كائنات النماذج ، فقد يكون استخدام فئة DTO بسيطة أنظف إذا كان مزعجًا إلى حد ما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top