2009-05-21 24 views
4

Ich habe eine Server-Anwendung, die aus mehreren OSGi-Bundles besteht, einige meins, einige Drittanbieter. Eines der Bundles bietet ein Web-Frontend mit Struts. Die erforderlichen Struts-Bibliotheken befinden sich im Web-Frontend-Bundle.Ist Struts 2 als OSGi-Bundle verfügbar?

Jetzt möchte ich ein zweites Paket hinzufügen, das ein anderes Web-Frontend mit verschiedenen Abhängigkeiten und einem sehr unterschiedlichen Anwendungsfall bietet. Ich möchte Struts auch für dieses Bundle verwenden, aber ich möchte nicht die gleichen Bibliotheken in zwei Bundles einfügen.

Mit OSGi sollte es kein Problem sein, die Struts-Bibliotheken in einem eigenen Paket zu trennen und das aus meinen beiden Bundles zu verwenden. Allerdings konnte ich Struts so nicht finden.

Einige schnelle googeln und ein Blick auf the Struts homepage ergab nichts. Ich könnte ein Plugin für Struts finden, um einen OSGi-Container innerhalb von Struts laufen zu lassen, aber das ist nicht was ich will.

Antwort

5

Werfen Sie einen Blick auf die aktuellen Struts Bundles auf .

Wenn Sie zum Beispiel struts2-core-2.1.6.jar herunterladen, extrahieren Sie es und werfen Sie einen Blick auf META-INF/MANIFEST.MF Sie sehen, dass es OSGI-Header enthält (Import-Paket, Export- Paket, 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 

Keine Ahnung, wie man sie in einem OSGi-App geht über die Verwendung - aber in der Theorie Sie sie atleast verweisen kann und tun „stuff“ !! :)

+0

Eigentlich bedeutet das ja, Struts ist als OSGi - Bundle erhältlich :) –

+1

Und das Spring - Repository (www.springsource.com/repository) ist immer ein guter Ort, um nach gängigen Java - Bibliotheken zu suchen, die bereits mit dem Korrekte OSGi-Header. – SteveD

-3

Struts ein Rahmen für den Servlet-Container ist (verteilte Komponentenarchitektur). oSGI ist auch eine verteilte Komponentenarchitektur.

Ich denke, Ihre beste Wette ist, sich oscar http service anzusehen und basierend auf Oscar-Code zu sehen, wie sie den Oscar-HttpService, den Kontext usw. auf den Anlegestellen-Servlet-Container abgebildet haben. Und dann portiere das Struts-Framework, um auf dem eingebetteten Steg zu laufen.

+0

Dieser Ansatz ist eigentlich sehr kompliziert. –

-1

einen Blick auf diese Links nehmen, ich hoffe, dass Sie sie ein wenig hilfreich don brown's web blog

und lesen Sie diesen Artikel finden es java lobby: Modularizing existing web applications with OSGi

gut hilfreich sein, ich glaube, Sie das machen müsste Aufgabe selbst übernehmen.

+1

Entschuldigung, in beiden Artikeln geht es darum, umgekehrt einen OSGi-Container in einer Webanwendung auszuführen.Ich habe eine serverseitige OSGi-Anwendung mit einem Web-Frontend, das Struts verwendet, und jetzt möchte ich ein zweites, anderes Frontend hinzufügen, das auch Struts verwendet, ohne die gleichen Struts-JARs in beide Bundles zu setzen. –

0

Mit Maven ist es sehr einfach, ein OSGi-Paket aus einer beliebigen Bibliothek zu erstellen. Da Struts bereits als OSGi-Bundle im zentralen Maven-Repository verfügbar ist (siehe angenommene Antwort), setze ich diese Lösung in einen separaten Post-question & answer Post.