2009-06-30 4 views
6

Ich habe vier verschiedene Projekt, und ich verwende Weblogic, um meine Projekte zu implementieren. Es gibt mehrere Bibliotheken (JAR-Dateien), die für alle Projekte gemeinsam sind. Zur Zeit haben alle meine Projekte lib Verzeichnis und haben fast den gleichen Satz von Bibliotheken. Jetzt ist es möglich, dieses lib-Verzeichnis außerhalb von WAR-Dateien zu haben und auf sie zuzugreifen.Wie verwende ich gemeinsame Bibliotheken für mehrere Java-Web-Projekt

Antwort

8

Widerstehen Sie der Versuchung, die JAR-Dateien in den "freigegebenen" Ordner Ihres Containers zu stellen. Es ist besser, die JAR-Dateien dort zu behalten, wo sie sich gerade befinden. Es mag eine gute Idee sein, jetzt einen freigegebenen Ordner zu verwenden, aber in Zukunft müssen Sie möglicherweise eine Anwendung bereitstellen, die eine gemeinsam genutzte Bibliothek, aber eine andere Version benötigt.

Das gesagt, habe ich keine Erfahrung mit WebLogic. In Tomcat gibt es einen freigegebenen Ordner mit Bibliotheken für alle bereitgestellten Anwendungen. Es ist keine gute Idee, dies zu verwenden. Wenn WebLogic für die Verwendung eines freigegebenen Ordners für eine Reihe von Anwendungen (und nicht für alle bereitgestellten Anwendungen) konfiguriert werden kann, können Sie dies tun.

+1

Guter Rat! Es gibt sehr wenig Aufwand für eine zusätzliche Kopie einer JAR-Datei, wobei es zweifelhaft sein muss, zwei Versionen einer gemeinsamen Bibliothek vom gleichen Ort aus zu täuschen oder alle Ihre Apps gleichzeitig auf eine neue Version zu aktualisieren . –

+0

Eigentlich nach dem Kompilieren ist die Projektgröße um 1,5 MB (ohne libs) und 20 MB (mit libs) –

+0

Sie können den freigegebenen Ordner in Ihrem Entwicklungscomputer verwenden, um die Bereitstellung schneller zu machen. In einer Produktionsumgebung spielt das keine große Rolle, also bevorzugen Sie eine große WAR-Datei mit allen darin enthaltenen Gläsern. Wenn Sie dies tun, müssen Sie zweimal testen (sowohl für kleine als auch für große WAR). – kgiannakakis

0

Nun, zunächst einmal können Sie Ihre libs alle an den gleichen Ort und lassen Sie Ihre Build-Prozess die benötigten importieren.

Hat für die Bereitstellung der neue Weblogic 10 hat einen lib-Ordner in jeder Domäne, wo Sie freigegebene Bibliotheken platzieren können. Ich glaube nicht, dass das vor Weblogic 10

+1

In der Version 9 gibt es eine gemeinsame Bibliotheksunterstützung: http://e-docs.bea.com/wls/docs92/programming/libraries.html – McDowell

-1

möglich ist. Ich verwende derzeit einen anderen Ansatz.

  1. Erstellen Sie einen zentralen Repository-Ordner und legen Sie alle allgemeinen Bibliotheken dort ein.
  2. In jedem Projekt können Sie einen Verweis auf alle benötigten Bibliotheken erstellen. In Subversion funktioniert es mit externals

Jedesmal wird die lokale Arbeitskopie aktualisiert werden die Externen aktualisiert, so dass Sie nur auf den zentralen Ordner müssen begehen und es ist automatisch für alle Projekte verteilt.

3

Möchten Sie dies tun? Wenn Sie nicht für den Bereitstellungsraum festsitzen, würde ich (vielleicht) davon abraten.

Warum? Im Moment haben Sie 4 Lösungen, die diese Bibliotheken verlassen. Wenn Sie eine der Bibliotheken aktualisieren müssen (wenn Sie beispielsweise einen Fehler entdecken oder wenn Sie eine neue Funktion benötigen), müssen Sie Kompatibilität und Funktionalität für alle 4 Lösungen testen. Wenn jede Lösung über eigene Libs verfügt, sind sie sandboxed und Sie müssen nicht alle 4 in Schritt verschieben.

Beachten Sie, dass dies alles davon abhängt, wie einfach es ist, Ihre Lösungen regressiv zu testen. Sie können es leicht finden, in diesem Fall ist die Verwendung der gleichen Menge von Bibliotheken möglich.

2

Tun Sie das nicht.

Die ganze Idee der WAR-Dateien ist, dass sie eigenständige Einheiten sind. Dies erleichtert die Bereitstellung erheblich.

Zusätzlich zu den möglichen Versionskonflikten, auf die andere hingewiesen haben, kann das Einfügen von JAR-Dateien in/shared sehr verschachtelte Auswirkungen auf die Klassensichtbarkeit haben. Sie befinden sich in einem separaten Klassenlader und können die Klassen in der WAR-Datei nicht sehen. Wenn Sie Bibliotheken verwenden, die auf Class.forName() basieren, um zu funktionieren (und es gibt viele), könnte dies sehr schmerzhaft werden.

Wenn Sie wirklich, wirklich nicht den zusätzlichen Speicherplatz und Speicher leisten können, schauen Sie sich OSGi oder Spring DM an.Sie haben dieses Problem gelöst, aber auf Kosten der erhöhten Komplexität.

1

Setzen Sie alle freigegebenen JAR-Dateien in den Ordner common \ lib von weblogic. common \ lib ist für alle bereitgestellten Apps verfügbar.

0

Sie können die Gläser in ihre eigene EAR-Datei stellen und als gemeinsam genutzte Bibliothek bereitstellen.

Sie können die Kriege auch in ein Ohr legen und die gemeinsamen Gläser zu APP-INF/lib hinzufügen. Dies ist eine Weblogic-Erweiterung von J2EE, daher wird es auf anderen Servern nicht funktionieren.