Skip to Main Content

Java Database Connectivity (JDBC)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

MySql driver not found in WEB-INF/lib

843859Apr 11 2006 — edited Apr 12 2006
Hello

This topic is very often met on this forum but there are no
suitable answers for the problem I have. I am creating
a Jsf application and I have setup a connection pool using
the MySql jar. I want to supply the jar with the war and I keep
it in WEB-INF/lib directory but I still get ClassNotFoundException.

I am running this on a Debian machine with Sun JVM 1.5,
Tomcat 5.0, Mysql 4.1, Connector/J - nightly build from
20060403 (since the stable version has bugs with Charset).

Here are the confings. If I missed some of them, pleaste tell
me.

War task in build.xml
    <target name="war" depends="build">
      <mkdir dir="${build.dir}"/>
      <war
        basedir="${webroot.dir}"
        warfile="${build.dir}/${project.distname}.war"
        webxml="${webinf.dir}/web.xml">
        <metainf dir="${meta.dir}">
          <include name="context.xml"/>
        </metainf>
        <exclude name="WEB-INF/${build.dir}/**"/>
        <exclude name="WEB-INF/src/**"/>
        <exclude name="WEB-INF/web.xml"/>
      </war>
    </target>
context.xml
<Context  path="/jsfblog" docBase="jsfblog.war" reloadable="false" crossContext="true" useNaming="true">

  <Resource name="jdbc/jsfblog" auth="Container" type="javax.sql.DataSource"/>
  <ResourceParams name="jdbc/jsfblog">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>

    <parameter>
      <name>url</name>
      <value>jdbc:mysql://localhost/jsfblog</value>
    </parameter>
    <parameter>
      <name>driverClassName</name><value>com.mysql.jdbc.Driver</value>
    </parameter>
    <parameter>
      <name>username</name>
      <value>blog</value>
    </parameter>
    <parameter>
      <name>password</name>
      <value>blog</value>
    </parameter>

    <parameter>
      <name>maxWait</name>
      <value>3000</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>100</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>10</value>
    </parameter>
  </ResourceParams>
</Context>
hibernate.cfg.xml
<hibernate-configuration>
    <session-factory>
        <property name="connection.datasource">java:comp/env/jdbc/jsfblog</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="show_sql">true</property>
        <mapping resource="......"/>
    </session-factory>
</hibernate-configuration>
web.xml
I am not sure if I really need this.
<web-app>
  <!-- Connection pool configuration  -->
  <resource-ref>
    <description>JSF Blog Database</description>
    <res-ref-name>jdbc/jsfblog</res-ref-name>
    <res-ref-type>javax.sql.DataSource</res-ref-type>
    <res-auth>Container</res-auth>
  </resource-ref>
  <!--  jsf and facelets declarations  -->
jsfblog.policy
Not all the rules apply at the same time. I also tried to
setup the mysql jar in ${catalina.home}/common/lib
directory and it was loaded but I need to make it work
in WEB-INF/lib location.
grant 
{
	permission java.io.FilePermission "${catalina.home}/webapps/jsfblog/WEB-INF/lib/mysql-connector-java-3.1.12-bin.jar", "read";
	permission java.io.FilePermission "${catalina.home}/webapps/jsfblog/WEB-INF/lib/mysql-connector-java-3.1-nightly-20060403-bin.jar", "read";
	permission java.net.SocketPermission "localhost:3306", "connect,resolve";
};
grant codeBase "jar:file:${catalina.home}/webapps/jsfblog/WEB-INF/lib/hibernate3.jar!/-" {
	permission java.lang.RuntimePermission "accessDeclaredMembers";
	permission java.util.PropertyPermission "*", "read,write";
	permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};
grant codeBase "jar:file:${catalina.home}/webapps/jsfblog/WEB-INF/lib/mysql-connector-java-3.1-nightly-20060403-bin.jar!/-"
{
	permission java.net.SocketPermission "localhost:3306", "connect,resolve";
	permission java.lang.RuntimePermission "accessDeclaredMembers";
	permission java.util.PropertyPermission "*", "read,write";
	permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};
Project layout
.
|-- build
|   `-- jsfblog.war
|-- build.xml
|-- conf
|   `-- 99jsfblog.policy
|-- deploy
|   `-- jsfblog.war
|-- doc
|   |-- WEB-INF
|   |   |-- classes
|   |   |   |-- beans
|   |   |   |   `-- CategoryBean.class
|   |   |   |-- blog
|   |   |   |   |-- Category.class
|   |   |   |   |-- Category.hbm.xml
|   |   |   |   |-- Comment.class
|   |   |   |   |-- Comment.hbm.xml
|   |   |   |   |-- Post.class
|   |   |   |   `-- Post.hbm.xml
|   |   |   |-- hibernate.cfg.xml
|   |   |   |-- log4j.properties
|   |   |   `-- util
|   |   |       |-- HibernateSessionFactory.class
|   |   |       |-- HibernateUtil.class
|   |   |       `-- Service.class
|   |   |-- faces-config.xml
|   |   |-- lib
|   |   |   |-- antlr-2.7.5.jar
|   |   |   |-- asm-attrs.jar
|   |   |   |-- asm.jar
|   |   |   |-- cglib-2.1.3.jar
|   |   |   |-- common-annotations.jar
|   |   |   |-- commons-beanutils.jar
|   |   |   |-- commons-collections-2.1.1.jar
|   |   |   |-- commons-digester.jar
|   |   |   |-- commons-lang.jar
|   |   |   |-- commons-logging-1.0.4.jar
|   |   |   |-- commons-validator.jar
|   |   |   |-- dom4j-1.6.1.jar
|   |   |   |-- el-api.jar
|   |   |   |-- el-ri.jar
|   |   |   |-- hibernate3.jar
|   |   |   |-- jsf-api.jar
|   |   |   |-- jsf-facelets.jar
|   |   |   |-- jsf-impl.jar
|   |   |   |-- jsf-tlds.jar
|   |   |   |-- jstl.jar
|   |   |   |-- jta.jar
|   |   |   |-- log4j-1.2.11.jar
|   |   |   |-- mysql-connector-java-3.1-nightly-20060403-bin.jar
|   |   |   `-- standard.jar
|   |   `-- web.xml
|   |-- admin
|   |   |-- admintemplate.xhtml
|   |   |-- category.xhtml
|   |   |-- index.xhtml
|   |   `-- skeleton.xhtml
|   |-- index.jsp
|   `-- layout.css
|-- lib
|   `-- servlet.jar
|-- meta
|   `-- context.xml
`-- src
    |-- beans
    |   `-- CategoryBean.java
    |-- blog
    |   |-- Category.hbm.xml
    |   |-- Category.java
    |   |-- Comment.hbm.xml
    |   |-- Comment.java
    |   |-- Post.hbm.xml
    |   `-- Post.java
    |-- hibernate.cfg.xml
    |-- log4j.properties
    `-- util
        `-- HibernateUtil.java
And, finally, the error message:
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	at org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:854)
	at org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:721)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:164)
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:760)
	... 60 more
I don't really understand how I can setup the CLASSPATH in this
context. So there should be something else. Does anyone have an
idea?

Thanks.

Igor
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 10 2006
Added on Apr 11 2006
14 comments
776 views