2009-07-04 5 views
4

Ich habe zwei Tomcat Web-Anwendungen, die Informationen mit einem Singleton teilen müssen. Ich habe es bereits geschafft, indem ich die Jared-Klassen in das Tomcat-Common-Verzeichnis gestellt habe. Jede Webanwendung erhält dann dieselbe Kopie des Singletons. Was ich tun möchte, ist dieses Verhalten in Eclipse zu integrieren. Ich möchte, dass die allgemeinen Klassen ein einzelnes Projekt sind, das jedes Mal, wenn ich den Tomcat-Server in Eclipse starte, in den Tomcat Common Class Loader integriert wird. Jeder weiß, wie man Eclipse dafür konfiguriert?Konfigurieren Sie das Projekt in Eclipse, so dass es in der Tomcat "gemeinsame" Klassenlader

Antwort

1

Ich habe es geschafft zu arbeiten. Hier ist, was ich getan habe:

  • Erstellt ein common Projekt im Eclipse-Arbeitsbereich.
  • Die beiden Webanwendungen mit den Namen first und second erstellt, die sich das common-Projekt teilen sollten.
  • Wenn die Webanwendungen erstellt werden, wird ein Servers Projekt mit der Tomcat-Konfiguration erstellt.

  • Ändern Sie catalina.properties in das Projekt Server und fügen Sie die Zeile shared.loader=/path-to-workspace/common/bin hinzu.

Dies funktioniert perfekt für die Entwicklung. Jedes Mal, wenn ein neuer Build erstellt wird, ist alles synchron. Für die Bereitstellung müssen Sie das Projekt common in ein common.jar konvertieren und in ${catalina.home}/lib platzieren.

1

kann eine sein, die Möglichkeit zu extend the tomcat class loader, um sein könnte für die Klassenlader in other directories than WEB-INF/lib, dies zu suchen:

  • Erweiterung org.apache.catalina.loader.WebappClassLoader und überschreibt die findClassInternal Methode.

  • Konfigurieren von Tomcat zur Verwendung des erweiterten Classloaders.

    ...

Dann auf dem in Eclipse setzt Ihr gemeinsames Projekt, das Sie könnte:
Dies wird in der entsprechenden Webapp Konfigurationsdatei unter dem Tomcat conf/Catalina/hostname Pfad mit folgendem Elemente getan "Benötigte Projekte auf dem Build-Pfad", wodurch es Teil des Klassenpfads wird.

Das Ihre erweiterten Classloader bedeutet in der Lage sein muss, für andere classe aussehen:

  • entweder in einem festen vordefinierten Pfad
  • oder in einem vordefinierten Pfad innerhalb des Classpath.

Nicht getestet selbst, aber möglicherweise kann das Ihnen einen Anhaltspunkt zu diesem Thema geben.


Eine einfachere Lösung wird durch noselasd in den Kommentaren vorgeschlagen, unter Ausnutzung der GlobalNamingResources Component von Tomcat unter.

jedoch die FAQ does mentions:

Wenn Sie einen neuen Tomcat-Server in Eclipse, die neuen Server-Assistenten erstellen nimmt sie nicht sicher ist, das aktuelle Verhalten der Tomcat-Installation zu beeinflussen, dass dieser neue Server verwenden.

WTP kann das Verhalten des installierten Tomcat nicht beeinflussen, indem Tomcat mehrere Server-Instanzen von einer einzigen Installation aus ausführen kann. Daher ist die Standardkonfiguration für jeden neuen Tomcat-Server, den Sie erstellen, eine neue Server-Instanz der Tomcat-Installation, die der Tomcat-Laufzeit zugeordnet ist, die im Assistenten ausgewählt wurde.
Wenn Sie davon ausgehen, dass der neue Tomcat-Server in Eclipse dieselbe Instanz ausführt wie die Standard-Batchdateien in Ihrer Tomcat-Installation, werden Sie wahrscheinlich überrascht sein, wenn sich der Tomcat-Server in Eclipse nicht wie erwartet verhält.

Die Tomcat-Serverkonfiguration kann so geändert werden, dass sie dieselbe Instanz wie Ihre Tomcat-Installation ausführt.

Hier finden Sie wie man modify the server.xml in WTP.

+0

Sollte nicht benötigt werden, um überhaupt so beteiligt zu sein. Tomcat verfügt über serverweite Einstellungen und Sie können Ihre eigenen globalen Ressourcen in server.xml definieren, die für alle Webapps freigegeben werden können. http://tomcat.apache.org/tomcat-5.5-doc/config/globalresources.html Sie können Ihre eigenen Klassen anstelle von Integer verwenden, wie im obigen Beispiel. Aber ich weiß nicht, wie man mit server.xml und dem globalen Verzeichnis lib/in Eclipse herumspielt. – nos

Verwandte Themen