سؤال

لديّ تطبيق يحاول استخدام EjB التعليق التوضيحي لحقن المراجع عن بُعد إلى EJBS في ملف EJB.JAR الخاص بي. أحصل على نتائج غير متسقة. في إحدى الحالات ، لدي مستمع في web.xml يتم استدعاؤه ويبدو أنه تم حقن EJB بشكل صحيح ، حيث يمكنني رؤيته يتصل بطرق EJB وطرق الاتصال عليها. في فصل آخر (إجراء Struts2) أحصل على NPE عندما يحاول الوصول إلى مرجع EJB. بقدر ما أستطيع أن أقول ، فهي مكالمات متطابقة ، في فصول جافا التي تعيش في نفس ملف .WAR.

كعمل حوله ، أضفت رمزًا في المُنشئ للبحث عن EJBS بأسماء JNDI العالمية ، وهو يعمل بشكل جيد. لا يمكنني معرفة سبب عمل ejb واحد وليس آخر.

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

المحلول

كيف يمكنك حقن EJBS في إجراءات الدعامات 2؟ هل تستخدم CDI؟ هل تستخدم Struts2 CDI البرنامج المساعد?

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

إذا كنت تريد أن تجربها ، احصل على مصادر Struts 2:

svn co http://svn.apache.org/repos/asf/struts/struts2/trunk/ struts2

ثم cd داخل ال struts2 الدليل وتشغيل الأمر التالي (سيؤدي ذلك إلى تجميع الوحدات المطلوبة لـ struts-cdi-plugin)

mvn install -pl plugins -am

ثم احصل على مصادر CDI-plugin:

svn co https://svn.apache.org/repos/asf/struts/sandbox/trunk/struts2-cdi-plugin/

وتجميعه:

mvn install

الآن ، مع التبعيات التالية في pom.xml الخاص بي:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-cdi-plugin</artifactId>
    <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>javassist</groupId>
  <artifactId>javassist</artifactId>
  <version>3.8.0.GA</version>
</dependency>

تمكنت من الحصول على حقن EJB في إجراء:

public class HelloWorld extends ActionSupport {

    @Inject
    HelloEJB helloEjb;

    @Override
    public String execute() throws Exception {
        setMessage(helloEjb.getMessage());
        return SUCCESS;
    }

    private String message;

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

}

نرى https://svn.apache.org/repos/asf/struts/sandbox/trunk/struts2-cdi- مثال على سبيل المثال.

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