2016-10-03 4 views
0

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

@Singleton 
@Startup 
public MyClass { 

    @PostConstruct 
    public void init() { 
     System.out.println("I am in here"); 
    } 

} 

Вышеуказанный метод-инициатор работает и запускается правильно. Обратите внимание, что вышеприведенный модуль представляет собой банку.

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

<dependency> 
    <groupId>com.myModuleCommon</groupId> 
    <artifactId>moduleCommon</artifactId> 
    <version>1.0.0</version> 
</dependency> 

Я посмотрел на документации here и изучил этот StackOverflow question Тхо Я не уверен, если это является причиной, я не могу иметь модуль банка зависит от другого кувшина.

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

i.e В моем образце файла войны я могу видеть извлеченную зависимость в WEB-INF/lib. Однако в моем модуле jar в файле манифеста нет ничего, что означает, что эта зависимость используется. Возможно, это часть проблемы, где может быть альтернативный способ указать зависимость в модуле.

+0

Что это значит "используемый в качестве внешнего банку"? EJB будет работать только при развертывании в среде, поддерживающей EJB. Который является частью войны или уха в контейнере JEE. EDIT: о, подождите, он просто щелкнул. Вы имеете в виду, если вы упакуете его в отдельную банку и поставьте на войну, это не сработает. Но когда он развертывается как класс в WEB-INF/classes, он работает – Gimby

+0

@Gimby справа, поэтому, если я извлечу код aboce в отдельный проект и добавлю его как зависимость в моем модуле, он не будет выполнен. Однако, если я сохраню его как класс в коде модуля, он работает. – angryip

+1

Когда вы упаковываете в отдельную банку, есть ли баннер, фактически присутствующий в WEB-INF/lib при развертывании на сервере, и это ваш класс на самом деле внутри банки? (простейший ответ за неработающие вещи - это вещи, которые фактически не существуют физически). – Gimby

ответ

0

Основываясь на документации по этому вопросу, я считаю, что правильный ответ заключается в том, что зависимости модуля должны быть явно добавлены в файле MANIFEST или jboss-deplyment-structure.xml. Here is an article that shows how this can be done

Использование Maven т.е.:

<configuration> 
    <archive> 
     <manifestEntries> 
     <Dependencies>com.something.dependency</Dependencies> 
     </manifestEntries> 
    </archive> 
</configuration> 

Использование JBoss т.е. XML файл

<jboss-deployment-structure> 
    <deployment> 
     <dependencies> 
     <module name="com.something.dependency" /> 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure>