簡體   English   中英

Tomcat連接池-java.lang.UnsupportedOperationException:BasicDataSource不支持

[英]Tomcat Connection Pooling - java.lang.UnsupportedOperationException: Not supported by BasicDataSource

我已經嘗試過使用C3po庫進行連接池,但是我遇到了諸如abstractMethodError()類的錯誤,然后決定使用tomcat池。 現在我得到一個

    java.lang.UnsupportedOperationException: Not supported by BasicDataSource
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1062)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139)
    at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:194)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:522)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)
    at classes.session.SessionCreate.buildSessionFactory1(SessionCreate.java:24)
    at classes.session.SessionCreate.<clinit>(SessionCreate.java:9)
    at classes.verifydata.CheckUniqueUserPass.uniqueUserPass(CheckUniqueUserPass.java:16)
    at org.apache.jsp.DataGen.CheckUserPassAvailable_jsp._jspService(CheckUserPassAvailable_jsp.java:70)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
    10:56:19,762  INFO [http-bio-8081-exec-5] StatisticalLoggingSessionEventListener:275 - Session Metrics {
        42607 nanoseconds spent acquiring 1 JDBC connections;
        0 nanoseconds spent releasing 0 JDBC connections;
        0 nanoseconds spent preparing 0 JDBC statements;
        0 nanoseconds spent executing 0 JDBC statements;
        0 nanoseconds spent executing 0 JDBC batches;
        0 nanoseconds spent performing 0 L2C puts;
        0 nanoseconds spent performing 0 L2C hits;
        0 nanoseconds spent performing 0 L2C misses;
        0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
        0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)
    }
    Jan 06, 2015 10:56:19 AM org.apache.catalina.core.StandardWrapperValve invoke

我有這樣的Hibernate配置文件

 <?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>
        <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="hibernate.connection.datasource">java:comp/env/jdbc/secure_pass</property>
        <property name="hibernate.connection.url">connectionurl</property>
        <property name="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
        <property name="hibernate.connection.username"></property>
        <property name="hibernate.connection.password"></property>

        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="net.sf.jasperreports.hql.query.run.type">list</property>
        <property name="net.sf.jasperreports.jdbc.fetch.size">50</property>
        <property name="net.sf.jasperreports.hql.clear.cache">true</property>
        <property name="net.sf.jasperreports.hql.query.list.page.size">50</property>

        ......

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

我也有context-xml文件:

 <?xml version="1.0" encoding="UTF-8"?> 
    <Context antiJARLocking="true" path="/DVDStore">

  <Resource 
  auth="Container"
  driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
  maxActive="30" maxIdle="10" 
  maxWait="10000" 
  name="jdbc/secure_pass" 
  password=""
  type="javax.sql.DataSource" 
  url="_DEV;" 
  username="r"/>
</Context>

不用擔心這里的值...現在我遇到了以上異常:請幫助。 我已經完成了此鏈接所需的所有操作

我不得不調試一個類似的問題,可能的情況是,您的hibernate.properties在類路徑中的某個位置,可能在第三方jar之一中。

在我的情況下,開發人員添加了支持測試罐以及帶有hibernate.properties的第三方罐。

罪犯正在填充屬性hibernate.connection.usernamehibernate.connection.password

如果這些屬性填充了非null值,hibernate將調用

@Override
    public Connection getConnection() throws SQLException {
        if ( !available ) {
            throw new HibernateException( "Provider is closed!" );
        }
        return useCredentials ? dataSource.getConnection( user, pass ) : dataSource.getConnection();
    }

dataSource.getConnection( user, pass ) useCredentials為true

org.apache.commons.dbcp.BasicDataSource中的此方法如下

public Connection getConnection(String user, String pass) throws SQLException {
        // This method isn't supported by the PoolingDataSource returned by
        // the createDataSource
        throw new UnsupportedOperationException("Not supported by BasicDataSource");
        // return createDataSource().getConnection(username, password);
    }

屬性useCredentials填充為

    user = (String) configValues.get( Environment.USER );
    pass = (String) configValues.get( Environment.PASS );
    useCredentials = user != null || pass != null;

在方法中

公共無效的配置(映射configValues)

Spring將調用getConnection(String username,String password)方法來建立與數據庫的連接。 但是dbcp .jar中的默認getConnection(String username,String password)方法會拋出UnsupportedOperationException。 因此,您需要按如下方法重寫該方法:

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;
import org.apache.commons.dbcp.BasicDataSource;

public class MyDataSource extends BasicDataSource {

@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
    // TODO Auto-generated method stub
    return null;
}

@Override
public Connection getConnection(String username, String password) throws SQLException {
    // TODO Auto-generated method stub
    return createDataSource().getConnection();
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM