Hibernate Jndi Tomcat错误:BasicDataSource不支持

时间:2017-02-27 06:46:09

标签: java hibernate tomcat jndi

实际上我试图通过JNDI建立一个hibernate和jdbc连接池,但是我没有成功。经过几个小时的研究,我来找你,也许有人确实知道答案。

首先要做的事情是:我使用的是Tomcat 8.0和Hibernate 5.2.8。如果需要让它发挥作用,我实际上不能替代那些。

我得到的错误是:“java.lang.UnsupportedOperationException:BasicDataSource不支持”

到目前为止我发现:由于DatasourceConnectionProviderImpl.getConnection的更改,似乎发生了错误(我不是100%肯定),其中“getConnection(用户名,密码”是“已删除”(实际上,它只是抛出)这个错误)。

但是这里是捕获,即使我不传输任何参数,我得到这个例外。我试图制作我自己的“javax.sql.DataSource”接口来克服这个问题,但这也没有帮助。

另一件事:JDBC工作正常,唯一的问题是休眠。

跟进上下文,网络和班级信息:

背景:

<Resource name="jdbc/basic"
        global="jdbc/basic"
        auth="Container" 
        type="javax.sql.DataSource" 
        maxActive="10"
        maxIdle="20"
        maxWait="10000"
        username="root"
        password="1" 
        driverClassName="com.mysql.jdbc.Driver"
        testOnBorrow="true"
        url="jdbc:mysql://localhost/javatest"
    />

Web:

  <resource-ref>
      <description>JNDI MYSql JDBC Connection</description>
      <res-ref-name>jdbc/basic</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>

代码:

public TestClass() {
    try {
         Connection jdbc = ((javax.sql.DataSource) new InitialContext().lookup("java:comp/env/jdbc/basic")).getConnection();
         System.out.println(new Configuration().configure("managedbeans/hibernate.cfg.xml").buildSessionFactory().openSession().createQuery("Select * from Testdata").list().size());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

如果需要更多信息,我很乐意提供

伊迪丝:

如要求:

<hibernate-configuration> 
    <session-factory>

        <property name="hibernate.connection.datasource">java:comp/env/jdbc/basic</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property> 
        <property name="current_session_context_class">thread</property>
        <property name="hbm2ddl.auto">update</property> 
        <property name="hibernate.max_fetch_depth">3</property>

        <!-- Mapped annotated entity-->
        <mapping class="managedbean.TestPojo"/>

    </session-factory> 
</hibernate-configuration>

1 个答案:

答案 0 :(得分:1)

可能与此处提到的相同:tomcat-connection-pooling-java-lang-unsupportedoperationexception-not-support

其中一个答案摘要: 如果hibernate确实在类路径中找到属性hibernate.connection.username或/和hibernate.connection.password,则它使用不推荐使用的getConnection(user,password)方法。