I'm trying to set up Tomcat 5 to use a JDBCRealm that points to a MS SQL 
Server 2000 instance.  I also have a datasource set up to the same 
database instance.  I can get one or the other to work, but not both 
together.  If I move the JDBCRealm inside my <Host> or <Context> tag, the 
datasource works, but the security quits working.  If I leave the realm 
outside my <Host> tag, security starts working again, but I get an 
exception on the datasource.  Any ideas on making them work together?  I 
think my JDBCRealm might be in the wrong place but don't know for sure.

Here is my server.xml...
---------------------------------------------------------
<Server port="8005" shutdown="SHUTDOWN">
  <GlobalNamingResources>
    <!-- Used by Manager webapp -->
    <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>
  <Service name="Catalina">
    <Connector port="8080" />
    <!-- This is here for compatibility only, not required -->
    <Connector port="8009" protocol="AJP/1.3" />
    <Engine name="Catalina" defaultHost="localhost">
      <Logger className="org.apache.catalina.logger.FileLogger" />
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
resourceName="UserDatabase" />
      <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" 
driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver" 
connectionURL="jdbc:microsoft:sqlserver://dbserver:1433;DatabaseName=testdb;SelectMethod=Cursor;User=user;Password=pwd"
 
userTable="users" userNameCol="username" userCredCol="password" 
userRoleTable="user_roles" roleNameCol="role"/>
      <Host name="localhost" appBase="/home/testuser/www" 
unpackWARs="false" 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="/home/testuser/www" debug="55555">
        <Logger className="org.apache.catalina.logger.FileLogger" 
prefix="test_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>
             <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>user</value>
             </parameter>
             <parameter>
               <name>password</name>
               <value>pwd</value>
             </parameter>
             <parameter>
               <name>driverClassName</name>
               <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
             </parameter>
             <parameter>
               <name>url</name>
 
<value>jdbc:microsoft:sqlserver://dbserver:1433;DatabaseName=testdb;SelectMethod=Cursor;</value>
             </parameter>
           </ResourceParams>
       </Context>
      </Host>
    </Engine>
  </Service>

Reply via email to