Kontext.xml – Metawerx Java Wiki

Kontext.xml

Der Kontext.die XML-Datei ist eine optionale Datei, die ein <Context> -Tag (Kontextfragment) für eine einzelne Tomcat-Webanwendung enthält. Dies kann verwendet werden, um bestimmte Verhaltensweisen für Ihre Anwendung, JNDI-Ressourcen und andere Einstellungen zu definieren.

Der Kontext.xml-Datei wurde in Tomcat 5 eingeführt, um Kontexteinstellungen vom Server zu entfernen.xml-Datei.

Das Kontextfragment kann in Server eingebettet werden.xml, platziert im Ordner <CATALINA>/conf oder in jeder Anwendung im Ordner META-INF in einer Datei namens context .XML. Die META-INF-Methode wird bevorzugt, da dies bedeutet, dass Änderungen am Kontext keinen Neustart von Tomcat erfordern. Sie können Ihre Anwendung neu starten, indem Sie web ändern.xml, wenn automatisches Neuladen aktiv ist, oder manuelles Neuladen mit dem Tomcat-Manager.

Ihr Kontext.die XML-Datei sollte im Ordner META-INF Ihrer Anwendung als META-INF/context installiert werden.XML. Der Ordner META-INF befindet sich auf derselben Ebene wie WEB-INF (nicht darin).

index.jsp/WEB-INF web.xml /lib myjar.jar /classes myclass.class/META-INF context.xml

Überraschenderweise verwenden noch nicht viele Entwickler diese Datei in ihren Anwendungen, obwohl sie sehr nützlich ist. Wechsel zur Verwendung eines Kontexts.xml-Datei entfernt alle Abhängigkeiten vom Server.xml, wodurch die Anwendung viel portabler und einfacher zu implementieren ist.

Beispielkontext.xml-Datei

Diese Datei enthält eine JNDI-Ressource, die eine MySQL-Datenquelle und einen Sicherheitsbereich darstellt.

<?xml version="1.0" encoding="UTF-8"?><Context> <!-- Specify a JDBC datasource --> <Resource name="jdbc/mydatabase" auth="Container" type="javax.sql.DataSource" username="YOUR_USERNAME" password="YOUR_PASSWORD" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://mysql.metawerx.net:3306/YOUR_DATABASE_NAME?autoReconnect=true" validationQuery="select 1" maxActive="10" maxIdle="4"/> <!-- Specify the security realm and location of the users file <Realm className="org.apache.catalina.realm.MemoryRealm" pathname="/tomcat/webapps/ROOT/WEB-INF/users.xml" /> --></Context>

Zugriff auf die Datenquelle im obigen Beispiel

Auf die Datenquelle im obigen Beispiel kann in Ihrem Java-Code mit der folgenden Zeile zugegriffen werden:

// Get DataSourceContext ctx = new InitialContext();DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mydatabase");// Get Connection and StatementConnection c = ds.getConnection();Statement s = c.createStatement();

Zusätzliche Datenbanken können hinzugefügt werden, indem dem Kontext ein zusätzliches <Resource> -Element hinzugefügt wird.XML-Datei mit einem anderen Namen (z. B. jdbc / customerDatabase).

Zugriff auf den Sicherheitsbereich im obigen Beispiel

Der Sicherheitsbereich im obigen Beispiel erfordert eine weitere Einrichtung im Web.XML. Weitere Informationen finden Sie im Artikel Sichern Ihrer Site mit Container Managed Security.

Anmerkungen

  • Einige Beispiele zeigen Pfad- und docBase-Attribute im <-Kontext> -Tag. Diese sind erforderlich, wenn sich das Kontext-Tag im Server befindet.xml, aber im Kontext.xml Sie sind optional und verursachen häufig nur Bereitstellungsprobleme (z. B. wenn die Anwendung unter einem anderen Namen bereitgestellt wird). Es ist einfacher (und besser), sie wegzulassen, wodurch der Kontextname automatisch wird. Verwenden Sie in diesem Fall einfach <Context> ohne Attribute, wie im obigen Beispiel.
  • Standardeinstellungen für alle Kontexte werden im Kontext definiert.XML.standarddatei im Ordner <CATALINA>/conf

Gotchas / Fehlerbehebung / Debugging JNDI-Datenquellenprobleme

  • JNDI-Probleme sind schwer zu debuggen, da es keine Debug-Ausgabe gibt, also wenn Sie Probleme haben, überprüfen Sie diese Liste
  • Mit einer JNDI-Datenquelle, stellen Sie sicher, dass Sie den JDBC-Treiber in <CATALINA /common/lib oder es wird nicht geladen
  • Wenn eine JNDI-Datenquelle nicht funktioniert , stellen Sie sicher, dass die Verbindungsdetails korrekt sind, indem Sie einen anderen Weg (zB: telnet oder der MySQL-Befehlsclient mit denselben Details)
  • deployXML muss im Eintrag <Host> in server auf false (Standard) gesetzt werden.xml oder der Kontext.xml-Datei wird ignoriert
  • Tomcat 5.5 und Tomcat 6 kopieren Sie den Kontext.xml-Datei <CATALINA>/conf/Standalone nach dem ersten die erfolgreiche Bereitstellung, und nicht entfernen oder aktualisieren Sie die Datei, es sei denn, die Anwendung nicht bereitgestellt wird. Wenn Sie Ihren Kontext ändern.xml-Datei und wenn es immer noch nicht funktioniert oder Ihre Änderungen ignoriert werden, löschen Sie alle Dateien im Ordner <CATALINA>/conf/Standalone, um sicherzustellen, dass sie korrekt erneut bereitgestellt werden. Tomcat 7 hat dieses Problem nicht, es sei denn, copyXML ist false (Standard ist true . Bei Metawerx gehostete Websites haben dieses Problem aufgrund unseres benutzerdefinierten Setups mit keiner Version.

Siehe auch

  • web.xml-Referenzhandbuch
  • Tomcat 6 Kontext.xml-Dokumentation
  • < env-Eintrag> Tag im Web.xml, das verwendet werden kann, wenn Sie nur einfache Textwerte angeben
  • JNDI DBCP Beispiel für MySQL 4.x
  • JNDI DBCP Beispiel für MySQL 5.x
  • JNDI DBCP-Beispiel für SQL Server 7 und 2000
  • JNDI DBCP-Beispiel für SQL Server 2005
  • JNDI DBCP-Beispiel für PostgreSQL
  • JNDI DBCP-Beispiel für FireBird
  • JNDI DBCP-Beispiel für Oracle
  • Zugriff auf eine JNDI-Datenquelle mit JSTL von JSP aus
  • Zugriff auf eine JNDI-Datenquelle von Java aus
  • Sichern Ihrer Site mit Container Managed Security

Leave a Reply