簡體   English   中英

為什么我們必須在JBOSS 8(wildfly)的清單上聲明依賴?

[英]Why we have to declare dependencies on manifest of JBOSS 8 (wildfly)?

給出以下EAR:

  • 我-app.ear
    • my-ejb .jar
    • 我-webapp.war
    • LIB
      • my-lib .jar

my-ejb需要oracle庫與oracle空間一起工作才能構造幾何並存儲數據。 JBOSS 8(wildfly)正確加載了oracle的模塊。

當我啟動應用程序時,我收到了ClassNotFoundException oracle.sql.STRUCT

好的我在my-ejb META-INF/manifest.mf上添加了oracle驅動程序ojdbc6.jar的依賴項。

Class-Path: ojdbc6.jar
Dependencies: oracle.sql 

當我啟動應用程序時,我收到了ClassNotFoundException oracle.sql.StructDescriptor 我知道當我從結果集讀取數據時,結果集中的對象是oracle.sql.STRUCT類的實例,但oracle.sql.StructDescriptor在同一個包中。

好的,我在my-lib META-INF/manifest.mf上添加了oracle驅動程序ojdbc6.jar的相同依賴項。

它的工作原理!

我的問題是

  • 哪個是表現在JBOSS 8上的作用?
  • 為什么在oracle weblogic上我不需要在manifest.mf上添加這些依賴項?

Santosh給出了正確的答案,但讓我澄清一些關於weblogic vs jboss的問題。

JBOSS和WebLogic具有不同的classoader機制。 讓我澄清一下:

為什么要表現?

Java-Oracle回復 :您可能需要從JAR文件中引用其他JAR文件中的類。

2.為什么在EAR / WAR應用程序上顯示?

Oracle Weblogic回復 :WebLogic Server支持可選包,如Java EE 5.0規范,第8.2節“可選包支持”中所述,其中版本控制在可選包版本控制中描述。 可選包提供與Java EE庫類似的功能,允許您在多個應用程序之間輕松共享單個JAR文件。 與Java EE庫一樣,必須首先通過將關聯的JAR文件作為可選包部署,向WebLogic Server注冊可選包。 注冊包后,您可以在其清單文件中部署引用該包的Java EE模塊。

可選包與Java EE庫不同,因為可以從任何Java EE模塊(EAR,JAR,WAR或RAR存檔)或展開的存檔目錄引用可選包。 只能從有效的企業應用程序引用Java EE庫。

[...]

任何Java EE應用程序或模塊都可以引用可選包(使用META-INF / MANIFEST.MF),而只有Enterprise Applications和Web應用程序可以引用共享Java EE庫(使用weblogic-application.xml或weblogic.xml)

3.那么為什么我們不得聲明java-ee-api.jar,jsf,jsp,...

Jboss回復 :下表列出了作為依賴項自動添加到部署的模塊以及觸發依賴項的條件。

Implicit_Module_Dependencies

4.並非所有模塊都由JBOSS加載?

Jboss回復 :本章將討論打包為jar的應用程序如何聲明它們依賴於一個或多個模塊:

Dependencies: oracle.sql, another.module.with.version:1.0

清單模塊信息

4.1或者定義jboss-deployment-structure.xml

<jboss-deployment-structure>

   <deployment>

      <dependencies>
         <module name="oracle.sql" export="TRUE" />
      </dependencies>

   </deployment>

</jboss-deployment-structure>

向部署添加顯式模塊依賴關系

4.2與maven

<plugins>

   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <configuration>
         <archive>
            <manifestEntries>
               <Dependencies>org.javassist, org.apache.velocity</Dependencies>
            </manifestEntries>
         </archive>
      </configuration>
   </plugin> 

</plugins>

請參閱: 使用Maven生成MANIFESTMF條目

請參閱: 如何使用maven在MANIFEST.MF中為JBoss AS 7生成模塊依賴項?

7.為什么我們之前沒有收到這些重要信息?

使用新的組織模型,JBOSS 7/8放棄了着名的類加載層次結構,轉而使用基於模塊化單元( JBoss Modules Project )的簡單模型。 架構模塊的引入(除了即將在JDK中引入的內容,此時由於OSGi等外部項目而流行起來)實際上擴展了用於Java EE應用程序打包的模型。 然后,模塊可以是庫,類的集合,或者更一般地說是與單個類加載器相關聯的資源的集合:因此,與過去不同的是,在一組類的層次結構組織下收集的類加載器,這里的觀點完全相反。

請參閱: WildFly中的類加載

回答你的問題:

  • 哪個是表現在JBOSS 8上的作用?

每當創建jar存檔時,都會自動創建清單。 沒有與JBOSS 8相關的特定角色,但是它的一般用途。 在特殊情況下,如果jar說file1.jar依賴於屬於某些其他jar的文件,例如file2.jar文件,則應該在加載file1.jar時加載這些jar。 現在的訣竅是,每當一個jar文件由類加載器加載時,manifest就是告訴類加載器加載這個jar需要的其他jar的方法。 檢查此鏈接 )這是清單中缺少ojdbc6.jar時代碼不起作用的原因。

  • 為什么在oracle weblogic上我不需要在manifest.mf上添加這些依賴項?

好吧,這是因為在oracle weblogic中, ojdbc6.jar與weblogic服務器捆綁在一起,並且在服務器啟動時已經加載。 請注意,即使您在應用程序中捆綁了ojdbc6.jar ,也不會使用它。 以下是相關文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM