2010-09-16 4 views
1

Я работаю над проектом, который использует Java, Spring и Hibernate. Я просто натолкнулся на такую ​​ситуацию.Проблема с подключением SQL

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

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

, но при выполнении получаю следующее исключение

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) 

Предположим, кошки и собаки два различно интерфейсы

К сожалению, у нас есть два менеджера транзакций?

ответ

-2

Хотя это примерно WebLogic ответ может соответствовать вашей проблемы: http://objectmix.com/weblogic/549975-connection-has-already-been-created-tx-context-pool-named.html

И ответ в основном: Нет, вы не можете

Проблема заключается в том, что вы не можете использовать два пулов соединений в одном сделка. = Решение состоит в том, чтобы иметь отдельный метод в компоненте , который используется для вызова profilePool, и этот метод установлен в TRANSACTION-NOTSUPPORTED, так что работа только для чтения в пуле профилей происходит за пределами транзакции o = п vcheqPool (я думаю, что сообщение ошибки говорит, что profilePool является только для чтения один - если не свопа «profilePool и vcheqPool вокруг, где они появились раньше)

для того, чтобы использовать соединение из двух или нескольких баз данных в одном , вам необходимо будет сделать следующее:

  • Оба водителя должен быть XA совместимым
  • Вы должны использовать TXDataSources
  • Вам нужен глобальная транзакция, либо через контейнер (SessionBean с «Требуется») или через UserTransaction

Когда вы встречаете все эти требования, вы сможете использовать соединения из нескольких источников данных в одной транзакции.

+0

Домен связи в ответ мертв. – Pang

Смежные вопросы