2010-08-07 4 views
3

Мы используем JBoss 4 и Oracle с источником данных JNDI, настроенным через XML-файл данных JBoss.Пул подключений пула базы данных JBoss

Недавно было установлено, что все соединения, полученные из источника данных по умолчанию, имеют свойство автоматической фиксации, установленное в значение true. Однако мы полагаемся на хранимые процедуры Oracle и хотим контролировать коммиты в хранимых процедурах.

Мы используем простые вызовы JDBC, а также упаковку Spring StoredProcedure для вызова хранимых процедур от JBoss. Попытка установить автоматическую фиксацию из Jaboss datasource XML на самом деле не работала.

Я могу видеть только, что для каждого соединения, которое мы получаем из datasource, мы можем установить свойство auto-commit на false, но кто-то знает, как мы могли бы настроить это в одном месте?

Edit: Я добавляю конфигурацию источника данных мы используем:

<local-tx-datasource> 
    <jndi-name>some name</jndi-name> 
    <connection-url>jdbc:oracle:thin:@(description=(address_list=(address=(protocol=tcp)(port=1521)(host=xxx))(address=(protocol=tcp)(port=1521)(host=xxx)))(load_balance = yes)(connect_data=(SERVICE_NAME=xxx)(SERVER=DEDICATED)))</connection-url> 
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> 
    <user-name>xxxr</user-name> 
    <password>xxx</password> 
    <!-- Checks the Oracle error codes and messages for fatal errors --> 
    <exception-sorter-class-name> 
     org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter 
    </exception-sorter-class-name> 
    <min-pool-size>5</min-pool-size> 
    <max-pool-size>25</max-pool-size> 
    <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml --> 
    <metadata> 
     <type-mapping>Oracle10g</type-mapping> 
    </metadata> 
</local-tx-datasource> 

Мы также используется, но никаких изменений ...

ответ

2

Есть три основных типа: источник данных

  • < no-tx-datasource>
  • < local-tx-datasource>
  • < ха-DataSource>

JBoss Community ConfigDataSources

Ваш файл развернуть/оракул-ds.xml должен использовать либо < локальный_файл TX-источника данных> или < XA-источник данных>, чтобы получить соединение с автоматической фиксацией установите значение false.

См. Ответ Скотта Старка в этом сообщении: How to Declaratively set autoCommit to false или J2EETM Connector Architecture Specification Version 1.5 раздел 15.5.3.1 для исходного источника.

+0

Спасибо за ответ, я должен сказать, что я ушел за эти ресурсы и до сих пор единственным способом я вижу, чтобы установить свойство autocommit соединения программно для каждого соединения, которое я извлекаю из источника данных JBoss (версия 4). В идеале я ожидал бы, что это свойство автоматической фиксации будет управляться с помощью источника данных Jaboss или конфигурации пула соединений - но может быть, мне не повезло на этом ... – Erdem

+0

Вы сказали: «Попытка установить автоматическую фиксацию из JBoss datasource XML на самом деле не работает ». Не могли бы вы рассказать нам немного больше о том, что не сработало? Кроме того, можно ли разместить свою конфигурацию источника данных? JBoss 4.x и Oracle 9/10 всегда работали правильно для меня, поэтому я подозреваю, что это что-то в конфигурации. – richj

+0

Последнее, если вы выдаете команды DDL в своем соединении, у вас могут быть проблемы, так как они не очень хорошо работают со стандартными командами SQL, выпущенными внутри транзакций. – richj

0

Вы можете создать свой собственный DataSource, который подклассифицирован из того, который вы используете. Сохраните это в JNDI. Единственный метод, который вы должны переопределить это GetConnection(), который будет делать:

Connection public getConnection() 
{ 
    Connection conn = super.getConnection(); 
    conn.setAutoCommit(true); 
    return conn; 
} 
0

В моем случае я использовал JBoss EAP 6 (AS7), и решение для меня было сделать обертку из класса WrapperDataSource и добавить инструкцию:

wc.setAutoCommit(false); 

в методах GetConnection, для того, чтобы установить автофиксации подключение к ложным, когда мое заявление получить соединение из пула JDBC-де.

Эта ссылка объясняет, как это сделать

http://antuansoft.blogspot.com.es/2017/01/jboss-datasources-set-autocommit-example.html

Надежда помочь любому

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