WebLogic Server 9.0(WLS9)引入 J2EE Shared Libraries,允許一個 J2EE 模組(EJB、Web、EAR)被多個企業應用共享。同時支援 J2EE 1.4 標準的 Optional Packages(JAR 級共享)。兩者解決「公共程式庫重複打包、版本衝突、升級困難」的經典難題。
在模組 META-INF/MANIFEST.MF 宣告共享身分:
Extension-Name: myLib
Specification-Version: 1.0
Implementation-Version: 1.0
major.minor.micro 或字串格式。引用端可指定最低版本、精確版本。亦可透過 weblogic.Deployer 部署參數 -library、-libspecver、-libimplver 設定,無需修改 JAR。
| 特性 | J2EE Libraries | Optional Packages |
|---|---|---|
| 封裝形式 | EAR、WAR、EJB JAR、RAR、資源適配器 | 純 JAR 檔 |
| 部署描述符 | 保留並生效 | 忽略(視為普通類別庫) |
| 引用者範圍 | 僅企業應用(EAR) | 任意 J2EE 模組(EAR/WAR/EJB/RAR) |
| 引用方式 | weblogic-application.xml <library-ref> | MANIFEST.MF Extension-List |
| 巢狀引用 | 不支援 Library 引用 Library | 支援 Optional Package 引用 Optional Package |
| URI 來源 | 部署名(建議打包成 EAR 避免衝突) | Extension-Name |
domain/lib,啟動自動載入系統 ClassLoader,最輕量。Extension-Name,避免部署名變更導致引用失效。context-root 衝突,可在引用端 weblogic-application.xml 覆蓋。J2EEShared/
├── SharedLibraryEAR/ # 被共享的 Library
│ ├── LoanEJB.jar # EJB 模組
│ ├── META-INF/
│ │ ├── application.xml
│ │ ├── weblogic-application.xml
│ │ └── MANIFEST.MF # Extension-Name: myLib
│ └── APP-INF/ # 應用內部第三方 JAR
└── CallingLibraryEAR/ # 引用端企業應用
├── LoanApproval.war # Web 模組(JSP 呼叫 EJB)
├── META-INF/
│ ├── application.xml
│ └── weblogic-application.xml # 指向 myLib
└── APP-INF/
java weblogic.appc SharedLibraryEAR 預編譯驗證。java weblogic.Deployer -deploy -library SharedLibraryEAR。Console 顯示 myLib(1.0) 狀態 Installed。java weblogic.appc -library SharedLibraryEAR CallingLibraryEAR。-library 讓 appc 解析 Library 類別解決 JSP 編譯依賴。java weblogic.Deployer -deploy CallingLibraryEAR。狀態 Active。https://localhost:7001/LoanApproval 顯示 EJB 回傳字串。移除順序:先移除所有引用應用 → Activate Changes → Lock → 移除 Library。
OptionalPackages/
├── SimpappOptionalPackage/ # 共享 JAR
│ ├── simpapp.jar # 含 MANIFEST.MF (Extension-Name: myOptionalPackage)
│ └── META-INF/MANIFEST.MF
└── SimpappEAR/ # 引用端
├── SimpappWebApp.war
├── META-INF/
│ ├── application.xml
│ └── MANIFEST.MF # Extension-List: simpapp + 版本屬性
└── APP-INF/
java weblogic.appc -classpath SimpappOptionalPackage/simpapp.jar SimpappEAR(用 -classpath 而非 -library)。java weblogic.Deployer -deploy -library SimpappOptionalPackage/simpapp.jar。Extension-List: simpapp
simpapp-Extension-Name: myOptionalPackage
simpapp-Extension-Specification-Version: 0.9
WLS9 雙軌共享機制各有甜點:
善用三者組合,可構建清晰分層、版本可控、部署高效的企業級應用生態系統。