سؤال

لقد كنت أكافح من أجل هذا لفترة من الوقت الآن.

أحاول الاستعداد لـ EJB 3.0.أنا أستخدم JBoss 5.1.0 GA كخادم التطبيقات الخاص بي.لقد بدأت باستخدام حبة جلسة بسيطة للغاية عديمة الحالة مع واجهة محلية وعميل jsp-servlet بسيط يستدعي طريقة حبة الجلسة.كل هذا بينما كنت أحاول استخدامه @EJB تعليق توضيحي لإدخال حبة الجلسة في فئة servlet.

public class SampleServlet extends HttpServlet {

    @EJB
    private PersonLocal person;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        System.out.println("In servlet");       
        response.getWriter().write("Person Name : "+person.getName());
        System.out.println(person.getName());       
    }
}

أنا أستخدم JBoss 5.1.0 GA مع تقصير إعدادات.(لقد حاولت أيضًا مع الجميع إعدادات)

ومع ذلك، اعتدت أن أحصل على إشارة فارغة إلى حقنة فول الجلسة.بعد كفاح لمدة يوم أو نحو ذلك، قمت أخيرًا بتجربة طريقة البحث القبيحة EJB 2.x JNDI بدلاً من @EJB تعليق توضيحي مع تكوين jndi المحدد في ملف jndi.properties الملف ويعمل دون أي تغييرات أخرى!

الآن، حاولت معرفة ما إذا كان JBoss 5.1.0 GA يدعم أو لا يدعم الحقن في مستندات JBoss @EJB تعليق توضيحي، لكن لم أتمكن من العثور على إجابة محددة.فهل يمكن لأحد أن يقول لي ما إذا كان الأمر كذلك؟لأنني أفضل حقًا التعليق التوضيحي على بحث JNDI (أعني من لن يفعل ذلك؟).هل فاتني شيء..؟

ربما كان ينبغي وضع هذا في منتديات JBoss، ولكن..أنا مدمن على هذا المكان ;-)

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

المحلول

يتم دعم هذا بالتأكيد بواسطة JBoss 5.x نظرًا لأنه معتمد من Java EE 5.

في الواقع، أقترح التحقق من الفصل 11.مقدمة لحقن EJB في Servlets التابع دروس JBoss EJB3, ، يصفون مثالًا تفصيليًا وخطوة بخطوة.

وانتبه بشكل خاص إلى الملاحظة التالية:

لكي يتم إجراء الحقن في وحدة الويب ، يجب على web.xml استخدام الإصدار 2.5 من تطبيق الويب XSD:

<web-app version="2.5"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

نصائح أخرى

واجهت مشكلة مماثلة في استخدام وحدة جافا للأعمال عن بعد، ولكن لم يكن ذلك بسبب إصدار تطبيق الويب، بل بسبب الطريقة التي كان عميلي يبحث بها عن وحدة جافا للأعمال.

إليك ما نجح بالنسبة لي:

//bean
@Stateless(name="xxxxService")
@Remote(xxxxRemote.class)
public class xxxxService implements xxxxRemote {

//interface - note that no annnotation is required
public interface xxxxRemote {

//in the client
  @EJB(mappedName="myJndiNameForxxxx") //for a local ejb, you could use 'beanName='
  private xxxxRemote xxxx;

بالنسبة لمشروعي (الذي تم إنشاؤه باستخدام Maven)، يكون العميل موجودًا في تطبيق ويب، ويكون EJB موجودًا في مشروع EJB والذي يتم تغليفه بعد ذلك في مشروع EAR.يتم تعيين JNDI في ملف jboss.xml، الموجود في مشروع EJB (في مشروعي، src/main/resources/META-INF)، ويبدو كما يلي:

<?xml version="1.0" encoding="UTF-8"?>
<jboss xmlns:xs="http://www.jboss.org/j2ee/schema"
       xs:schemaLocation="http://www.jboss.org/j2ee/schema/jboss_5_0.xsd"
       version="5.0">
  <enterprise-beans>
  <session>
      <ejb-name>xxxxService</ejb-name>
      <jndi-name>myJndiNameForxxxx</jndi-name>
  </session>
  </enterprise-beans>
</jboss>

هذا كل ما يتطلبه الأمر، والآن يمكنني الوصول إلى وحدة جافا للأعمال (EJB) من العميل.أمل أن هذا يساعد شخصاما.

إذا كنت لا تزال تواجه مشكلات، فيمكنك البحث في وحدة تحكم JMX للتأكد من ظهور إدخال JNDI.انظر ضمن "jboss">"service=JNDIview">"list" وانقر على زر "استدعاء".إذا تم نشر الخدمة الخاصة بك بشكل صحيح، فيجب أن ترى اسم JNDI (في المثال الخاص بي، myJndiNameForxxxx) ضمن "ProxyFactory".

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