2015-10-26 3 views
2

Это то, что я хотел бы достичь:Базовое развертывание уха пакет в JBoss

  • 1 ушного пакет: all.ear
  • Ухо-пакет содержит две войны (A.war, B. война в корне уха)
  • ухо-пакет содержит 1 самодельный банку C и много баночек третьих лиц (в соответствии с APP-INF \ Lib)

Этот пакет должен быть развернут на JBoss WildFly 8.2.1

Я использую плагин уха maven (maven-ear-plug-in, версия 2.10.1). Моя конфигурация в ПОМ выглядит следующим образом (это «parent'-проект, который объединяет в себе три других проектов):

<configuration> 
    <finalName>All</finalName> 
    <defaultLibBundleDir>APP-INF/lib</defaultLibBundleDir> 
    <includeLibInApplicationXml>true</includeLibInApplicationXml> 
    <version>6</version> 
    <displayName>All</displayName> 
    <modules> 
     <jarModule> 
      <groupId>project</groupId> 
      <artifactId>C</artifactId> 
      <bundleFileName>C.jar</bundleFileName> 
      <uri>APP-INF/lib/C.jar</uri> 
      <bundleDir>APP-INF/lib</bundleDir> 
     </jarModule> 
     <webModule> 
      <groupId>project</groupId> 
      <artifactId>A</artifactId> 
      <uri>A.war</uri> 
      <bundleFileName>A.war</bundleFileName> 
      <contextRoot>/a</contextRoot> 
      <bundleDir>/</bundleDir> 
     </webModule> 
     <webModule> 
      <groupId>project</groupId> 
      <artifactId>B</artifactId> 
      <uri>B.war</uri> 
      <bundleFileName>B.war</bundleFileName> 
      <contextRoot>/b</contextRoot> 
      <bundleDir>/</bundleDir> 
     </webModule> 
    </modules> 
    <archive> 
     <manifestEntries> 
      <Implementation-Version>1.0</Implementation-Version> 
     </manifestEntries> 
    </archive> 
</configuration> 

Мои META.INF/Application.xml файл уборные, как это:

<?xml version="1.0" encoding="UTF-8"?> 
<application xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="6" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_6.xsd"> 
    <display-name>All</display-name> 
    <initialize-in-order>true</initialize-in-order> 
    <module> 
     <java>APP-INF/lib/C.jar</java> 
    </module> 
    <module> 
     <web> 
      <web-uri>B.war</web-uri> 
      <context-root>b</context-root> 
     </web> 
    </module> 
    <module> 
     <web> 
      <web-uri>A.war</web-uri> 
      <context-root>a</context-root> 
     </web> 
    </module> 
    <library-directory>APP-INF/lib</library-directory> 
</application> 

Ухо пакет изготовлен. Все сторонние банки находятся под APP-INF/lib, но C.jar находится в корневом каталоге.

Я возился много и получил различные ошибки при попытке загрузить пакет на JBoss:

Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS016703: Module may not be a child of the EAR's library directory. Library directory: APP-INF/lib, module file name: APP-INF/lib/[SomeThirthPartyLib].jar" 

Когда я поместил каждую библиотеку под корнем (не использовать APP-INF), я получил ClassNotFoundError для B.war (не может найти классы из C.jar).

Я уже пытался добавить теги jboss к плагину maven-ear-плагинов (конфигурации), но они не поддерживаются JBoss 8+.

Я хочу пакет .ear, который может быть развернут в JBoss и содержит 2 войны и 1 банку, на которые ссылаются обе войны.

Что мне не хватает? (конкретные настройки конфигурации манифеста для конкретных настроек pom.xml для настроек A, B или C? JBoss? ...?)

+0

Что у вас внутри C.jar? Если это всего лишь утилита jar (только pojos внутри), ее следует поместить в папку lib .. и для этого не вставляйте C в качестве ушного модуля, это должно быть зависимость от войн. – mendieta

+0

C ,jar содержит бизнес-объекты и объекты доступа к данным. Некоторые из них являются одиночными и имеют кеш. Вот почему у меня может быть только один экземпляр (иначе будет дублированный кеш). Это зависимость от обеих войн с предоставленной областью. –

+0

Если у C.jar есть синглтоны и бизнес-объекты, тогда нормально находиться в корне уха .. почему вы пытаетесь поместить его в папку lib? Если вы развертываете A, B и C в корневом каталоге и все остальные банки в папке lib, то какая ошибка развертывания? – mendieta

ответ

0

В соответствии со спецификациями JAVA EE контейнер не будет сканировать дескрипторы развертывания любой банки, которая включена в библиотечном каталоге уха.

Но то, что я предполагаю, что вы хотите сделать, это получить доступ от WAR к тем ejb, которые вы указали в C.jar. Опять же, согласно спецификациям, любой ejb-jar, сидящий в ухе, виден любому другому модулю:

Компоненты в веб-контейнере могут иметь доступ к следующим классам и ресурсам. Портативные приложения не должны зависеть от наличия или отсутствия доступа к этим классам или ресурсам.
• Классы и ресурсы, доступные для любых других веб-модулей, включенных в один и тот же файл уха, как описано выше.
• Содержимое любых файлов баннеров EJB, входящих в один и тот же файл уха.

Итак, просто поместите C.jar в другое место, кроме каталога lib, и все в порядке.

Смежные вопросы