You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Matteo Di Giovinazzo <ma...@infinito.it> on 2001/10/17 22:18:49 UTC

Tomcat4+JDBCRealm+MySQL

I have copied mysql.jar, containing org.gjt.mm.mysql.Driver, in
$CATALINA_HOME/common/lib as described in tomcat-docs.

Then I have added in $CATALINA_HOME/conf/server.xml the Realm element as
shown below:

<Realm
    className="org.apache.catalina.realm.JDBCRealm"
    debug="99"
    driverName="org.gjt.mm.mysql.Driver"
    connectionURL="jdbc:mysql://localhost/database"
    connectionName="login"
    connectionPassword="password"
    userTable="users"
    userNameCol="username"
    userCredCol="password"
    userRoleTable="roles"
    roleNameCol="role"
/>

In my logs I have this exception:

LifecycleException:  Exception opening database connection:
java.sql.SQLException: Cannot disable AUTO_COMMIT
    at org.apache.catalina.realm.JDBCRealm.start(JDBCRealm.java:615)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1108)
    at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:307)
    at
org.apache.catalina.core.StandardService.start(StandardService.java:388)
    at
org.apache.catalina.core.StandardServer.start(StandardServer.java:505)
    at
org.apache.catalina.startup.CatalinaService.start(CatalinaService.java:261)
    at
org.apache.catalina.startup.CatalinaService.execute(CatalinaService.java:172
)
    at org.apache.catalina.startup.Catalina.process(Catalina.java:179)
    at java.lang.reflect.Method.invoke(Native Method)
    at
org.apache.catalina.startup.BootstrapService.main(BootstrapService.java:360)
----- Root Cause -----
java.sql.SQLException: Cannot disable AUTO_COMMIT
    at org.gjt.mm.mysql.Connection.setAutoCommit(Connection.java:396)
    at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:549)
    at org.apache.catalina.realm.JDBCRealm.start(JDBCRealm.java:613)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1108)
    at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:307)
    at
org.apache.catalina.core.StandardService.start(StandardService.java:388)
    at
org.apache.catalina.core.StandardServer.start(StandardServer.java:505)
    at
org.apache.catalina.startup.CatalinaService.start(CatalinaService.java:261)
    at
org.apache.catalina.startup.CatalinaService.execute(CatalinaService.java:172
)
    at org.apache.catalina.startup.Catalina.process(Catalina.java:179)
    at java.lang.reflect.Method.invoke(Native Method)
    at
org.apache.catalina.startup.BootstrapService.main(BootstrapService.java:360)

It's my fault? Or perhaps a bug on MySQL or on Tomcat??

Thanks in advance,
matteodg.it



Re: Tomcat4+JDBCRealm+MySQL

Posted by Paul DuBois <pa...@snake.net>.
>I have copied mysql.jar, containing org.gjt.mm.mysql.Driver, in
>$CATALINA_HOME/common/lib as described in tomcat-docs.
>
>Then I have added in $CATALINA_HOME/conf/server.xml the Realm element as
>shown below:
>
><Realm
>     className="org.apache.catalina.realm.JDBCRealm"
>     debug="99"
>     driverName="org.gjt.mm.mysql.Driver"
>     connectionURL="jdbc:mysql://localhost/database"
>     connectionName="login"
>     connectionPassword="password"
>     userTable="users"
>     userNameCol="username"
>     userCredCol="password"
>     userRoleTable="roles"
>     roleNameCol="role"
>/>
>
>In my logs I have this exception:
>
>LifecycleException:  Exception opening database connection:
>java.sql.SQLException: Cannot disable AUTO_COMMIT

I just tried this, albeit with somewhat different column names.
Authentication worked, I did not get the error you see.  I thought
perhaps your error might occur if the table was not one of the transactional
types, but I used MyISAM (non-transactional) and it will worked.

For reference, here's my Realm element (modified to protect db name,
user name, pwd):

<Realm
     className="org.apache.catalina.realm.JDBCRealm"
     debug="99"
     driverName="org.gjt.mm.mysql.Driver"
     connectionURL="jdbc:mysql://localhost/db_name"
     connectionName="some_user"
     connectionPassword="some_pass"
     userTable="tomcat_users"
     userNameCol="user_name"
     userCredCol="user_pass"
     userRoleTable="tomcat_roles"
     roleNameCol="role_name"
/>

My tables look like this:

CREATE TABLE tomcat_users
(
     user_name   VARCHAR(30) NOT NULL PRIMARY KEY,
     user_pass   VARCHAR(30) NOT NULL
);

INSERT INTO tomcat_users (user_name, user_pass)
     VALUES ('mgr_user', 'xxxxxxxx');

SELECT * FROM tomcat_users;

CREATE TABLE tomcat_roles
(
     user_name   VARCHAR(30) NOT NULL,
     role_name   VARCHAR(30) NOT NULL,
     PRIMARY KEY (user_name, role_name)
);

INSERT INTO tomcat_roles (user_name, role_name)
     VALUES ('mgr_user', 'manager');

Here are the queries I see in the MySQL log when I attempt to use the
manager application:

011017 17:01:55	  72516 Query       SELECT user_pass FROM 
tomcat_users WHERE user_name = null
011017 17:02:00	  72516 Query       SELECT user_pass FROM 
tomcat_users WHERE user_name = 'mgr_user'
		  72516 Query       SELECT role_name FROM 
tomcat_roles WHERE user_name = 'mgr_user'
		  72516 Query       commit

>     at org.apache.catalina.realm.JDBCRealm.start(JDBCRealm.java:615)
>     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1108)
>     at
>org.apache.catalina.core.StandardEngine.start(StandardEngine.java:307)
>     at
>org.apache.catalina.core.StandardService.start(StandardService.java:388)
>     at
>org.apache.catalina.core.StandardServer.start(StandardServer.java:505)
>     at
>org.apache.catalina.startup.CatalinaService.start(CatalinaService.java:261)
>     at
>org.apache.catalina.startup.CatalinaService.execute(CatalinaService.java:172
>)
>     at org.apache.catalina.startup.Catalina.process(Catalina.java:179)
>     at java.lang.reflect.Method.invoke(Native Method)
>     at
>org.apache.catalina.startup.BootstrapService.main(BootstrapService.java:360)
>----- Root Cause -----
>java.sql.SQLException: Cannot disable AUTO_COMMIT
>     at org.gjt.mm.mysql.Connection.setAutoCommit(Connection.java:396)
>     at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:549)
>     at org.apache.catalina.realm.JDBCRealm.start(JDBCRealm.java:613)
>     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1108)
>     at
>org.apache.catalina.core.StandardEngine.start(StandardEngine.java:307)
>     at
>org.apache.catalina.core.StandardService.start(StandardService.java:388)
>     at
>org.apache.catalina.core.StandardServer.start(StandardServer.java:505)
>     at
>org.apache.catalina.startup.CatalinaService.start(CatalinaService.java:261)
>     at
>org.apache.catalina.startup.CatalinaService.execute(CatalinaService.java:172
>)
>     at org.apache.catalina.startup.Catalina.process(Catalina.java:179)
>     at java.lang.reflect.Method.invoke(Native Method)
>     at
>org.apache.catalina.startup.BootstrapService.main(BootstrapService.java:360)
>
>It's my fault? Or perhaps a bug on MySQL or on Tomcat??
>
>Thanks in advance,
>matteodg.it


-- 
Paul DuBois, paul@snake.net