2010-11-01 27 views
4

Je n'ai pas d'expérience Java et Spring. J'essaie d'écrire un programme qui utilise JdbcTemplate pour l'accès aux données. J'utilise la mise en commun de DBCP, la voici:Problème de mise en commun des connexions de ressort

<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> 

Mon application effectuer plusieurs opérations de mise à jour et lance une exception:

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 

Quand je change les paramètres de piscine (taille de la piscine), l'application peut exécuter certains plus de fois mais il se bloque alors. Je pense que le problème est lié à la mise en commun, mais je ne pouvais pas le résoudre.

Des suggestions?

+0

Je vous recommande de supprimer l'URL de base de données, nom d'utilisateur et mot de passe de votre poste. –

+3

@Cameron: Tout à fait raison! N'importe qui pourrait se connecter à cette adresse 192.168.2.7. – skaffman

+0

@Skaffman: Pas besoin d'être sarcastique. La suppression des noms d'utilisateur et des mots de passe est une évidence, et il ne sera pas douloureux de supprimer l'URL comme bonne pratique. –

Répondre

1

Une recherche google aurait aidé: http://www.dba-oracle.com/sf_ora_12519_tns_no_appropriate_service_handler_found.htm

Quelques suggestions: Utiliser des pools de serveurs d'application si possible utilisation c3p0 que DBCP

+1

Comme il a été dit: "De plus, sur les forums Oracle DBA, il y a des informations sur l'ORA-12519.Ora-12519 peut être causé par de faibles valeurs" process ", qui peuvent être résolues en augmentant la DB paramètre, "parallel_max_servers" En outre, ORA-12519 peut être lancé en raison de DB et des versions de client qui ne correspondent pas. ", il peut être lié à parallel_max_servers param. Je vais essayer quand je rentre à la maison.Merci – xyzt

5

La même erreur pour moi quand beaucoup de fils d'accéder simultanément à la base de données, et j'avais un DBCP séparé BasicDataSource et un ressort séparé JdbcTemplate pour chaque thread. En rendant à la fois le BasicDataSource et le JdbcTemplate un singleton partagé par tous les threads, j'ai pu éviter cette erreur. C'est aussi ce que recommande SpringSource.