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. .. ..
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! !!
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.
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.
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.
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.
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();
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.
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.
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! !! !!
Ich habe eine Gradle-Aufgabe zum Erstellen erstellt, möchte aber auch eine Aufgabe hinzufügen, um Tomcat zu starten.
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! !!
Morgen ist @ yam0918.
Recommended Posts