Hallo!
Die Möglichkeit zum Anlegen einer Datenquelle ueber die Tomcat-Admin Applikation (für Tomcat 5.5.9 muss man diese zuerst herunterladen (
http://apache.mirrorplus.org/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9-admin.zip) und ins %TOMCAT_HOME% Verzeichnis entspacken. Will bzw. muss man jedoch alles von Hand machen so sind einige kleine Schritte notwendig:
Deshalb hier mal eine kleine Anleitung zur Definition einer Oracle (9.x) Datenquelle im Tomcat.
1) Globale Datenquelle in der Server.xml anlegen (unter %TOMCAT_HOME%/conf)
Code:
<Server>
...
<GlobalNamingResources>
...
<Resource
name="jdbc/oracleDS"
type="javax.sql.DataSource"
password="123456"
driverClassName="oracle.jdbc.OracleDriver"
maxIdle="2"
maxWait="5000"
validationQuery="select sysdate from dual"
username="system"
url="jdbc:oracle:thin:@localhost:1521:DEMO"
maxActive="4"/>
...
</GlobalNamingResources>
....
</Server>
(Oracle Instanz heist hier DEMO)
Anschließend kopieren wir das jar mit dem Oracle JDBC Treiber nach %TOMCAT_HME%/common/lib.
Das entsprechende Jar findet sich in der Regel im Verzeichnis %ORACLE_INST%/jdbc/lib
-> ojdbc14.jar (Die Version ojdbc14_g.jar enthält eine Art Debug-Version, ...)
2) Einfach Web-projekt erstellen:
Beispielsweise mit dem Namen: de.tutorials.tomcat.examples
Entsprechende Ordernstruktur aufbauen:
Code:
de.tutorials.tomcat.examples/
de.tutorials.tomcat.examples/....
de.tutorials.tomcat.examples/WEB-INF
de.tutorials.tomcat.examples/WEB-INF/classes
de.tutorials.tomcat.examples/WEB-INF/lib
de.tutorials.tomcat.examples/WEB-INF....
3) Unter %TOMCAT_HOME%/conf/Catalina/localhost/ einen der Web-App entsprechen Context-Descritor erstellen:
Hier mit dem Namen: de.tutorials.tomcat.examples.xml, mit folgendem Inhalt:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<Context
docBase="E:/eclipse/3.1/eclipse/workspace_tomcat559/de.tutorials.tomcat.examples"
reloadable="true"
workDir="E:\eclipse\3.1\eclipse\workspace_tomcat559\de.tutorials.tomcat.examples\work">
<ResourceLink
global="jdbc/oracleDS"
name="jdbc/oracle10"
type="javax.sql.DataSource"/>
</Context>
Ueber den ResourceLink teilen wir Tomcat mit, dass er innerhalb unsers Kontextes die Global definierte Datenquelle namens jdbc/oracleDS innerhalb des Kontextes unter dem Namen jdbc/oracle10 bereitstellen soll.
Wenn der Tomcat nun die neuen Informationen verarbeitet hat (Context reload)
Können wir über einen JNDI-Lookup an die DataSource gelangen:
4) Beispielservlet schreiben.
Code:
package de.tutorials.servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
/**
* Servlet Class
*/
public class OracleDSExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
InitialContext ctx = new InitialContext();
Context ctxEnv = (Context) ctx.lookup("java:comp/env");
DataSource dataSource = (DataSource) ctxEnv.lookup("jdbc/oracle10");
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select sysdate from dual");
if(resultSet.next()) {
System.out.println(resultSet.getString(1));
}
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
5) Die web.xml im WEB-INF Verzeichnis unserer Web-App:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>OracleDSExampleServlet</servlet-name>
<servlet-class>de.tutorials.servlet.OracleDSExampleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OracleDSExampleServlet</servlet-name>
<url-pattern>/oracleDSExampleServlet</url-pattern>
</servlet-mapping>
</web-app>
6) Aufgerufen wird das ganze dann (beispielsweise) im Browser ueber:
http://localhost:8080/de.tutorials.tomcat.examples/oracleDSExampleServlet
In der Tomcat Console erscheint dann die Ausgabe der aktuellen Uhrzeit/Datum...
Gruß Tom