Я пытался настроить свое приложение так, чтобы я мог выполнять модульное тестирование его EJB-компонентов весь день, но, похоже, я не могу решить эту действительно простую проблему.
У меня есть стандартное веб-приложение Maven, настроенное в NetBeans 6.9. Я автоматически сгенерировал модульный тест для одного из EJB-компонентов, но всякий раз, когда я запускаю его, я получаю сообщение об ошибке:
Testcase: initializationError(com.example.ExampleTest): Caused an ERROR
Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
Я исследовал это до смерти, и я почти уверен, что проблема в том, что мой pom в настоящее время указывает на банку, которая содержит только API
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Не а реализация, которую можно использовать для запуска тестов. Я почти уверен, что тест не работает в методе, отмеченном @BeforeClass, когда он пытается выполнить
container = EJBContainer.createEJBContainer();
Стандартное рекомендуемое решение - добавить артефакт glassfish-embedded-all в качестве первой зависимости проекта с областью тестирования.
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.0.1</version>
<scope>test</scope>
</dependency>
Я могу найти пакет Maven для этого артефакта здесь: http://download.java.net/maven/glassfish/, но Nexus не распознает этот каталог или какие-либо подкаталоги как репозитории Maven 2. Полагаю, я мог бы загрузить банку и вручную установить ее в Nexus, но это, похоже, опровергает точку зрения ВОЗ по установке Nexus.
Итак, есть ли репозиторий Maven, который Nexus сможет проиндексировать, чтобы получить артефакт glassfish-embedded-all? В нескольких сообщениях, которые я прочитал, упоминалось, что правильный артефакт, который сейчас нужно использовать, - это javax.ejb, но мне больше не удалось его найти.
Как вы, наверное, догадались, я новичок в модульном тестировании и довольно новичок в JEE6 в целом; Это вообще правильный способ модульного тестирования EJB-компонентов?