2010-09-16 14 views
1

Je travaille sur un projet qui utilise Java, Spring et Hibernate. Je suis juste tombé sur une situation comme celle-ci.Problème avec la connexion SQL

haricot 1:

<bean id="cat" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
    <property name="proxyInterfaces"> 
     <list> 
      <value>cat</value> 
     </list> 
    </property> 
    <property name="transactionManager"> 
     <ref bean="transactionManager"/> 
    </property> 
    <property name="transactionAttributeSource"> 
     <ref bean="attributeSource"/> 
    </property>       
</bean> 

haricot 2:

<bean id="dog" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
    <property name="proxyInterfaces"> 
     <list> 
      <value>dog</value> 
     </list> 
    </property> 
    <property name="transactionManager"> 
     <ref bean="transactionManager"/> 
    </property> 
    <property name="transactionAttributeSource"> 
     <ref bean="attributeSource"/> 
    </property>       
</bean> 

mais lors de l'exécution d'une obtenant l'exception suivante

org.springframework.jdbc.support.SQLErrorCodesFactory] Error while extracting database product name - falling back to empty error codes 
org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; 
    nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; 
    nested exception is java.sql.SQLException: Connection has already been created in this tx context for pool Illegal attempt to create connection from another pool 
Caused by: 
    at weblogic.jdbc.jts.Driver.getExistingConnection(Driver.java:613) 

Supposons chat et de chien sont deux interfaces differnt

ne pouvons-nous avoir deux gestionnaire de transactions ouvert ??

Répondre

-2

Bien que ce soit au sujet weblogic la réponse pourrait correspondre à votre problème: http://objectmix.com/weblogic/549975-connection-has-already-been-created-tx-context-pool-named.html

Et la réponse est essentiellement: Non, vous ne pouvez pas

Le problème est que vous ne pouvez pas utiliser deux pools de connexion dans une transaction . = Une solution consiste à avoir une méthode séparée dans le bean qui est utilisée pour appeler profilPool, et avoir cette méthode à TRANSACTION-NOTSUPPORTED, de sorte que le travail en lecture seule sur le pool de profil ait lieu en dehors de la transaction o = n vcheqPool (je pense que le message d'erreur dit que profilePool est la lecture seule - sinon swap « profilePool et vcheqPool autour où ils sont apparus plus tôt)

pour utiliser les connexions à partir de deux bases de données ou plus dans un Transaction , vous devrez effectuer les opérations suivantes:

  • Les deux pilotes doivent être XA conformes
  • Vous devez utiliser TXDataSources
  • Vous avez besoin d'une transaction globale, que ce soit à travers le récipient (SessionBean avec « Nécessite ») ou par UserTransaction

Lorsque vous rencontrez tous ces exigences, vous serez en mesure d'utiliser connexions de plus d'un DataSource en une seule transaction.

+0

Le domaine du lien dans la réponse est mort. – Pang