портирование кварца с IAS на JBoss AS - PullRequest
1 голос
/ 07 ноября 2011

Я портирую наш код из IAS в JBoss AS. Существует странное поведение, когда кварц вообще не запускает никаких событий, и в журналах кварца ошибок не возникает. Я также заметил, что таблицы Quartz не заполнены (QRTZ_JOB_DETAILS, QRTZ_TRIGGERS и т. Д.).

Я использую JOBStoreCMT с кварцевой версией 1.5.2. Источник данных хорошо объявлен. Задания и триггеры хорошо работали в IAS и объявлялись в коде.

кварцевые свойства:

#============================================================================
# Configure Main Scheduler Properties
#============================================================================

org.quartz.scheduler.instanceName = bitbandScheduler
org.quartz.scheduler.instanceId = AUTO

#============================================================================
# Configure ThreadPool
#============================================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 15
org.quartz.threadPool.threadPriority = 5

#============================================================================
# Configure JobStore
#============================================================================

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMT
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = bitband_pluginDS
org.quartz.jobStore.nonManagedTXDataSource = bitband_pluginDSTX
org.quartz.jobStore.tablePrefix = QRTZ_

org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 20000

#============================================================================
# Configure Datasources
#============================================================================

org.quartz.dataSource.bitband_pluginDS.jndiURL=java:bitband_pluginDS
org.quartz.dataSource.bitband_pluginDSTX.jndiURL=java:bitband_pluginDS

оракула ds.xml:

  <xa-datasource>
             <jndi-name>bitband_pluginDS</jndi-name>
             <!-- uncomment to enable interleaving <interleaving/> -->
             <isSameRM-override-value>false</isSameRM-override-value>
             <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
             <xa-datasource-property name="URL">jdbc:oracle:thin:@ord-rtv063.orca.ent:1521:DB11g</xa-datasource-property>

             <xa-datasource-property name="User">RIGHTV7_VS</xa-datasource-property>
             <xa-datasource-property name="Password">RIGHTV7_VS</xa-datasource-property>
                 <max-pool-size>100</max-pool-size>
                 <min-pool-size>20</min-pool-size>
                 <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
                 <check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
             <!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
             <!--valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name-->
             <!-- 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>
             <!-- Oracles XA datasource cannot reuse a connection outside a transaction once enlisted in a global transaction and vice-versa -->
             <no-tx-separate-pools/>
               <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
               <metadata>
                  <type-mapping>Oracle9i</type-mapping>
               </metadata>
    </xa-datasource>

Чего мне не хватает? PS, при использовании JobStoreTX все работает хорошо, так что я думаю, это связано с менеджером транзакций контейнера.

1 Ответ

2 голосов
/ 08 ноября 2011

Обдумав проблему в течение последних нескольких дней, я нашел решение.

Добавление свойства ниже в файл quartz.properties. Так просто.

 org.quartz.jobStore.dontSetAutoCommitFalse=false

Если для этого параметра установлено значение true, Quartz не будет вызывать setAutoCommit(false) для соединений, полученных из DataSource. Это может быть полезно в некоторых ситуациях, например, если у вас есть драйвер, который жалуется, если он вызывается, когда он уже выключен. Это свойство по умолчанию имеет значение false, потому что большинство драйверов требуют, чтобы вызывался setAutoCommit(false).

По какой-то причине JBoss переопределяет значение по умолчанию, поэтому мне пришлось добавить его явно.

Кредит отправляется неизвестному пользователю по адресу: http://osdir.com/ml/java.quartz.user/2007-10/msg00123.html

...