This is a quick reiteration of key points found in the link below..

make sure you provide the GRANT for insert/select/update to the user you will 
be using e.g.
mysql> GRANT ALL PRIVILEGES ON *.* TO [EMAIL PROTECTED] 
    ->   IDENTIFIED BY 'javadude' WITH GRANT OPTION;
mysql> create database javatest;
mysql> use javatest;
mysql> create table testdata (
    ->   id int not null auto_increment primary key,
    ->   foo varchar(25), 
    ->   bar int);
JDBC access...
I assume you have these resource statements either in applicationContext.xml or 
server.xml
<Resource name="jdbc/TestDB"
               auth="Container"
               type="javax.sql.DataSource"/>

  
<ResourceParams name="jdbc/TestDB">
    
   <parameter>
      
     <name>factory</name>
      
     <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    
  </parameter>

    
<!-- Maximum number of dB connections in pool. Make sure you
         configure your mysqld max_connections large enough to handle
         all of your db connections. Set to 0 for no limit.
         -->
    
<parameter>
      
<name>maxActive</name>
      
<value>100</value>
    
</parameter>

   <!-- Maximum number of idle dB connections to retain in pool.
         Set to 0 for no limit.
         -->
    
<parameter>
      
<name>maxIdle</name>
      
<value>30</value>
    
</parameter>

    
<!-- Maximum time to wait for a dB connection to become available
         in ms, in this example 10 seconds. An Exception is thrown if
         this timeout is exceeded.  Set to -1 to wait indefinitely.
         -->
    
<parameter>
      
<name>maxWait</name>
      
<value>10000</value>
    
</parameter>

    
<!-- MySQL dB username and password for dB connections  -->
    
<parameter>
     
    <name>username</name>
     <value>javauser</value>
    
</parameter>
    
<parameter>
     
   <name>password</name>
     <value>javadude</value>
    
</parameter>

  <!-- Class name for mm.mysql JDBC driver -->
    
<parameter>
       
<name>driverClassName</name>
       
<value>org.gjt.mm.mysql.Driver</value>
    
</parameter>

    
<!-- The JDBC connection url for connecting to your MySQL dB.
         The autoReconnect=true argument to the url makes sure that the
         mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
         connection.  mysqld by default closes idle connections after 8 hours.
         -->
    
<parameter>
      
<name>url</name>
      
<value>jdbc:mysql://localhost:3306/javatest?autoReconnect=true</value>
    
</parameter>
  
</ResourceParams>

</Context>


lets not forget web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd";>
<web-app>
  <description>MySQL Test App</description>
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
</web-app>
Now finally using the JDBC reference in the java class
     Context ctx = new InitialContext();
      
if(ctx == null ) 
          
throw new Exception("Boom - No Context");

      
DataSource ds = 
            (DataSource)ctx.lookup(
               "java:comp/env/jdbc/TestDB");


InitialContext initCtx = new InitialContext();

DataSource ds = (DataSource) initCtx.lookup("java:comp/env/my-datasource");

Connection conn = ds.getConnection();


JNDI access:
ApplicationContext.xml or server.xml first the prelim ConnectionPool params








<Environment name="tyrexDomainConfig" type="java.lang.String" 
value="domain-config.xml"/>
<Environment name="tyrexDomainName" type="java.lang.String" value="myDomain"/>
Then in the same file the myDataSource








<Resource name="my-datasource" auth="Container" type="tyrex.resource.Resource"/>
<ResourceParams name="my-datasource">
  <parameter>
    <name>name</name>
    <value>myDataSource</value>
  </parameter>
</ResourceParams>and in $TOMCAT_HOME/conf/catalina.policy allow JNDI access to 
the described resource








permission  org.apache.naming.JndiPermission  "jndi://comp.env/my-datasource";
Now the test in java via my-datasource
InitialContext initCtx = new InitialContext();

DataSource ds = (DataSource) initCtx.lookup("jndi:comp/env/my-datasource");

Connection conn = ds.getConnection();

More information on configuration and deployment to MySQL DB available at
http://tomcat.apache.org/tomcat-4.1-doc/jndi-datasource-examples-howto.html

