سؤال

هذا السؤال يتعلق Java EE 6, ، استخدام Glassfish V3 مضمن للجميع.

لدي اختبار وحدة يستخدم EJBContainer لاختبار EJB عديمي الجنسية. المشكلة هي أنني أواجه مشكلة في البحث عن EJB (عن بعد) باستخدام JNDI:

setup() {

  ctx = EJBContainer.createEJBContainer().getContext();

}

...

test() {

BookService bookService = (BookService)ctx.lookup("java:global/BookServiceEJB!com.something.service.BookService");

...

}

@Stateless
public class BookServiceEJB implements BookService {
...
}

@Remote
public interface BookService {
...
}

يعطي الاستثناء:

javax.naming.NamingException: Lookup failed for 'java:global/BookServiceEJB!com.something.service.BookService' in SerialContext  [Root exception is javax.naming.NameNotFoundException: BookServiceEJB!com.something.service.BookService not found]

...

caused by: javax.naming.NameNotFoundException: BookServiceEJB!com.something.service.BookService not found

لقد جربت العديد من مسارات الموارد JNDI:

على سبيل المثال

java:global/BookServiceEJB

java:global/BookService

حتى:

java:global/BookShelf-1.0-SNAPSHOT/BookServiceEJB

إلخ...

لا شيء يعمل

أنا ليس لديك أي نشر XML تم تكوين الملفات ، فقط أ persistence.xml في meta-inf.

الاختبار يستخدم Maven Surefire:

mvn clean test

أي مساعدة يحظى بتقدير كبير!

ملحوظة: يعمل النشر الكامل لخادم Glassfish (باستخدام AppClient ، و @EJB حقنة)

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

المحلول

بعد الكثير من البحث ، وجدت الحل الذي يعمل بالنسبة لي ...

سيكون عليك تكوين EJBContainer مع الخاصية: ejbcontainer.modules ، والموقع الذي تكون فيه فئات الوحدة النمطية (إذا كانت تستخدم Maven ، "الهدف/الفئات").

على سبيل المثال

...
props = new Properties();
props.put(EJBContainer.MODULES, new File("target/classes"));
ec = EJBContainer.createEJBContainer(props);
...

إذا كان EJB الخاص بك يستخدم JPA ، فهناك مشكلة أخرى من حيث أنك لن تتمكن من تحديد مصدر بيانات في الحاوية المدمجة ، لذلك يجب استخدام DS: "JDBC/__ الافتراضي".

على سبيل المثال ، يبدو أن ثباتي. xml هكذا:

<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    version="1.0">

    <persistence-unit name="bookshelf" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.blah.domain.Book</class>
        <jta-data-source>jdbc/__default</jta-data-source>
        <properties>
            <property name="eclipselink.logging.level" value="INFO"/>
        </properties>
    </persistence-unit>

</persistence> 

لم أحسب كيفية تكوين اختبار الحاوية المدمجة لاستخدام DS واحد (JDBC/__ افتراضي) ، وتطبيقي لاستخدام آخر (مثل JDBC/Booksds)

نرى: http://www.mentby.com/glassfish/embedded-testing-woes.html

نرى: http://forums.java.net/jive/thread.jspa؟messageid=395759

لأكون صادقًا ، لا أعرف لماذا يزعج الناس Java ee عندما تكون حلول مثل الربيع أكثر بساطة ...

لقد كان الأمر محبطًا للغاية وأهدر الكثير من الوقت ... أتمنى أن يساعد هذا.

نصائح أخرى

هناك بعض العناصر التي تحتاج إلى التحقق منها للتأكد من أنه يمكنك تحميل الفول من خلال Context.lookup تجنب أ NamingException.

  1. تأكد من أن لديك حبة. قد يبدو هذا شيئًا واضحًا ، لكنني قضيت الكثير من الوقت في محاولة لمعرفة سبب عدم تمكني من الحصول على مثيل لخدمتي في الاختبارات. السبب هو أنني كنت أفتقد عديمة الجنسية حاشية. ملاحظة.

  2. أضف الوحدة النمطية عند إنشاء الحاوية كما أشار dzhu. لمافن الطبقات سوف يكون استهداف/الطبقات, ، ل maven الاختبارات سوف يكون استهداف/فئات الاختبار.

  3. هناك خطأ ما إذا وجدت رسالة مثل SEVERE: EJB6005:No EJB modules found في وحدة التحكم. يخبرك أنه لا يوجد عديمة الجنسية الطبقات المشروحة

  4. ألقِ نظرة على وحدة التحكم في الأسماك الزجاجية المدمجة! في هناك سترى أسماء البحث لفاصوليا. انتبه إلى الرسائل في التنسيق INFO: EJB5181:Portable JNDI names for EJB YourBean: [java:global/classes/YourBean!bean.package.YourBean, java:global/classes/YourBean]. هذا يعني أنه يمكنك البحث عن الفول إما عن طريق الاتصال context.lookup("java:global/classes/YourBean!bean.package.YourBean") أو بالاسم الأقصر context.lookup("java:global/classes/YourBean") والتي يمكن أن تكون مفيدة إذا لم يكن هناك تصادمات الاسم.

أمل أن هذا يساعد شخصاما. كان من المفيد حقًا الحصول على هذه النصائح.

لقد كتبت برنامجًا تعليميًا صغيرًا حول استخدام حاوية Glassfish 3.1 المدمجة ، وأيضًا معالجة المشكلة للحاجة إلى ثبات مختلف. xml للاختبارات. أيضا تثبيت حاوية تعطل مع واجهات ومواقع الويب عن بُعد. يمكنك التحقق من ذلك في http://pschyska.blogspot.com/2011/06/unit-testing-ejb-31-with-netbeans-maven.html

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