我有一個關於如何部署多個包含CDI實現和一個webapp的JAR的問題。在一個EAR中部署多個CDI JAR
這是我的罐結構
-------- ---------- ------------
| WAR | <-- | API Jar | <-- | Data Jar |
-------- ---------- ------------
^
|
--------------
| Common Jar | And many more implementations
--------------
戰爭本身是使用它們的API罐類定義web應用程序。 API jar僅包含接口,註釋,非邏輯類,限定符等...
API的實現存儲在不同的JAR中,按專題分割。因此,所有數據訪問/操作數據,安全,日誌記錄,通用等實現。此實現具有對API Jar和可能庫的依賴關係。所有軟件包都會溝通事件。
我們在每個實現和webapp中使用CDI。完整的配置僅在WAR中。
我想在一個EAR中部署所有東西。所以這是我使用的文件結構:
EAR
- META-INF/application.xml
- api.jar
- api classes, no beans.xml here
- common.jar
- api implementation for common project classes
- META-INF/beans.xml
- data.jar
- api implementation for data classes
- META-INF/beans.xml
- logging.jar
- api implementation for logging classes
- META-INF/beans.xml
- webapp.war
- classes
- (project classes which uses the api)
- META-INF
- services
- persistence.xml
- WEB-INF/beans.xml
- beans.xml
- web.xml
我的application.xml看起來是這樣的:
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
<display-name>test-ear</display-name>
<module>
<java>api-1.0.0.jar</java>
</module>
<module>
<java>common-package-1.0.0.jar</java>
</module>
<module>
<java>data-package-1.0.0.jar</java>
</module>
<module>
<java>logging-package-1.0.0.jar</java>
</module>
<module>
<web>
<web-uri>test-war-1.0.0.war</web-uri>
<context-root>/war</context-root>
</web>
</module>
</application>
我的問題是現在,認爲這是不工作的。 CDI容器抱怨缺少一些豆子。我搜索了谷歌有關的信息,發現包含beans.xml文件的jar文件被部署爲ejbModule,但是在這裏我需要爲所有東西創建一個ejb.jar。另一個結果表示,我只需要將所有依賴項添加到WEB-INF/lib中的WAR文件中。同樣的抱怨在這裏
我不能得到這個運行,並嘗試在這裏請求幫助。
作爲服務器我想使用websphere(也許tomee)。
編輯:Maven是用來組合所有文件。
非常感謝,如果有人能幫助我:)
把所有的依賴WAR文件裏並在classpath作品中引用它們。認爲昨天晚上,謝謝你驗證我。 – Jukkales 2013-04-12 07:08:29
我想你甚至可以讓他們進入'ear'根目錄並使用'.. \ foobar.jar'路徑引用它 – Gab 2013-04-12 07:29:20