【问题标题】:Hibernate with JNDI: Cannot create JDBC driver of class '' for connect URL 'null'使用 JNDI 休眠:无法为连接 URL 'null' 创建类 '' 的 JDBC 驱动程序
【发布时间】:2011-07-25 15:43:13
【问题描述】:

我尝试使用 Hibernate 通过 JNDI 使用 MySQL,但不能(来自 catalina.out):

INFO: Deploying web application archive mystamps.war
Cannot create JDBC driver of class '' for connect URL 'null'
java.lang.NullPointerException
    at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507)
    at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476)
    at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307)

(我减少了完整的堆栈跟踪,因为它没用:没有原因或任何其他异常。)

spring-servlet.xml:

    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/mystamps" />

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="ru.mystamps.web.dao" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.use_sql_comments">true</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <prop key="hibernate.hbm2ddl.auto">validate</prop>
                <prop key="hibernate.connection.charSet">UTF-8</prop>
            </props>
        </property>
    </bean>

/etc/tomcat6/server.xml:

<Host name="my-stamps" appBase="webapps"
    unpackWARs="false" xmlValidation="false"
    xmlNamespaceAware="false">
</Host>

/etc/tomcat6/Catalina/my-stamps/mystamps.xml:

<?xml version='1.0' encoding='utf-8'?>
<Context path="" docBase="mystamps" allowLinking="true" reloadable="true">
    <Resource name="jdbc/mystamps" auth="Containter"
        type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000"
        username="root" password="password" driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/mystamps" />
</Context>

我使用以下版本:Spring MVC 3.0.5、Hibernate 3.6.2.Final、MySQL 5.1.52、mysql-connector-java 5.1.15(位于 /usr/share/tomcat6/lib)和 Tomcat 6.0。 30

我使用谷歌并尝试自己修复它,但没有运气:(

你能帮我吗——我做错了什么?

TIA

【问题讨论】:

  • 使用直接 JDBC 时数据源是否按预期工作?
  • @Piyush 是的,它适用于普通 JDBC。

标签: hibernate spring tomcat jndi


【解决方案1】:

您是否尝试过将 mysql-connector jar 文件放在打包好的 war 文件的 WEB-INF/lib 文件夹中?

或者以下链接可能会有所帮助:http://ubuntuforums.org/showthread.php?t=430133

【讨论】:

  • 感谢您的回复!我尝试了两者,但它并没有解决我的问题:(
【解决方案2】:

当我将声明 JNDI 的位置移动到 context.xml 并且我的错误消失时,出现了同样的错误。这个错误意味着spring找不到JNDI信息。 server.xml 中不需要链接

/etc/tomcat6/context.xml

<?xml version='1.0' encoding='utf-8'?>
<Context path="" docBase="mystamps" allowLinking="true" reloadable="true">
    <Resource name="jdbc/mystamps" auth="Containter"
        type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000"
        username="root" password="password" driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/mystamps" />
</Context>

参考:http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 2011-11-08
    • 2018-01-14
    • 2011-05-14
    • 2019-01-25
    • 2011-07-06
    • 2015-04-15
    • 2015-12-18
    相关资源
    最近更新 更多