HTH
Martin
______________________________________________ 
Disclaimer and confidentiality note 
Everything in this e-mail and any attachments relates to the official business 
of Sender. This transmission is of a confidential nature and Sender does not 
endorse distribution to any party other than intended recipient. Sender does 
not necessarily endorse content contained within this transmission. 


> Date: Wed, 13 Aug 2008 22:38:32 +0200
> From: [EMAIL PROTECTED]
> Subject: database application
> To: users@tomcat.apache.org
> 
> Hi,
> 
> Please help me.
> 
> I use this introduction:
> http://localhost:8180/tomcat-docs/jndi-datasource-examples-howto.html
> 
> database: mysql
> A simple java application works (see PS)
> [EMAIL PROTECTED]:/mnt/hda3/tyuk/dtest/java/database# java DbTableShow2
> +---------------+---------------+---------------+
> | id            | foo           | bar           |
> +---------------+---------------+---------------+
> | 1             | hello         | 12345         |
> | 2             | hellox        | 123456        |
> +---------------+---------------+---------------+
> 
> 
> However the tomcat application fails:
> ----------------------------------------------
> description The server encountered an internal error () that prevented it 
> from fulfilling this request.
> exception
> javax.servlet.ServletException: Unable to get connection, DataSource invalid: 
> "org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of 
> class '' for connect URL 'null'"
>       
> org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
>       
> org.apache.jasper.runtime.PageContextImpl.access$11(PageContextImpl.java:784)
>       
> org.apache.jasper.runtime.PageContextImpl$12.run(PageContextImpl.java:766)
>       java.security.AccessController.doPrivileged(Native Method)
>       
> org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:764)
>       org.apache.jsp.jsp.test_jsp._jspService(test_jsp.java:81)
>       org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
>       javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>       
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
>       org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
>       org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
>       javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>       sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       java.lang.reflect.Method.invoke(Method.java:597)
>       org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
>       java.security.AccessController.doPrivileged(Native Method)
>       javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
>       org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:272)
>       
> org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
> ---------------
> 
> Here my configuration file (/etc/tomcat5/server.xml:
> ----------------
> <!-- Server Configuration File for Tomcat 5 on Debian
>      You can find a more complete example in /usr/share/doc/tomcat5/examples/
>  -->
> <!-- Note that component elements are nested corresponding to their
>      parent-child relationships with each other -->
> <!-- A "Server" is a singleton element that represents the entire JVM,
>      which may contain one or more "Service" instances.  The Server
>      listens for a shutdown command on the indicated port.
>      Note:  A "Server" is not itself a "Container", so you may not
>      define subcomponents such as "Valves" or "Loggers" at this level.
>  -->
> 
> <Server port="8005" shutdown="SHUTDOWN" debug="0">
> 
>   <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
>             debug="0"/>
>   <Listener 
> className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
>             debug="0"/>
> 
>   <!-- Global JNDI resources -->
>   <GlobalNamingResources>
> 
>     <!-- Test entry for demonstration purposes -->
>     <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
> 
>     <!-- Editable user database that can also be used by
>          UserDatabaseRealm to authenticate users -->
>     <Resource name="UserDatabase" auth="Container"
>               type="org.apache.catalina.UserDatabase"
>        description="User database that can be updated and saved">
>     </Resource>
>     <ResourceParams name="UserDatabase">
>       <parameter>
>         <name>factory</name>
>         <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
>       </parameter>
>       <parameter>
>         <name>pathname</name>
>         <value>conf/tomcat-users.xml</value>
>       </parameter>
>     </ResourceParams>
> 
>   </GlobalNamingResources>
> 
>   <!-- A "Service" is a collection of one or more "Connectors" that share
>        a single "Container" (and therefore the web applications visible
>        within that Container).  Normally, that Container is an "Engine",
>        but this is not required.
> 
>        Note:  A "Service" is not itself a "Container", so you may not
>        define subcomponents such as "Valves" or "Loggers" at this level.
>    -->
>   <!-- Define the Tomcat Stand-Alone Service -->
>   <Service name="Tomcat-Standalone">
>     <!-- A "Connector" represents an endpoint by which requests are received
>          and responses are returned.  Each Connector passes requests on to the
>          associated "Container" (normally an Engine) for processing.
>     -->
>     <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8180 -->
>     <Connector className="org.apache.coyote.tomcat5.CoyoteConnector"
>                port="8180" minProcessors="5" maxProcessors="75"
>                enableLookups="true" acceptCount="10" debug="0"
>                connectionTimeout="20000" useURIValidationHack="false" />
> 
>     <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
>     <Connector className="org.apache.coyote.tomcat5.CoyoteConnector"
>                port="8009" minProcessors="5" maxProcessors="75"
>                enableLookups="true" acceptCount="10" debug="0"
>                connectionTimeout="20000" useURIValidationHack="false"
>                
> protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>
> 
>     <!-- An Engine represents the entry point (within Catalina) that processes
>          every request.  The Engine implementation for Tomcat stand alone
>          analyzes the HTTP headers included with the request, and passes them
>          on to the appropriate Host (virtual host). -->
> 
>     <!-- Define the top level container in our container hierarchy 
>          The name must be Catalina for correct function of the admin webapp 
> -->
>     <Engine name="Catalina" defaultHost="localhost" debug="0">
> 
>       <!-- Global logger unless overridden at lower levels -->
>       <Logger className="org.apache.catalina.logger.FileLogger"
>               prefix="catalina_" suffix=".log" timestamp="true"/>
> 
>       <!-- Because this Realm is here, an instance will be shared globally -->
>       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
>              debug="0" resourceName="UserDatabase"/>
> 
>       <!-- Define the default virtual host -->
>       <Host name="localhost" debug="0" appBase="webapps" 
>             unpackWARs="true" autoDeploy="true">
> 
>         <!-- Logger shared by all Contexts related to this virtual host. -->
>         <Logger className="org.apache.catalina.logger.FileLogger"
>                 directory="logs" prefix="localhost_" suffix=".log"
>                 timestamp="true"/>       
> 
>       <Context path="/jli/Q2_JSPs"
>                docBase="/home/en/public_html/jsp/Beispiele"
>                reloadable="true" />
>       
>       <Context path="/jli/Q3_JSPs"
>                docBase="/home/en/public_html/jsp/Kapitel_4/Beispiele"
>                reloadable="true" />
>       
>       <Context path="/jli/Q4_JSPs"
>                docBase="/home/en/public_html/jsp/Kapitel_5/Beispiele"
>                reloadable="true" />
> 
> <!-- This is where I test -->
>       <Context path="/jli/DB"
>                docBase="/home/en/public_html/jsp/DB"
>                reloadable="true" />
>       
>       <Context path="/ajax/k2"
>                docBase="/home/en/public_html/jsp/ajax/Beispiele/kap2"
>                reloadable="true" />
>       
> <!-- This is what I added  -->
> 
>       <Context path="/DBTest" docBase="DBTest"
>                debug="5" reloadable="true" crossContext="true">
>               
>               <Logger className="org.apache.catalina.logger.FileLogger"
>                       prefix="localhost_DBTest_log." suffix=".txt"
>                       timestamp="true"/>
>               
>               <Resource name="jdbc/TestDB"
>                         auth="Container"
>                         type="javax.sql.DataSource"/>
>               
>               <ResourceParams name="jdbc/TestDB">
>                       <parameter>
>                               <name>factory</name>
>                               
> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
>                       </parameter>
>                       
>                       <!-- Maximum number of dB connections in pool. Make 
> sure you
>                            configure your mysqld max_connections large enough 
> to handle
>                            all of your db connections. Set to 0 for no limit.
>                            -->
>                       <parameter>
>                               <name>maxActive</name>
>                               <value>100</value>
>                       </parameter>
>                       
>                       <!-- Maximum number of idle dB connections to retain in 
> pool.
>                            Set to -1 for no limit.  See also the DBCP 
> documentation on this
>                            and the minEvictableIdleTimeMillis configuration 
> parameter.
>                            -->
>                       <parameter>
>                               <name>maxIdle</name>
>                               <value>30</value>
>                       </parameter>
>                       
>                       <!-- Maximum time to wait for a dB connection to become 
> available
>                            in ms, in this example 10 seconds. An Exception is 
> thrown if
>                            this timeout is exceeded.  Set to -1 to wait 
> indefinitely.
>                            -->
>                       <parameter>
>                               <name>maxWait</name>
>                               <value>10000</value>
>                       </parameter>
>                       
>                       <!-- MySQL dB username and password for dB connections  
> -->
>                       <parameter>
>                               <name>username</name>
>                               <value>javauser</value>
>                       </parameter>
>                       <parameter>
>                               <name>password</name>
>                               <value>javadude</value>
>                       </parameter>
>                       
>                       <!-- Class name for the old mm.mysql JDBC driver - 
> uncomment this entry and comment next
>                            if you want to use this driver - we recommend 
> using Connector/J though
>                            <parameter>
>                                    <name>driverClassName</name>
>                                    <value>org.gjt.mm.mysql.Driver</value>
>                            </parameter>
>                            -->
>                            
>                            <!-- Class name for the official MySQL Connector/J 
> driver -->
>                            <parameter>
>                                    <name>driverClassName</name>
>                                    <value>com.mysql.jdbc.Driver</value>
>                            </parameter>
>                            
>                            <!-- The JDBC connection url for connecting to 
> your MySQL dB.
>                                 The autoReconnect=true argument to the url 
> makes sure that the
>                                 mm.mysql JDBC Driver will automatically 
> reconnect if mysqld closed the
>                                 connection.  mysqld by default closes idle 
> connections after 8 hours.
>                                 -->
>                            <parameter>
>                                    <name>url</name>
>                                    
> <value>jdbc:mysql://localhost:3306/javatest?autoReconnect=true</value>
>                            </parameter>
>                    </ResourceParams>
>            </Context>
> <!-- End of This is what I added  -->
> 
>       </Host>
>     </Engine>
>   </Service>
> </Server>
> -------------------------------------
> This is my /home/en/public_html/jsp/DB/WEB-INF/web.xml file:
> ---------------------
> <web-app 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";
>        version="2.4">
>       <description>MySQL Test App</description>
>       <resource-ref>
>               <description>DB Connection</description>
>               <res-ref-name>jdbc/TestDB</res-ref-name>
>               <res-type>javax.sql.DataSource</res-type>
>               <res-auth>Container</res-auth>
>       </resource-ref>
> </web-app>
> ---------------
> 
> I copied jstl.jar and standard.jar from tomcat into 
> /home/en/public_html/jsp/DB/WEB-INF/lib
> 
> /home/en/public_html/jsp/DB/jsp/test.jsp looks:
> ----------------------
> <%@ taglib uri="http://java.sun.com/jsp/jstl/sql"; prefix="sql" %>
> <%@ taglib uri="http://java.sun.com/jsp/jstl/core"; prefix="c" %>
> 
> <sql:query var="rs" dataSource="jdbc/TestDB">
> select id, foo, bar from testdata
> </sql:query>
> 
> <html>
>   <head>
>     <title>DB Test</title>
>   </head>
>   <body>
> 
>   <h2>Results</h2>
>   
> <c:forEach var="row" items="${rs.rows}">
>     Foo ${row.foo}<br/>
>     Bar ${row.bar}<br/>
> </c:forEach>
> 
>   </body>
> </html>
> -------------------------
> 
> Thanks a lot in advance: Eleonora
> 
> 
> PS:
> Working java program:
> ---------------------------------
> // DbTableShow2.java
> 
> import java.io.*;
> import java.sql.*;
> 
> public class DbTableShow2
> {
>   public static void main( String[] argv )
>   {
>     String sDbDrv=null, sDbUrl=null, sTable=null, sUsr="", sPwd="";
>     if( 3 <= argv.length ) {
>       sDbDrv = argv[0];
>       sDbUrl = argv[1];
>       sTable = argv[2];
>       if( 4 <= argv.length )  sUsr = argv[3];
>       if( 5 <= argv.length )  sPwd = argv[4];
>     } else {
> //      try {
>         BufferedReader in = new BufferedReader(
>                             new InputStreamReader( System.in ) );
> //        System.out.println( "Name des Datenbanktreibers eingeben (z.B. 
> com.mysql.jdbc.Driver):" );
> //        sDbDrv = in.readLine();
>         sDbDrv = "com.mysql.jdbc.Driver";
> //        System.out.println( "Url der Datenbank eingeben (z.B. 
> jdbc:mysql://localhost:3306/MeineDb):" );
> //        sDbUrl = in.readLine();
>  //       sDbUrl = "jdbc:mysql://localhost:3306/employees";
>         sDbUrl = "jdbc:mysql://localhost:3306/javatest?autoReconnect=true";
> //        System.out.println( "Name der Tabelle eingeben (z.B. 
> MeineTestTabelle):" );
> //        sTable = in.readLine();
> //        sTable = "employee_data";
>        sTable = "testdata";
> //        System.out.println( "Benutzername (z.B. root):" );
> //        sUsr = in.readLine();
>          sUsr = "javauser";
> //        System.out.println( "Passwort (z.B. mysqlpwd):" );
> //        sPwd = in.readLine();
>         sPwd = "javadude";
> //      } catch( IOException ex ) {
> //        System.out.println( ex );
> //      }
>     }
>     if( null != sDbDrv && 0 < sDbDrv.length() &&
>         null != sDbUrl && 0 < sDbUrl.length() &&
>         null != sTable && 0 < sTable.length() ) {
>       Connection cn = null;
>       Statement  st = null;
>       ResultSet  rs = null;
>       try {
>         // Select fitting database driver and connect:
>         Class.forName( sDbDrv );
>         cn = DriverManager.getConnection( sDbUrl, sUsr, sPwd );
>         st = cn.createStatement();
>         rs = st.executeQuery( "select * from " + sTable );
>         // Get meta data:
>         ResultSetMetaData rsmd = rs.getMetaData();
>         int i, n = rsmd.getColumnCount();
>         // Print table content:
>         for( i=0; i<n; i++ )
>           System.out.print( "+---------------" );
>         System.out.println( "+" );
>         for( i=1; i<=n; i++ )    // Attention: first column with 1 instead of > 0
>           System.out.print( "| " + extendStringTo14( rsmd.getColumnName( i ) 
> ) );
>         System.out.println( "|" );
>         for( i=0; i<n; i++ )
>           System.out.print( "+---------------" );
>         System.out.println( "+" );
>         while( rs.next() ) {
>           for( i=1; i<=n; i++ )  // Attention: first column with 1 instead of > 0
>             System.out.print( "| " + extendStringTo14( rs.getString( i ) ) );
>           System.out.println( "|" );
>         }
>         for( i=0; i<n; i++ )
>           System.out.print( "+---------------" );
>         System.out.println( "+" );
>       } catch( Exception ex ) {
>         System.out.println( ex );
>       } finally {
>         try { if( null != rs ) rs.close(); } catch( Exception ex ) {}
>         try { if( null != st ) st.close(); } catch( Exception ex ) {}
>         try { if( null != cn ) cn.close(); } catch( Exception ex ) {}
>       }
>     }
>   }
> 
>   // Extend String to length of 14 characters
>   private static final String extendStringTo14( String s )
>   {
>     if( null == s ) s = "";
>     final String sFillStrWithWantLen = "              ";
>     final int iWantLen = sFillStrWithWantLen.length();
>     final int iActLen  = s.length();
>     if( iActLen < iWantLen )
>       return (s + sFillStrWithWantLen).substring( 0, iWantLen );
>     if( iActLen > 2 * iWantLen )
>       return s.substring( 0, 2 * iWantLen );
>     return s;
>   }
> }
> -----------------------end of working java program---
> 
> -- 
> Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen! 
> Ideal für Modem und ISDN: http://www.gmx.net/de/go/smartsurfer
> 
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 

_________________________________________________________________
Your PC, mobile phone, and online services work together like never before.
http://clk.atdmt.com/MRT/go/108587394/direct/01/

Reply via email to