настройка Quartz CMT jobStore с использованием источника данных Spring - PullRequest
0 голосов
/ 21 июля 2011

Я пытаюсь настроить Quartz JobStoreCMT и использовать источник данных Spring в качестве управляемого источника данных.Вот мой конфигурационный файл Spring с определением источника данных:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="${database.driverClassName}" />
    <property name="url" value="${database.url}" />
    <property name="username" value="${database.username}" />
    <property name="password" value="${database.password}" />
</bean>

Вот мой quartz.properties:

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 = managedTXDS
org.quartz.jobStore.nonManagedTXDataSource = qzDS
org.quartz.jobStore.tablePrefix: QRTZ_
org.quartz.jobStore.isClustered: false

#============================================================================
# Configure Datasources  
#============================================================================
org.quartz.dataSource.managedTXDS.jndiURL=java:comp/env/jdbc/dataSource

org.quartz.dataSource.qzDS.driver: com.mysql.jdbc.Driver
org.quartz.dataSource.qzDS.URL: jdbc:mysql://localhost:3306/myschema
org.quartz.dataSource.qzDS.user: user
org.quartz.dataSource.qzDS.password: pwd
org.quartz.dataSource.qzDS.maxConnections: 5
org.quartz.dataSource.qzDS.validationQuery=select 0 from dual

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

2011-07-20 21:38:22,477 [main] ERROR org.quartz.utils.JNDIConnectionProvider - Error  looking up datasource: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
javax.naming.NoInitialContextException: Need to specify class name in environment or  system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
...
org.quartz.JobPersistenceException: Failed to obtain DB connection from data source 'managedTXDS': java.sql.SQLException: Could not retrieve datasource via JNDI url 'java:comp/env/jdbc/dataSource' javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial [See nested exception: java.sql.SQLException: Could not retrieve datasource via JNDI url 'java:comp/env/jdbc/dataSource' javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:726)
at org.quartz.impl.jdbcjobstore.JobStoreCMT.executeInLock(JobStoreCMT.java:231)

Итак, это проблема с указанием org.quartz.dataSource.managedTXDS.java.naming.factory.initial и / или org.quartz.dataSource.managedTXDS.jndiURL= java: comp / env / jdbc / dataSource?

Если отсутствует заводская настройка JNDI - какое должно быть значение для Spring?

спасибо!Марина

1 Ответ

1 голос
/ 26 июля 2011

Пожалуйста, посмотрите @

http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/scheduling/quartz/LocalDataSourceJobStore.html

Установите это как

org.quartz.jobStore.class = org.springframework.scheduling.quartz.LocalDataSourceJobStore
...