2010-11-01 3 views
4

Я не знаком с Java и весной. Я пытаюсь написать программу, которая использует JdbcTemplate для доступа к данным. Я использую ГСБД пулы, вот оно:Ошибка пула подключения весны

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> 
    <property name="url" value="jdbc:oracle:thin:@192.168.2.7:1521:xe" /> 
    <property name="username" value="manifesto" /> 
    <property name="password" value="manifesto" /> 
    <property name="initialSize" value="2" /> 
    <property name="maxActive" value="4" /> 
</bean> 

Мое приложение выполняет несколько операций обновления, а затем бросает исключение:

7053 [SenderThread-0] DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource 
Exception in thread "SenderThread-0" org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error: 
ORA-12519, TNS:no appropriate service handler found 
The Connection descriptor used by the client was: 
192.168.2.7:1521:xe 
) 
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:572) 
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:811) 
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:867) 
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:875) 
    at org.springframework.jdbc.core.simple.SimpleJdbcTemplate.update(SimpleJdbcTemplate.java:249) 
    at com.talutek.manifesto.dao.firestorm.dao.spring.MessageItemsTableDaoImpl.update(MessageItemsTableDaoImpl.java:52) 
    at com.talutek.manifesto.lib.MessageItemMngr.updateItem(MessageItemMngr.java:115) 
    at com.talutek.manifesto.gw.SenderThread.run(SenderThread.java:42) 
    at java.lang.Thread.run(Thread.java:619) 
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error: 
ORA-12519, TNS:no appropriate service handler found 
The Connection descriptor used by the client was: 
192.168.2.7:1521:xe 
) 
    at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549) 
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) 
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111) 
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77) 
    ... 9 more 
Caused by: java.sql.SQLException: Listener refused the connection with the following error: 
ORA-12519, TNS:no appropriate service handler found 
The Connection descriptor used by the client was: 
192.168.2.7:1521:xe 

    at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) 
    at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:110) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:171) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:496) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:411) 
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:490) 
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:202) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:465) 
    at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) 
    at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) 
    at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) 
    at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) 
    ... 13 more 

При изменении настройки пула (размер пула), приложение может работать некоторые больше времени, но затем он падает. Я думаю, проблема связана с объединением, но я не мог ее решить.

Любые предложения?

+0

Я рекомендовал бы, чтобы удалить URL-адрес базы данных, имя пользователя и пароль от вашего поста. –

+3

@ Камерон: Совершенно верно! Любой пользователь может подключиться к этому адресу 192.168.2.7. – skaffman

+0

@ Скаффман: Не нужно быть саркастичным. Удаление имен пользователей и паролей не вызывает затруднений, и не удастся удалить URL как хорошую практику. –

ответ

1

Поиск Google помог бы: http://www.dba-oracle.com/sf_ora_12519_tns_no_appropriate_service_handler_found.htm

Несколько предложений: Используйте пулы приложений сервера, если это возможно Использование c3p0 чем ДБХП

+1

Как сказано там: «Кроме того, на Oracle DBA Forums есть информация, относящаяся к ORA-12519. Здесь указано, что ORA-12519 может быть вызвано низкими значениями« процессов », которые могут быть устранены путем увеличения его DB параметр «parallel_max_servers». Кроме того, ORA-12519 может быть сброшен из-за того, что DB и клиентские версии не совпадают ». Возможно, это связано с параметром parallel_max_servers. Я попробую, когда вернусь домой. Спасибо – xyzt

5

Та же ошибка произошла для меня, когда много потоков доступ к базе данных одновременно, и у меня был отдельный DBCP BasicDataSource и отдельная пружина JdbcTemplate для каждого потока.

Сделав как BasicDataSource, так и JdbcTemplate общими данными, которыми я пользуюсь всеми темами, я мог бы избежать этой ошибки. Это также рекомендует SpringSource.