I posted this awhile back (for MySQL), but here it is again.  Also, when you
define your DataSource in this manner, you do not need the <resource-ref>
node in your context-specific web.xml files.


    The global DataSource definition
    --------------------------------

        <!-- Global JNDI resources -->
        <GlobalNamingResources>

            <!-- Editable user database that can also be used by JNDI
DatabaseRealm to authenticate users -->
            <Resource name="jdbc/MySQLConnectPool" 
                      auth="Container" 
                      type="javax.sql.DataSource" />

            <ResourceParams name="jdbc/MySQLConnectPool" >
                        
                <parameter>
                    <name>username</name>
                    <value>????????</value>
                </parameter>

                <parameter>
                    <name>password</name>
                    <value>????????</value>
                </parameter>

                <parameter>
                    <name>driverClassName</name>
                    <value>com.mysql.jdbc.Driver</value>
                </parameter>

                <parameter>
                    <name>url</name>
                    <value>jdbc:mysql://<your IP here>:3306/<your DB name
here>?autoReconnect=true</value>
                </parameter>
                                
                <parameter>
                    <name>removeAbandoned</name>
                    <value>true</value>
                </parameter>
                                
                <parameter>
                    <name>removeAbandonedTimeout</name>
                    <value>60</value>
                </parameter>
                                
                <parameter>
                    <name>logAbandoned</name>
                    <value>true</value>
                </parameter>
                                
                <parameter>
                    <name>maxActive</name>
                    <value>200</value>
                </parameter>
                                
                <parameter>
                    <name>maxIdle</name>
                    <value>30000</value>
                </parameter>
                                
                <parameter>
                    <name>maxWait</name>
                    <value>100</value>
                </parameter>
                                
            </ResourceParams>

        </GlobalNamingResources>


    Realm definition using global DataSource
    ----------------------------------------

        <Realm  
            className="org.apache.catalina.realm.DataSourceRealm" 
            dataSourceName="jdbc/MySQLConnectPool"
            userTable="customers" 
            userNameCol="customer_username" 
            userCredCol="customer_password"
            userRoleTable="roles" 
            roleNameCol="role" 
            debug="0"
        />


    Context reference to global DataSource
    --------------------------------------

        <ResourceLink name="jdbc/MySQLConnectPool"
                      global="jdbc/MySQLConnectPool"
                      type="javax.sql.DataSource" />
                                                  

Hope this helps!!

Thanks,

Scott Stewart
[Manager, Software Development]
[EMAIL PROTECTED]

ClearSky Mobile Media, Inc.
56 E. Pine St. Suite 200
Orlando, FL 32801
USA



-----Original Message-----
From: Madere, Colin [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, August 13, 2003 5:17 PM
To: 'Tomcat Users List'
Subject: JNDI DataSource Realm


Tomcat 4.1.27
PostgreSQL 7.3.4
pg73jdbc3.jar

Trying to use JNDI as a Realm source for both auth and data access for a
whole server, therefore trying as a GlobalNamingContext attribute.  No love.

* Set up as a JDBC Realm, auth works.
* Set up Datasource as JNDI Resource within <DefaultContext>, data access
works.

Move <Resource> and params to <GlobalNamingContext> and I get the "Name jdbc
is not bound in this Context" error.  Saw lots of refs to this error via
Google, but none relevant AFAICT.  (Do I look up resources in the global
context differently?  If so doesn't that kind of break the idea of it being
an abstractly defined data source?)

Anyone successfully using <GlobalNamingContext> for DataSources? Using these
components (Tomcat 4.1.x, postgreSQL)?

Change Realm from JDBC to DataSourceRealm and auth does not work (or report
any errors in logs).

server.xml (with DataSourceRealm commented out)

<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>

  </GlobalNamingResources>

  <!-- Define the Tomcat Stand-Alone Service -->
  <Service name="Tomcat-Standalone">

    <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
               port="8080" minProcessors="5" maxProcessors="75"
               enableLookups="true" redirectPort="8443"
               acceptCount="100" debug="0" connectionTimeout="20000"
               useURIValidationHack="false" disableUploadTimeout="true" />
    <!-- Note : To disable connection timeouts, set connectionTimeout value
     to -1 -->

    <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
               port="8009" minProcessors="5" maxProcessors="75"
               enableLookups="true" redirectPort="8443"
               acceptCount="10" debug="0" connectionTimeout="0"
               useURIValidationHack="false"
 
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>

    <!-- Define the top level container in our container hierarchy -->
    <Engine name="Standalone" defaultHost="localhost" debug="0">

      <!-- Global logger unless overridden at lower levels -->
      <Logger className="org.apache.catalina.logger.FileLogger"
              prefix="catalina_log." suffix=".txt"
              timestamp="true"/>

      <!-- Because this Realm is here, an instance will be shared globally
-->
      <!--
      <Realm className="org.apache.catalina.realm.DataSourceRealm"
debug="99"
             dataSourceName="java:/comp/env/jdbc/Auth"
             userTable="Account" userNameCol="username"
userCredCol="password"
             userRoleTable="AccountRole" roleNameCol="role_name"/>
      -->

      <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
            driverName="org.postgresql.Driver"
         connectionURL="jdbc:postgresql://localhost/www_auth"
        connectionName="www"
             userTable="Account" userNameCol="username"
userCredCol="password"
         userRoleTable="AccountRole" roleNameCol="role_name"/>

      <!-- Define the default virtual host -->
      <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true"
autoDeploy="true">

        <Valve className="org.apache.catalina.authenticator.SingleSignOn"
debug="0"/>

        <Logger className="org.apache.catalina.logger.FileLogger"
directory="logs"
                   prefix="localhost_log." suffix=".txt" timestamp="true"/>
        <!--
          <Context path="" docBase="ROOT" debug="0"/>
        -->
        <DefaultContext>
          <Resource name="jdbc/Auth" auth="Container"
type="javax.sql.DataSource"/>
          <ResourceParams name="jdbc/Auth">
            <parameter>
              <name>factory</name>
              <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
            </parameter>
            <parameter>
              <name>maxActive</name>
              <value>100</value>
            </parameter>
            <parameter>
              <name>maxIdle</name>
              <value>30</value>
            </parameter>
            <parameter>
              <name>maxWait</name>
              <value>10000</value>
            </parameter>
            <parameter>
              <name>username</name>
              <value>www</value>
            </parameter>
            <parameter>
              <name>password</name>
              <value></value>
            </parameter>
            <parameter>
              <name>driverClassName</name>
              <value>org.postgresql.Driver</value>
            </parameter>
            <parameter>
              <name>url</name>
              <value>jdbc:postgresql://localhost/www_auth</value>
            </parameter>
          </ResourceParams>
        </DefaultContext>
      </Host>
    </Engine>
  </Service>
</Server>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to