configuring Quartz CMT jobStore using Spring datasource
I'm trying to confugre Quartz JobStoreCMT and use Spring's datasource as the managed datasource. Here is my Spring's config file with the datasource definition:
<bean id="dataSource" class="o开发者_运维知识库rg.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>
Here is my 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
when I run my unit test that tries to initialize Scheduler I'm getting the following error:
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)
So, is this a problem with specifying the org.quartz.dataSource.managedTXDS.java.naming.factory.initial and/or org.quartz.dataSource.managedTXDS.jndiURL=java:comp/env/jdbc/dataSource ?
If it is the JNDI factory setting that is missing - what should be the value for Spring?
thanks! Marina
Please have a look @
http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/scheduling/quartz/LocalDataSourceJobStore.html
Set this as
org.quartz.jobStore.class = org.springframework.scheduling.quartz.LocalDataSourceJobStore
精彩评论