Статьи

Arquillian с NetBeans, WebLogic 12c, JPA и источником данных MySQL

Вы, вероятно, следили за моими сообщениями о тестировании более сложных сценариев со встроенным GlassFish ( Часть I / Часть II ).

Следующим в моем списке действий было заставить эту установку работать с последней версией WebLogic 12c.







Начиная

Следуйте инструкциям в первых двух постах. Есть только несколько вещей, которые вы должны изменить, чтобы это работало. Очевидно, вам нужен WebLogic 12c. Grep копию со страницы загрузки OTN . Прочтите и примите лицензию и загрузите либо установщик ZIP, либо полнофункциональный установщик для вашей ОС. Арун Гупта имеет хороший пост о начале работы с установщиком ZIP . Это в основном о загрузке, распаковке, настройке, создании вашего домена. Предположим, у вас есть домен1 на месте. Обязательно скопируйте mysql-connector-java-5.1.6-bin.jar в domain1 / lib и запустите сервер, запустив startWebLogic.cmd / .sh в корневом каталоге domain1. Далее необходимо настроить соответствующий пул соединений. Вы также можете сделать это, используя магию WLST или новый плагин WebLogic Maven, но я предполагаю, что вы делаете это через консоль администратора. Перейдите в раздел Домен> Сервисы> Источники данных и создайте MySQL Datasource AuditLog с именем jndi «jdbc / auditlog». Убедитесь, что сервер работает во время выполнения ваших тестов!

Изменение образца веб-проекта
Теперь откройте pom.xml проекта sampleweb и удалите зависимость glassfish-embedded-all вместе с arquillian-glassfish-embedded-3.1 и javaee-api. Теперь добавьте контейнер wls-remote-12.1 и зависимости jboss-javaee-6.0:

01
02
03
04
05
06
07
08
09
10
11
12
13
<dependency>
           <groupId>org.jboss.arquillian.container</groupId>
           <artifactId>arquillian-wls-remote-12.1</artifactId>
           <version>1.0.0.Alpha2</version>
           <scope>test</scope>
 </dependency>
 <dependency>
           <groupId>org.jboss.spec</groupId>
           <artifactId>jboss-javaee-6.0</artifactId>
           <version>1.0.0.Final</version>
           <type>pom</type>
           <scope>provided</scope>
       </dependency>

Теперь откройте свой дескриптор arquillian.xml и измените настройки контейнера, чтобы использовать контейнер wls:

1
2
3
4
5
6
7
8
lt;container qualifier="wls" default="true">
        <configuration>
            <property name="adminUrl">t3://localhost:7001</property>
            <property name="adminUserName">weblogic1</property>
            <property name="adminPassword">weblogic1</property>
            <property name="target">AdminServer</property>
            <property name="wlsHome">X:\path\to\wlserver\</property>
        </configuration>

Убедитесь, что используете правильный целевой сервер и укажите правильный wlsHome. Щелкните правой кнопкой мыши AuditRepositoryServiceTest в NetBeans и запустите «Тестовый файл». Вы увидите, что удаленный контейнер выполняет некоторую работу:

22.01.2012 22:40:34 развертывание org.jboss.arquillian.container.wls.WebLogicDeployerClient
ИНФОРМАЦИЯ: Запуск weblogic.Deployer для развертывания тестового артефакта.
22.01.2012 22:40:46 org.jboss.arquillian.container.wls.WebLogicDeployerClient forkWebLogicDeployer
ИНФОРМАЦИЯ: weblogic.Deployer, похоже, успешно завершен.
22.01.2012 22:40:53 org.jboss.arquillian.container.wls.WebLogicDeployerClient undeploy
ИНФОРМАЦИЯ: Запуск weblogic.Deployer для удаления тестового артефакта.
22.01.2012 22:41:00 org.jboss.arquillian.container.wls.WebLogicDeployerClient forkWebLogicDeployer
ИНФОРМАЦИЯ: weblogic.Deployer, похоже, успешно завершен.

И тест идет зеленый! Если вы посмотрите на журнал домена, то увидите, что модуль test.war успешно развернут и не развернут.

Замечания и мысли
Глядя на то, что мы имеем с WebLogic 12c (особенно с новым плагином maven), все это кажется очень ручным. Что бы разработчик WebLogic сделал до этого в проекте на основе Maven? Он бы поместил файл weblogic.jar в свой локальный репозиторий и использовал бы его вместо любых зависимостей jboss-javaee-6.0 или javaee-api. Если вы попробуете это с контейнером Arquillian wls, вы увидите странные исключения, подобные следующим:

Класс загрузки: javax.transaction.SystemException
Исключение в потоке «основной» java.lang.ClassFormatError: Отсутствует код
атрибут в методе, который не является родным или абстрактным в файле класса
javax / транзакции / SystemException

Это в основном потому, что только wlfullclient.jar содержит все необходимые классы для удаленного управления через JMX. Волшебный weblogic.jar имеет несколько дополнительных записей пути к классам в своем манифесте, которые не могут быть разрешены, если вы поместите его в свой локальный репозиторий m2. Таким образом, у вас просто осталось два варианта. Используйте wlfullclient.jar ( посмотрите, как его собрать в документах ) для тестирования и weblogic.jar для своей разработки или придерживайтесь зависимости jboss-javaee-6.0 для разработки и тестирования (предоставляется область действия). Оба являются действительными альтернативами. Как вы можете видеть, контейнер WebLogic все еще не документирован в документации Arquillian . Вы можете найти более подробную документацию по проекту wls-container на github.
Загрузите проект simpleweb-wls.zip в качестве справки, чтобы начать работу.
Спасибо Vineet и Aslak за помощь!

Справка: Arquillian с NetBeans, WebLogic 12c, JPA и источником данных MySQL от нашего партнера по JCG Маркуса Эйзела (Markus Eisele) из блога Enterprise Software Development с Java .