2009-05-21 28 views
4

我有一個服務器應用程序,它由多個OSGi包,一些我的,一些第三方組成。其中一個軟件包提供了一個使用Struts的Web前端。必要的Struts庫位於Web前端包內。Struts 2是否可用作OSGi包?

現在我想添加第二個包,它提供了另一個Web前端,具有不同的依賴關係和非常不同的用例。我也想爲這個捆綁包使用Struts,但是我不想把這些庫放到兩個捆綁包中。

使用OSGi,將Struts庫分離到一個自己的捆綁包中並將其用於我的捆綁包中應該沒有問題。但是,我找不到以這種方式打包的Struts。

一些快速的谷歌搜索和看看the Struts homepage沒有產生任何東西。我可以找到一個Struts插件來在Struts中運行OSGi容器,但這不是我想要的。

回答

5

看看http://repo2.maven.org/maven2/org/apache/struts/struts2-core/2.1.6/上的當前struts包。例如,如果你下載了struts2-core-2.1.6.jar,解壓縮它並看一下META-INF/MANIFEST.MF,你會發現它確實包含了OSGI頭文件(Import-Package,Export-包裝,Bundle- *):

C:\TMP\META-INF>more MANIFEST.MF 
Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Created-By: 1.5.0_10 (Sun Microsystems Inc.) 
Built-By: musachyb 
Build-Jdk: 1.5.0_10 
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt 
Import-Package: com.opensymphony.xwork2;version="2.1",com.opensymphon 
<SNIP> 
Bnd-LastModified: 1231185746365 
Export-Package: org.apache.struts2.views.xslt;uses:="javax.servlet.ht 
Bundle-Version: 2.1.6 
<SNIP> 
Bundle-Description: Apache Struts 2 
Bundle-Name: Struts 2 Core 
Bundle-DocURL: http://www.apache.org 
Bundle-ManifestVersion: 2 
Bundle-Vendor: Apache Software Foundation 
Bundle-SymbolicName: org.apache.struts.struts2-core 
Tool: Bnd-0.0.255 

不知道你如何去了解一個OSGi應用程序中使用它們 - 但在理論上可以ATLEAST引用它們和做「東西」! :)

+0

實際上,這意味着什麼是,Struts可以作爲OSGi包:) – 2009-08-05 19:15:42

+1

而且Spring存儲庫(www.springsource.com/repository)始終是尋找已經包裝在一起的常用Java庫的好地方正確的OSGi頭文件。 – SteveD 2009-08-09 13:52:38

-3

Struts是爲Servlet容器(分佈式組件架構)的框架。 oSGI也是一個分佈式組件架構。

我認爲你最好的選擇可能是看看oscar http service,並根據oscar的代碼,看看他們如何將oscar HttpService,上下文等映射到jetty servlet容器。然後移植struts框架以在嵌入式碼頭上運行。

+0

這種方法其實很複雜。 – 2009-08-05 19:14:40

0

使用Maven,從任何庫創建OSGi包都非常容易。由於Struts已經作爲中央Maven倉庫中的OSGi-Bundle提供(請參閱接受的答案),我將該解決方案放在單獨的question & answer後。