Поведение автоматической фиксации пула соединений с базой данных JBoss - PullRequest
3 голосов
/ 07 августа 2010

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

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

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

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

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

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

Мы тоже использовали, но без изменений ...

Ответы [ 3 ]

2 голосов
/ 07 августа 2010

Существует три основных типа источника данных:

  • <нет-ТХ-DataSource>
  • <локальный-ТХ-DataSource>

JBoss Community ConfigDataSources

Ваш файл deploy / oracle-ds.xml должен использовать либо , либо , чтобы получить соединения с автоматической фиксацией, установленной в false.

См. Ответ Скотта Старка в этом сообщении: Как декларативно установить для autoCommit значение false или J2EE TM Спецификация архитектуры соединителя Версия 1.5 раздел 15.5.3.1 для оригинального источника.

0 голосов
/ 18 января 2017

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

wc.setAutoCommit(false);

в методах getConnection, чтобы установить для соединения автоматической фиксации значение false, когда мое приложение получает соединение из пула de JDBC.

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

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

Надеюсь помочь кому-нибудь

0 голосов
/ 08 августа 2010

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

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