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>