2013-04-11 100 views
3

我有一個關於如何部署多個包含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是用來組合所有文件。

非常感謝,如果有人能幫助我:)

回答

0

你嘗試引用您的罐子在戰爭中的表現?

喜歡的東西Class-Path: api.jar data.jar logging.jar common.jar

+0

把所有的依賴WAR文件裏並在classpath作品中引用它們。認爲昨天晚上,謝謝你驗證我。 – Jukkales 2013-04-12 07:08:29

+0

我想你甚至可以讓他們進入'ear'根目錄並使用'.. \ foobar.jar'路徑引用它 – Gab 2013-04-12 07:29:20