tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 2 Beitrag von Thomas Darimont
  • 1 Beitrag von Thomas Darimont
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
1001
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Rafael79 Rafael79 ist offline Rookie
    Registriert seit
    Feb 2009
    Beiträge
    6
    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.

    Code :
    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();
    Dieser liefert mir jedoch den folgenden Fehler

    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
     

  2. #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ß Tom
    Angehängte Dateien Angehängte Dateien
    xrax und Rafael79 bedanken sich. 
    Java 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

  3. #3
    Rafael79 Rafael79 ist offline Rookie
    Registriert seit
    Feb 2009
    Beiträge
    6
    Hallo Tom,

    vielen Dank erstmal für die ausführliche Antwort.

    Kannst du mir vielleicht noch bei den noch offenen Fragen weiterhelfen:

    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.
    Die Applikation, der Tomcat, und die Datenbank liegen alle auf unterschiedlichen Servern/Clients. Ich komme einfach nicht dahinter wie die Kommunikation genau funktionieren soll.

    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
     

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    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.
    Die notwendigen Properties zur Erzeugung des InitialContext werden schon intern durch den Tomcat als System.properties gesetzt.

    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

    Führt der Java-Code den du mir genannt hast, nicht zwangsläufig zu der selben Fehlermeldung wie ich sie beschrieben habe?
    Nein -> siehe Antwort.

    Gruß Tom
    Rafael79 bedankt sich. 
    Java 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

  5. #5
    Rafael79 Rafael79 ist offline Rookie
    Registriert seit
    Feb 2009
    Beiträge
    6
    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

  1. JSP und Tomcat - Zugriff auf Oracle DB 10g
    Von javad im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 19.10.10, 18:07
  2. Form Based Authentication bei JSP - Oracle vs. Tomcat
    Von puschel0815 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 19.08.08, 14:36
  3. Java 6 und Tomcat 6
    Von UkAtZ im Forum Java
    Antworten: 8
    Letzter Beitrag: 06.03.08, 15:03
  4. Antworten: 4
    Letzter Beitrag: 02.10.07, 13:49
  5. Tomcat und Oracle?
    Von Valentin- im Forum Coders Talk
    Antworten: 1
    Letzter Beitrag: 05.03.04, 10:08

Stichworte