简体   繁体   中英

Getting error while connecting Vibur DBCP to Oracle DB

I am trying to setup Vibur DBCP to work against an Oracle 11g DB instance but I keep getting an Oracle exception.

This is the URL = jdbc:oracle:thin:@//db.vonagenetworks.net/MY_SERVICE

This URL works when I use it with our Tomcat Connection Pool.

I get the following error….

org.vibur.dbcp.ViburDBCPException: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12516, TNS:listener could not find available handler with matching protocol stack

    at org.vibur.dbcp.pool.ConnectionFactory.create(ConnectionFactory.java:114) ~[vibur-dbcp-1.1.1.jar:?]
    at org.vibur.dbcp.pool.ConnectionFactory.create(ConnectionFactory.java:53) ~[vibur-dbcp-1.1.1.jar:?]
    at org.vibur.objectpool.ConcurrentLinkedPool.create(ConcurrentLinkedPool.java:119) ~[vibur-object-pool-2.0.0.jar:?]
    at org.vibur.objectpool.ConcurrentLinkedPool.<init>(ConcurrentLinkedPool.java:110) ~[vibur-object-pool-2.0.0.jar:?]
    at org.vibur.dbcp.pool.PoolOperations.<init>(PoolOperations.java:73) ~[vibur-dbcp-1.1.1.jar:?]
    at org.vibur.dbcp.ViburDBCPDataSource.start(ViburDBCPDataSource.java:196) ~[vibur-dbcp-1.1.1.jar:?]
    at contactmanager.dao.DataSourceInitializer.initializeDataSources(DataSourceInitializer.java:96) [DataSourceInitializer.class:?]
    at contactmanager.dao.DataSourceInitializer.init(DataSourceInitializer.java:49) [DataSourceInitializer.class:?]
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) [servlet-api.jar:3.0.FR]
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280) [catalina.jar:7.0.47]
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193) [catalina.jar:7.0.47]
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088) [catalina.jar:7.0.47]
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176) [catalina.jar:7.0.47]
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460) [catalina.jar:7.0.47]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:7.0.47]
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) [catalina.jar:7.0.47]
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) [catalina.jar:7.0.47]
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) [catalina.jar:7.0.47]
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:983) [catalina.jar:7.0.47]
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1660) [catalina.jar:7.0.47]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [?:1.7.0_17]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [?:1.7.0_17]
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) [?:1.7.0_17]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_17]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_17]
    at java.lang.Thread.run(Thread.java:722) [?:1.7.0_17]
Caused by: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12516, TNS:listener could not find available handler with matching protocol stack

    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:458) ~[ojdbc6.jar:11.2.0.3.0]
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546) ~[ojdbc6.jar:11.2.0.3.0]
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236) ~[ojdbc6.jar:11.2.0.3.0]
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) ~[ojdbc6.jar:11.2.0.3.0]
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521) ~[ojdbc6.jar:11.2.0.3.0]
    at java.sql.DriverManager.getConnection(DriverManager.java:579) ~[?:1.7.0_17]
    at java.sql.DriverManager.getConnection(DriverManager.java:221) ~[?:1.7.0_17]
    at org.vibur.dbcp.pool.ConnectionFactory.doCreate(ConnectionFactory.java:139) ~[vibur-dbcp-1.1.1.jar:?]
    at org.vibur.dbcp.pool.ConnectionFactory.create(ConnectionFactory.java:110) ~[vibur-dbcp-1.1.1.jar:?]
    ... 25 more
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12516, TNS:listener could not find available handler with matching protocol stack

    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:395) ~[ojdbc6.jar:11.2.0.3.0]
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102) ~[ojdbc6.jar:11.2.0.3.0]
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320) ~[ojdbc6.jar:11.2.0.3.0]
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546) ~[ojdbc6.jar:11.2.0.3.0]
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236) ~[ojdbc6.jar:11.2.0.3.0]
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) ~[ojdbc6.jar:11.2.0.3.0]
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521) ~[ojdbc6.jar:11.2.0.3.0]
    at java.sql.DriverManager.getConnection(DriverManager.java:579) ~[?:1.7.0_17]
    at java.sql.DriverManager.getConnection(DriverManager.java:221) ~[?:1.7.0_17]
    at org.vibur.dbcp.pool.ConnectionFactory.doCreate(ConnectionFactory.java:139) ~[vibur-dbcp-1.1.1.jar:?]
    at org.vibur.dbcp.pool.ConnectionFactory.create(ConnectionFactory.java:110) ~[vibur-dbcp-1.1.1.jar:?]
    ... 25 more

This appears to be a common problem when the Oracle database server has run out of available processes and for this reason no more new connections can be made to the server. Please check this and this link for more details.

The second link suggests that the number of processes in Oracle database can be increased via: alter system set processes=100 scope=spfile;

I am thinking that it will be best to set the number of processes in Oracle to a slightly higher number than what is the maximum number of connections which you have configured for vibur-dbcp, ie if you have configured poolMaxSize=100, then set the number of processes in Oracle to, say, 150. If more than one application connects to the same Oracle database server, you may need to multiply poolMaxSize by the number of connecting applications and then to add some spare extra 50 or 100 to it.

Please let me know whether this has helped.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM