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
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
undsecond
erstellt, die sich dascommon
-Projekt teilen sollten. - Ändern Sie
catalina.properties
in das Projekt Server und fügen Sie die Zeileshared.loader=/path-to-workspace/common/bin
hinzu.
Wenn die Webanwendungen erstellt werden, wird ein Servers
Projekt mit der Tomcat-Konfiguration erstellt.
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.
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 diefindClassInternal
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.
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