2016-04-08 11 views
0

ich context.xml in Tomcat haben:Konfiguration in WAR

<Resource name="datasource/sconfiguration" auth="Container" connectionString=... 

Und ich bin in der Lage mein Objekt erhalten gefüllt wie:

MyConfiguration sc = (MyConfiguration) envCtx.lookup("datasource/sconfiguration"); 

Jetzt möchte ich meine WAR in Glassfish 4.1 verwenden .. .und es scheint, dass es nicht funktioniert:

javax.naming.NamingException: Lookup failed for 'datasource/sconfiguration' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterpr .... 

Es scheint ziemlich seltsam, eine WAR für einen bestimmten App-Server zu haben. Wie kann ich diesen WAR für WAS gültig machen? Es scheint, dass Glassfish can use context.xml aber viele Leute sagen, dass es nicht kann.

Antwort

0

Verwaltungsmaterial gehört nicht zum Standard WAR. Um ehrlich zu sein, ist es immer der schwierigste Teil bei der Portierung zwischen Anwendungsservern.

In Tomcat können Sie JNDI-Datenquellen in der context.xml definieren, wie Sie gesehen haben. Ich habe Glassfish schon lange aufgegeben, aber ich weiß, dass es eine ziemlich vollständige Benutzeroberfläche gibt, um Datenquellen zu definieren. Andere Anwendungsserver wie WildFly haben sowohl eine Benutzeroberfläche als auch eine CLI, um Dinge wie Datenquellen zu definieren (und Glassfish könnte das auch haben).

Warum fragen Sie das? Weil jeder Anwendungsserver Bereiche wie das Datenbankverbindungs-Pooling erweitern kann. Tomcat hat kürzlich entschieden, Commons DBCP Pooling zugunsten eines internen Pools loszuwerden. Aufgrund dieser Unterschiede definiert jeder Anwendungsserver eine etwas andere Art, JDBC-Verbindungen und Datenquellen zu konfigurieren.

Um dies zu verwalten, benötigen Sie Setup-Skripts/vorkonfigurierte Konfigurationsdateien für jeden der Anwendungsserver, auf die Sie zielen möchten. Ein Endbenutzer muss das verwenden, was für seine Umgebung geeignet ist.

+0

Ich muss eine WAR-Datei erstellen, die in verschiedenen WAS ausgeführt werden kann, ohne meinen Code zu ändern. Ich verwende eine NoSql-Datenbank mit der Möglichkeit, verschiedene Datenquellen (einschließlich SQL) zu verwenden, also muss ich ein generisches Objekt definieren. Ich teste jetzt Glassfish und probierte das JNDI, aber es scheint etwas anders zu sein, es konnte java: comp/env nicht finden. Ich frage mich nur, ob es einen sauberen, standardmäßigen Weg in Java gibt, um meine Daten zu registrieren, so dass Tomcat es nicht lesen kann – user1156544

+0

Sie müssen Ihren Code nicht ändern, aber Sie müssen entweder Anweisungen oder ein Shell-Skript oder etwas Externes bereitstellen, um die Datenbankverbindung zu konfigurieren. Einige Anwendungsserver erfordern auch das Kopieren des JDBC-Treibers in ein bestimmtes Verzeichnis, sodass dies ebenfalls in Betracht gezogen wird. Ich fürchte, es ist kein reiner Download und Lauf. – stdunbar