tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Micael Padraig Og mac Grene" <caraun...@harbornet.com>
Subject OKAY: HERE GOES. THIS IS GETTING INTERESTING. Re: Tomcat 4.0/JDBC driver configuration?
Date Thu, 29 Nov 2001 18:17:16 GMT
Hi, Mark,

Moving on, I see.  Great!  Here is a bunch of junk to look at and maybe
learn from.  (I don't mind ending sentences prepositions with.)  First is
this little way to get a connection from a PostgreSQL driver using
DataSource.  I assume you will be using DataSource and not the kiddies
version of jdbc, i.e. you will be using the jdbc extension, I assume.  If
not, you should.  I don't want to bother talking about the kiddy version,
which is well-covered in Sun tutorials.  If I seem to talk about the kiddy
version with disdain, that is the correct impression. ///;-)

Once you have the industrial strength jdbc set up with DataSource, the rest
should be somewhat obvious.  There is nothing really tricky or special about
Tomcat in this regard.

What I definitely like to do is to get all the database "parameters" as you
say established with start up in Tomcat, so I put it all in a StartUp
servlet that has an init() method.  Before I go on, I will stop and ask if
you know what an init() method with a servlet does?


NOTICE THAT THE jdbcURL, etc. used in the start up servlet come from the
web.xml specification that is for the start up servlet and ServletConfig,
i.e. are for init() parameters in web.xml.

Also note the resource reference in the web.xml at the bottom.  You are
beginning to get into a bit more complicated area.  You have to include your
jar or classes for a driver just like you do any classes or jars.  Jars are
jars and classes are classes and they all are found in the same way.  I also
use Tomcat in the context of an application server, running in the same JVM,
so I have not shown a lot I do in relation to JMX specifications and MBeans
and MLET classes which pop all I show here into a JNDI context.  But, that
should not be a problem.

Please do not fail to stop and learn the DataSource and jdbc extension
stuff.  You have to get an advanced driver when you do this.  The kiddy
drivers do not work with or have DataSource implementations.  You need to do
some scouting and reading on this, if you are not already up to speed.  When
I find out how much you know about this, then I can point you better.

Micael

Below are:

   1.  A little made up class to get a DataSource connection or Connection
object.

    2.   A more developed web.xml than I have shown you before.

    3.  A StartUp servlet which is fairly sophisticated.

Have fun and let me know how it goes, if you would.  I have an interest in
seeing how you progress with all this, because we all have to train people
new at things.

Micael, again

///;-)



///////////////////////////////////////////////////

public class PostgresqlConnection {
    private Connection conn;
    private String     user;
    private String     password;

    public Connection getConnection(String user, String password) throws
ClassNotFoundException, SQLException {
        Class.forName("org.postgresql.Driver");
        PostgresqlDataSource dataSource = new PostgresqlDataSource();
  conn = dataSource.getConnection(user, password);
        return conn;
    }
}

//////////////////////////////////////////////////

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

<web-app>
  <servlet>
   <servlet-name>authenticate</servlet-name>
   <servlet-class>AppAuthenticateServlet</servlet-class>
  </servlet>

  <servlet>
   <servlet-name>action</servlet-name>
   <servlet-class>ActionServlet</servlet-class>
   <init-param>
     <param-name>action-mappings</param-name>
     <param-value>actions</param-value>
   </init-param>
  </servlet>

  <servlet>
   <servlet-name>setup</servlet-name>
   <servlet-class>SetupServlet</servlet-class>
   <init-param>
     <param-name>jdbcDriver</param-name>
    <param-value>org.postgresql.Driver</param-value>
   </init-param>

   <init-param>
    <param-name>jdbcURL</param-name>
    <param-value>
     jdbc:postgresql://localhost:5432/db
    </param-value>
   </init-param>

   <init-param>
    <param-name>jdbcUser</param-name>
    <param-value>db</param-value>
   </init-param>

   <init-param>
    <param-name>jdbcPwd</param-name>
    <param-value>yobyor</param-value>
   </init-param>

   <load-on-startup/>
     </servlet>

     <servlet-mapping>
            <servlet-name>action</servlet-name>
            <url-pattern>*.do</url-pattern>
     </servlet-mapping>

     <servlet-mapping>
            <servlet-name>authenticate</servlet-name>
            <url-pattern>/authenticate</url-pattern>
     </servlet-mapping>

    <welcome-file-list>
                <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <taglib>
        <taglib-uri>utilities</taglib-uri>
        <taglib-location>/WEB-INF/tlds/utilities.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>application</taglib-uri>
        <taglib-location>/WEB-INF/tlds/app.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>i18n</taglib-uri>
        <taglib-location>/WEB-INF/tlds/i18n.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>security</taglib-uri>
        <taglib-location>/WEB-INF/tlds/security.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>database</taglib-uri>
        <taglib-location>/WEB-INF/tlds/database.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>html</taglib-uri>
        <taglib-location>/WEB-INF/tlds/html.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>logic</taglib-uri>
        <taglib-location>/WEB-INF/tlds/logic.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>dom</taglib-uri>
        <taglib-location>/WEB-INF/tlds/dom.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>xslt</taglib-uri>
        <taglib-location>/WEB-INF/tlds/xslt.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>regions</taglib-uri>
        <taglib-location>/WEB-INF/tlds/regions.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>xpath</taglib-uri>
        <taglib-location>/WEB-INF/tlds/xpath.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>tokens</taglib-uri>
        <taglib-location>/WEB-INF/tlds/tokens.tld</taglib-location>
    </taglib>

    <resource-ref>
     <description>Primary database</description>
  <res-ref-name>PostgresDS</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>CONTAINER</res-auth>
     </resource-ref>

     <security-constraint>
      <web-resource-collection>
       <web-resource-name>Credit Card Page</web-resource-name>
       <url-pattern>/WEB-INF/jsp/createAccount/content.jsp</url-pattern>
      </web-resource-collection>
      <user-data-constraint>
       <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
     </security-constraint>

</web-app>

////////////////////////////////////////////////////////

SETUP SERVLET
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.SQLException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import beans.app.User;
import beans.app.Users;
import beans.jdbc.DbConnectionPool;

public class SetupServlet extends HttpServlet implements
beans.app.Constants, tags.jdbc.Constants {
   private DbConnectionPool pool;

   public void init(ServletConfig config) throws ServletException{
      super.init(config);

      ServletContext ctx = config.getServletContext();
      createDbConnectionPool(config, ctx);

      try {
         ctx.setAttribute(USERS_KEY, loadUsers(ctx));
      } catch(SQLException ex) {
         throw new ServletException(ex);
      }
   }

   public void destroy() {
      ServletContext ctx = getServletConfig().getServletContext();
      ctx.removeAttribute(DBPOOL_KEY);
      ctx.removeAttribute(USERS_KEY);

      pool.shutdown();
      pool = null;
      super.destroy();
   }

   private void createDbConnectionPool(ServletConfig config, ServletContext
ctx) {
      pool = new DbConnectionPool(
                  config.getInitParameter("jdbcDriver"),
                  config.getInitParameter("jdbcURL"),
                  config.getInitParameter("jdbcUser"),
                  config.getInitParameter("jdbcPwd"));
      ctx.setAttribute(DBPOOL_KEY, pool);
   }

   private Users loadUsers(ServletContext ctx) throws SQLException {
      Connection conn = null;

      if(pool != null) {
         try {
            // wait for a maximum of 10 seconds for a connection
            // if pool is full
               conn = (Connection)pool.getConnection(10000);
         } catch(Exception ex) {
            throw new SQLException(ex.getMessage());
         }
         Statement stmt = conn.createStatement();
         ResultSet rs = stmt.executeQuery("SELECT * FROM USERS");
         Users users = new Users(rs);

         pool.recycleConnection(conn);
         return users;
      }
      return null;
   }
}


-----Original Message-----
From: Mark <markd@bellsouth.net>
To: tomcat-user@jakarta.apache.org <tomcat-user@jakarta.apache.org>
Date: Thursday, November 29, 2001 8:58 AM
Subject: Tomcat 4.0/JDBC driver configuration?


>Can someone point me in the right direction or provide an example of
>configuring an application to use JDBC under Tomcat 4.0?  I was able to use
>both thin and OCI Oracle JDCB drover connections by copying the
>classes12.zip to $CATALINA_HOME/common/lib directory and renaming it to
>classes12.jar, but that's not a good long term solution.  I found having
>the driver in the CLASSPATH doesn't work.
>
>I suspect web.xml and/or server.xml is the place to configure the
>deployment details.  Any examples or references to examples would be
>greatly appreciated.
>
>Mark
>
>
>--
>To unsubscribe:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
>For additional commands: <mailto:tomcat-user-help@jakarta.apache.org>
>Troubles with the list: <mailto:tomcat-user-owner@jakarta.apache.org>
>
>


--
To unsubscribe:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands: <mailto:tomcat-user-help@jakarta.apache.org>
Troubles with the list: <mailto:tomcat-user-owner@jakarta.apache.org>


Mime
View raw message