[JAVA] Migration von der Eclipse-Serverfunktion (Tomcat) zum Einbetten von Tomcat

Es gibt Web-Apps, die vor langer Zeit in der Java 1.4-Ära erstellt wurden und immer noch aktiven Tomcat verwenden. Dies ist eine Geschichte, als Embed Tomcat zufällig in eine solche Webanwendungsentwicklungsumgebung eingeführt wurde. Detaillierte Einstellungsinformationen zur Einführung sind überall verteilt. Hier finden Sie eine kurze Beschreibung des Vorgangs. .. ..

Voraussetzungen

Was ist überhaupt passiert?

Das Eclipse Java-Projekt wurde beim Erstellen der Umgebung normalerweise nicht als dynamisches Serverprojekt erkannt

Alle Anwendungen und Servereinstellungen werden in Git im Eclipse-Projektformat gespeichert. Grundsätzlich sollte die Umgebungskonstruktion durch den Import des Projekts einschließlich der Einführung der Serverfunktion Tomcat fast abgeschlossen sein. (Die Mitglieder waren bisher damit einverstanden) Was ist dann der Unterschied zu den bisherigen Entwicklungsmitgliedern? .. ..

Die Entwicklungsmaschine ist ** Mac **!

Was ist das? Die Projektstruktur war höchstens so, dass sie nicht funktionieren würde, wenn die Umgebung auf Mac umgestellt würde! !!

Ziehen Sie eine Umstellung auf eine umweltunabhängige Methode in Betracht

Vorläufig habe ich die Ursachenuntersuchung aus folgenden Gründen vorzeitig aufgegeben

Migrieren Sie die gesamte Anwendung. .. .. ich will

Wie eingangs erwähnt, weil es sich um eine Webanwendung aus alten Zeiten handelt und das Framework auch einzigartig ist, Besser noch, während ich die Illusion habe, dass es in Ordnung wäre, wenn ich zu Spring (Boot) wechseln würde Ich kam jedoch zu einer Methode wie einer Angelegenheit, die sich auf den Rahmen der aktuellen Generation bezieht.

Wechseln Sie zu Tomcat einbetten

Apropos Java: Wenn es in Bytecode umgewandelt wird, hängt es nicht von der Umgebung ab! Natürlich ist Tomcat keine Ausnahme. Versuchen Sie also, nicht so stark wie möglich vom Betriebssystem oder der IDE abhängig zu sein. Ich habe geschworen, zu Embed Tomcat zu wechseln.

Während des Übergangs geleistete Arbeit

Installation des erforderlichen Glases

Alle erforderlichen Jars werden manuell in den Erstellungspfad eingefügt, da es sich um ein Projektformat ohne Abhängigkeiten oder Mist handelt. Laden Sie das unten stehende Glas herunter und fügen Sie es Ihrem Erstellungspfad hinzu.

Tomcat Launcher erstellen Hauptmethode

LaunchEmbedTomcat.java


	public static void main(String[] args) throws Exception {

		Tomcat tomcat = new Tomcat();

		StandardContext ctx = (StandardContext) tomcat.addWebapp("/hogecontext",
				Paths.get("WebContent/").toAbsolutePath().toString());

		WebResourceRoot resources = new StandardRoot(ctx);
		DirResourceSet dirSet = new DirResourceSet();
		dirSet.setBase(Paths.get("build/classes").toAbsolutePath().toString());
		dirSet.setWebAppMount("/WEB-INF/classes");

		resources.addPreResources(dirSet);

		ctx.setResources(resources);

		tomcat.getService().addConnector(createAJPConnector());

		ctx.getNamingResources().addResource(createDBContext());

		tomcat.start();
		tomcat.getServer().await();
	}


	static Connector createAJPConnector() {
		Connector ajpConnector = new Connector("AJP/1.3");
		ajpConnector.setPort(8009);
		return ajpConnector;
	}

	static ContextResource createDBContext() {
		ContextResource jdbcResource = new ContextResource();
		jdbcResource.setName("jdbc/hogedb");
		jdbcResource.setType(DataSource.class.getName());
		jdbcResource.setAuth("Container");
		jdbcResource.setProperty("factory", BasicDataSourceFactory.class.getName());
		jdbcResource.setProperty("driverClassName", org.postgresql.Driver.class.getName());
		jdbcResource.setProperty("url", "jdbc:postgresql://192.168.33.10:5432/hogedb");
		jdbcResource.setProperty("username", "user");
		jdbcResource.setProperty("password", "password");
		return jdbcResource;
	}

