3Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
1001
1001
EMPFEHLEN
-
Hallo,
meine Anwendung soll eine JDBC-Verbindung des Typs 3 verwenden. Als Middleware haben wir uns für Tomcat6 entschieden. Dieser wurde auch anhand eines Tutorials aufgesetzt und konnte irgendwann auch die Verbindung zur ORACLE-Datenbank aufbauen.
Nun ist mir aber nicht klar, wie ich meine Applikation dazu bringe, die Verbindung nicht mehr direkt, sondern über den Tomcat aufzubauen. Irgendwie enden alle Beispiele die ich gefunden habe, mit dem erfolgreichen Aufbau der DB-Verbindung innerhalb des Tomcats.
Bisher habe ich nur herausgefunden das ich diesen Code-Schnipsel verwenden muss.
Dieser liefert mir jedoch den folgenden FehlerCode :1 2 3 4
Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle"); Connection conn = ds.getConnection();
Code :1 2 3 4 5
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 at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.lookup(Unknown Source)
In anderen Beiträgen habe ich gelesen das man Properties definieren muss damit der Context initialisiert werden kann (siehe hier). Jedoch ist mir nicht klar geworden welches die richtigen Parameter sind. Auch "try and error" hat bisher nichts gebracht.
Zudem geht aus den ganzen Beispielen auch nicht hevor, wie meine Applikation weiss wo sie den Tomcat findet.
Kann mir jemand vielleicht hierzu weiterhelfen und mir erklären wie das genau funktionieren soll?
Vielen Dank im Voraus
Rafael
-
19.10.10 17:51 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
schau mal hier:
http://www.tutorials.de/enterprise-j...cat-6-0-a.html
ansonsten hier ein einfaches Beispiel mit mysql:
context.xml im WebContent/META-INF Verzeichnis parallel zu WEB-INF:
Code xml:1 2 3 4 5 6 7
<?xml version="1.0" encoding="utf-8"?> <Context path="/jdbc.web" reloadable="true"> <Resource name="jdbc/testDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="username" password="password" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test"/> </Context>
MySQL JDBC Treiber .jar nach WEB-INF/lib kopieren.
Servlet Definition und Beispiel für den JNDI Zugriff:
Code xml:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>jdbc.web</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <description></description> <display-name>TestServlet</display-name> <servlet-name>TestServlet</servlet-name> <servlet-class>de.tutorials.jdbc.web.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/TestServlet</url-pattern> </servlet-mapping> </web-app>
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
package de.tutorials.jdbc.web; import java.io.IOException; import java.sql.Connection; 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; public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { Context ctx = new InitialContext(); Context envContext = (Context) ctx.lookup("java:/comp/env"); DataSource ds = (DataSource) envContext.lookup("jdbc/testDB"); Connection con = ds.getConnection(); System.out.println(con); con.close(); } catch (Exception e) { e.printStackTrace(); } } }
Siehe auch:
http://tomcat.apache.org/tomcat-6.0-...ces-howto.html
In aktuellen Tomcat Versionen (6.0.29) geht mit Java 6 auch diese hübsche Variante
EJB 3.x Resource Injection in Servlets:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
package de.tutorials.jdbc.web; import java.io.IOException; import java.sql.Connection; import javax.annotation.Resource; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Resource(name = "jdbc/testDB") private DataSource ds; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { Connection con = ds.getConnection(); System.out.println(con); con.close(); } catch (Exception e) { e.printStackTrace(); } } }
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo Tom,
vielen Dank erstmal für die ausführliche Antwort.
Kannst du mir vielleicht noch bei den noch offenen Fragen weiterhelfen:
Die Applikation, der Tomcat, und die Datenbank liegen alle auf unterschiedlichen Servern/Clients. Ich komme einfach nicht dahinter wie die Kommunikation genau funktionieren soll.In anderen Beiträgen habe ich gelesen das man Properties definieren muss damit der Context initialisiert werden kann. Jedoch ist mir nicht klar geworden welches die richtigen Parameter sind. Auch "try and error" hat bisher nichts gebracht.
Zudem geht aus den ganzen Beispielen auch nicht hevor, wie meine Applikation weiss wo sie den Tomcat findet.
Und noch eine kurze Frage:
Führt der Java-Code den du mir genannt hast, nicht zwangsläufig zu der selben Fehlermeldung wie ich sie beschrieben habe?
Gruss
Rafael
-
20.10.10 12:03 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
Die notwendigen Properties zur Erzeugung des InitialContext werden schon intern durch den Tomcat als System.properties gesetzt.In anderen Beiträgen habe ich gelesen das man Properties definieren muss damit der Context initialisiert werden kann. Jedoch ist mir nicht klar geworden welches die richtigen Parameter sind. Auch "try and error" hat bisher nichts gebracht.
Zudem geht aus den ganzen Beispielen auch nicht hevor, wie meine Applikation weiss wo sie den Tomcat findet.
Siehe:
System.getProperties().list(System.out); in Servlet:
Ergibt u.a.:
java.naming.factory.initial=org.apache.naming.java.javaURLContextFactory, java.naming.factory.url.pkgs=org.apache.naming
Nein -> siehe Antwort.Führt der Java-Code den du mir genannt hast, nicht zwangsläufig zu der selben Fehlermeldung wie ich sie beschrieben habe?
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Ok. so weit habe ich das Verstanden. Vielen Dank schon mal dafür.
Aber was mache ich nun mit meiner Applikation, welche ja nicht direkt mit dem Tomcat verbunden ist?
Denn diese liegt ja auf dem Client. Und der Tomcat liegt ja auf einem Server im Netzwerk.
Irgendwie muss ich doch im Java-Code angeben das die Verbindung nun über den Tomcat laufen soll und nicht mehr direkt erstellt wird.
Die Beispiele geben ja immer nur an, wie ich eine Verbindung zur Datenbank aufbaue, indem ich ein entsprechende Class-Datei aufrufe, beispielsweise über JSP. Aber nicht wie ich die Connection auch von "aussen" abrufen kann.
Oder habe ich hier etwas übersehen?
Gruss
Rafael
Ähnliche Themen
-
JSP und Tomcat - Zugriff auf Oracle DB 10g
Von javad im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 19.10.10, 18:07 -
Form Based Authentication bei JSP - Oracle vs. Tomcat
Von puschel0815 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 19.08.08, 14:36 -
Java 6 und Tomcat 6
Von UkAtZ im Forum JavaAntworten: 8Letzter Beitrag: 06.03.08, 15:03 -
Tomcat, Oracle, JSPs... Probleme mit Sonderzeichen!! Hat wer nen Tipp?
Von BigChicken im Forum JavaAntworten: 4Letzter Beitrag: 02.10.07, 13:49 -
Tomcat und Oracle?
Von Valentin- im Forum Coders TalkAntworten: 1Letzter Beitrag: 05.03.04, 10:08





Zitieren

Login





