Как настроить тесты JUnit для встраиваемых систем Glassfish EJBContainer + EclipseLink JPA? - PullRequest
0 голосов
/ 12 апреля 2011

Я пытаюсь использовать EJB 3.1 Embeddable EJBContainer на Glassfish 3.1 для тестирования интеграции моего EJB.Есть проблема с загрузкой классов, которую я не могу понять.

Мои ejbs встроены в dum-ejb.jar.Они используют EclipseLink JPA.Я также создаю EJB-клиент jar dum-ejb-client.jar, пытаясь бороться с проблемами загрузки классов.Клиентский jar содержит интерфейсы EJB и классы сущностей (которые обычно являются параметрами или возвращаемыми значениями).Клиентский jar также содержит множество ненужных классов, которые можно было бы отбросить (но я не понимаю, как это решило бы проблему).

Проблема в том, что, поскольку EclipseLink выполняет переплетение байт-кода с классами Entity, Entityклассы не должны находиться в пути к классам при запуске тестов junit: http://www.java.net/forum/topic/glassfish/glassfish/embedded-glassfish-and-weaving

Я могу сделать это и настроить classpath так, чтобы dum-ejb.jar не был включен.Если я использую EJBContainer, чтобы найти свой сервис как java.lang.Object и вызвать его методы с помощью отражения, тест сработает.Но, конечно, я не хочу писать свои тесты.

Типичный тест будет выглядеть так:

@Test
   public void testInEJBContainer() throws Exception {

       File ejbJarFile = new File("target/dum/dum-ejb.jar");

       Map props = new HashMap();
       props.put("org.glassfish.ejb.embedded.glassfish.instance.root",
               "target/classes/instance-root");
       props.put(EJBContainer.MODULES, new File[]{ejbJarFile});
       EJBContainer container = EJBContainer.createEJBContainer(props);

       CompanyService = (CompanyService)
container.getContext().lookup("java:global/dum/CompanyServiceImpl");
       log.info("result of findAll() " + service.findAll(false));
   }

Как я могу запустить тест, если интерфейс CompanyService и возвращенные классы сущностей компании не могут быть в пути к классам?

Даже если dum-ejb.jar не находится на пути к классам, а dum-ejb-client.jar - это, EclipseLink ткачество нарушается.

Разве это не совсем типичный вариант использования EJBContainerразве не должно быть простого решения этого вопроса?

1 Ответ

0 голосов
/ 21 апреля 2011

Оказывается, у меня возникли проблемы с загрузкой классов, поскольку я запускал EJBContainer из проекта maven ear.

Когда я запускаю его из самого проекта maven ejb, таких проблем нет, и EJBContainer прост в использовании.

...