Ich werde nicht auf die Details eingehen, aber Sie benötigen "WebResourceRoot # addPreResources", damit das Verzeichnis der kompilierten Klassen so aussieht, als ob es sich unter WEB-INF von Embed Tomcat befindet.

Starten Sie Tomcat

Ausführung-> Beim Start mit einer Java-Anwendung wurde bestätigt, dass das in web.xml definierte "Load-on-Startup" nacheinander ausgeführt wurde. Ein Fehler ist aufgetreten, als ich dachte, dies sei ikeru!

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial

Bei der Prüfung scheint die JNDI-Ausgangsposition "java: comp / env" selbst nicht definiert zu sein. In der API-Referenz wurde es wie folgt geschrieben, sodass Embed es anscheinend manuell aktivieren musste. (Oder gibt es irgendwo in der normalen Serverfunktion eine Einstellung für die Aktivierung? Ich habe nicht so viel untersucht, es tut mir leid.)

Enables JNDI naming which is disabled by default.

Daher habe ich der Startmethode die folgende Zeile hinzugefügt.

LaunchEmbedTomcat.java


tomcat.enableNaming();

Starten Sie Tomcat erneut

Die folgende Anzeige erscheint auf der Konsole.

12 11, 2017 00:47:48 org.apache.coyote.AbstractProtocol start Information: Starten von ProtocolHandler ["ajp-nio-8009"]

Anscheinend fing es normal an. Wir konnten den normalen Betrieb der Anwendung durch Kommunikation über AJP bestätigen.

Eindrücke vom Versuch zu operieren

Es ist viel schneller als Tomcat, das über die Eclipse-Serverfunktion gestartet wurde. Ich habe nicht untersucht, was der Overhead ist, aber das Gefühl ist so leicht, dass ich es fühlen kann. Das war ein Glück.

Ob es tatsächlich auf dem Mac funktioniert

Eigentlich habe ich es noch nicht auf dem Mac ausprobiert (weil dieser Beitrag in Bezug auf Datum und Uhrzeit früher kam ...) Ich denke, es ist in Ordnung aufgrund der Eigenschaften von Java. Ich werde das Ergebnis zu einem späteren Zeitpunkt melden! !! es muss kein problem sein! → Es hat problemlos funktioniert! !! !!

Verbleibende Arbeit

Ich habe eine Gradle-Aufgabe zum Erstellen erstellt, möchte aber auch eine Aufgabe hinzufügen, um Tomcat zu starten.

Schließlich

Ich bin froh, dass ich auch nur eine Einstellung eliminieren konnte, die von der Umgebung abhängt. Allerdings kann ich meine Gefühle jetzt einfach nicht loswerden. Ich möchte so schnell wie möglich zu einem modernen Rahmen wechseln! !!

Nachtrag

Morgen ist @ yam0918.

Recommended Posts

Migration von der Eclipse-Serverfunktion (Tomcat) zum Einbetten von Tomcat
So starten Sie den lokalen Server von Tomcat ohne Eclipse
[Opensaml] NoClassDefFoundError tritt auf, wenn von Tomcat zu Weblogic gewechselt wird
Stoppen Sie das erneute Senden vom Client zum Server
Hinweise zur Migration von CircleCI 1.0 auf 2.0
Wechseln Sie von Eclipse zu VS Code
Verknüpfungsvergleich für diejenigen, die von Eclipse zu IntelliJ IDEA (Windows) migrieren
Stellen Sie mit Eclipse eine Verbindung von Java zu MySQL her
Änderungen bei der Migration von Spring Boot 1.5 auf Spring Boot 2.0
Von der Installation von Eclipse bis zur Ausführung von Java (PHP)
Änderungen bei der Migration von Spring Boot 2.0 zu Spring Boot 2.2
Vorsichtsmaßnahmen bei der Migration von VB6.0 auf JAVA
Migration von Eclipse zu IntelliJ (unterwegs)
Wenn Eclipse den Server nicht starten kann
Migrieren Sie von Java zu Server Side Kotlin + Spring-Boot
Minecraft BE Serverentwicklung von PHP nach Java
Der richtige Weg, um die Tomcat-Quelle in Eclipse zu sehen
So wechseln Sie Tomcat context.xml mit Eclipse WTP
So springen Sie von Eclipse Java zu einer SQL-Datei
So stellen Sie auf einem virtuellen Server eine Verbindung von Spring zu MySQL her (ungelöst)
[Eclipse] Zusammenfassung der Umgebungseinstellungen * Von Zeit zu Zeit aktualisiert
[Android] Hochladen von Bildern vom Terminal auf den Server