Сбой внедрения OpenEJB локального клиента - PullRequest
4 голосов
/ 06 июня 2011

Обратите внимание, что я очень близко отражаю приведенный здесь пример .

На самом деле моя ситуация несколько проще, так как я даже не тестирую с постоянным модулем в данный момент. Мой тестовый проект предоставляет простой MDB и сессионный компонент; и MDB, и сессионный компонент загружаются в обычном режиме и могут быть успешно протестированы (ограниченным образом) без внедрения.

Предлагаемая инъекция с пометкой @LocalClient в моих модульных тестах не выполняется с известной ошибкой:

javax.naming.NamingException: Unable to find injection meta-data for [your-class]. Ensure that class was annotated with @org.apache.openejb.api.LocalClient and was successfully discovered and deployed. See <a href="http://openejb.apache.org/3.0/local-client-injection.html" rel="nofollow">http://openejb.apache.org/3.0/local-client-injection.html</a>

Когда я захожу на эту страницу, она сообщает, что мне может понадобиться добавить дополнительное свойство в настройку контекста моего теста. Так что теперь выглядит так:

@Override
public void setUp() throws Exception {
    initializeContext();
}
public void initializeContext() {
    Properties p = new Properties();
    p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
    // the property i've added
    p.put("openejb.tempclassloader.skip", "annotations");

    try {
        InitialContext initialContext = new InitialContext(p);
        initialContext.bind("inject", this);
    } catch (Throwable throwable) { 
        throwable.printStackTrace();
        throw new RuntimeException(throwable);
    }
}

Но все равно не получается. Мне действительно нравится эта идиома, и я был бы очень взволнован, если бы смог успешно использовать ее в своих проектах.

Несколько других заметок:

  • Я предоставляю «пустой» ejb-jar.xml (в src / main / resources) и application-client.xml (в src / test / resources), как предложено Apache, чтобы сказать OpenEJB сканировать classpath [ ОБНОВЛЕНИЕ: как оказалось, я делал это неправильно. Смотрите мой ответ ниже для предложения, которое сработало для меня.]
  • Тестовые случаи, помеченные @LocalClient, не распознаются движком OpenEJB как фактически собранные и обработанные должным образом (как, например, мои MDB)

Заранее спасибо за любую помощь или руководство.

Ответы [ 2 ]

7 голосов
/ 06 июня 2011

Эта проблема, вероятно, вызвана неправильным расположением дескрипторов, которые указывают OpenEJB, какие типы модулей доступны.

Для обеспечения правильного выбора тестовых классов убедитесь, что вы размещаете файл с именемapplication-client.xml в src/test/resources/META-INF со следующим содержимым:

<application-client/>

Это должно заставить OpenEJB сканировать и реагировать на наличие @LocalClient аннотаций.

0 голосов
/ 22 мая 2014

У меня была похожая проблема, когда я пытался протестировать материал в тестовом проекте под названием tomee-embedded-trial , и оказалось, что openejb игнорирует материал, называемый tomee -. *.

Я исправил это, указав следующие системные свойства: openejb.deployments.classpath.include=".*-trial.*" openejb.deployments.package.include=".*-trial.*"

...