2016-10-03 25 views
0

我已經做了一個jboss模塊來提供一些基本代碼。我想在將此模塊部署到jboss時註銷一些數據。我可以通過創建一個簡單的類來實現此目的,如下所示:JBoss模塊可以依靠一個罐子

@Singleton 
@Startup 
public MyClass { 

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

} 

上述啓動方法正常工作,並且正確啓動。請注意,上面的模塊是一個罐子。

但是,當我將上述代碼提取到其自己的項目中,並將編譯後的jar作爲依賴項添加到同一模塊時,代碼從未執行。相反,如果我將它添加到可部署的戰爭中,它會按預期工作。即Maven的依賴

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

我看過的文檔here和芹苴我不確定如果這是我不能有一個罐子模塊的原因依賴於另一個罐子檢查這個計算器question

我的問題是,爲什麼我的提取的代碼在啓動期間(即上面的類)在被用作模塊的依賴時不會被調用,而是作爲內部類或作爲可部署戰中的依賴項使用?

即在我的示例war文件中,我可以在WEB-INF/lib下看到提取的依賴項。但是,在我的jar模塊中,Manifest文件中沒有任何內容表示正在使用此依賴項。也許這是問題的一部分,在這裏可能有一些替代方法來指定模塊中的依賴關係。

+0

這是什麼意思, 「作爲一個外部JAR」? EJB只在部署在支持EJB的環境中時才能工作。這是JEE容器的戰爭或耳朵的一部分。編輯:哦,等待,它只是點擊。你的意思是,如果你把它包裝在一個單獨的罐子裏,並把它放在戰爭中,它將無法工作。但是當在WEB-INF/classes中作爲一個類部署時,它的作用就是 – Gimby

+0

@Gimby,所以如果我將aboce代碼提取到一個單獨的項目中,並將它作爲依賴項添加到我的模塊中,它不會被執行。但是,如果我將它作爲模塊代碼中的類保存,它就可以工作。 – angryip

+1

當你在一個單獨的jar包中打包時,在部署到服務器時實際存在於WEB-INF/lib中的jar是否在你的jar中? (對於不能正常工作的最簡單的答案是事實上並不存在的東西)。 – 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>