论坛首页 入门讨论版

请教:quartz 应用报错:java.lang.NoClassDefFoundError

浏览 680 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-02-22 关键字: spring
我在Spring中集成 quartz 进行单元测试时出现了:java.lang.NoClassDefFoundError,完整的错误堆栈信息如下:
引用

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.scheduling.quartz.SchedulerFactoryBean' defined in ServletContext resource [/applicationContext-quartz.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/quartz/spi/JobFactory
Caused by: java.lang.NoClassDefFoundError: org/quartz/spi/JobFactory
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:54)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:759)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:724)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:387)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:284)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at cn.edu.ccnu.inc.test.QuartzTest.setUp(QuartzTest.java:43)
at junit.framework.TestCase.runBare(TestCase.java:125)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

我的配置文件如下:
<bean id="sendNewsJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
	<property name="jobClass" value="cn.edu.ccnu.inc.quartz.SendNewsJob" />
	<property name="jobDataAsMap">
		<map>
			<entry key="newsService" value-ref="newsService" />
			<entry key="userService" value-ref="appUserService" />
			<entry key="mailEngine" value-ref="mailEngine" />
			
			<entry key="limit" value="10" />	<!-- News list size -->
			<entry key="from" value="${mail.from.default}" />	<!-- Define where is the mail send from -->
			<entry key="subject" value="${mail.subject.netcomNews}" />	<!-- Subject of the news inform mail -->
		</map>
	</property>
</bean>

<bean id="sendNewsCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
	<property name="jobDetail" ref="sendNewsJobDetail" />
	<property name="cronExpression" value="0/5 0 0 ? * 2 *" />
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	<property name="triggers">
		<list>
			<ref bean="sendNewsCronTrigger" />
		</list>
	</property>
	<property name="quartzProperties">
		<props>
			<prop key="org.quartz.threadPool.threadCount">5</prop>
		</props>
	</property>
</bean>

相关的测试类如下:
public class QuartzTest extends TestCase {

	private XmlWebApplicationContext ctx;

	public void setUp() {
		String[] paths = {"applicationContext-resource.xml",
				  "applicationContext-dao.xml",
				  "applicationContext-service.xml",
				  "applicationContext-email.xml",
				  "applicationContext-quartz.xml"};
		ctx = new XmlWebApplicationContext();
		ctx.setConfigLocations(paths);
		ctx.setServletContext(new MockServletContext(""));
		ctx.refresh();
	}
	
	public void tearDown() {
		ctx = null;
	}
	
	public void testQuartz() throws Exception {
		System.in.read();
	}
}

请教各位这是由于什么原因造成的,我在网上搜索了一下,实际的代码其它上和大家的都差不多,但就是出错,难道 quartz 不支持单元测试?
   
最后更新时间:2008-02-22
lib包
   
0 请登录后投票
最后更新时间:2008-02-22
我应用中已经有 quartz.jar 包了啊,请问运行 quartz 调度还需要其它什么和 quartz 相关的特殊包吗?
org/quartz/spi/JobFactory 在哪个 jar 包中?
   
0 请登录后投票
最后更新时间:2008-02-29
原来是版本问题:(
还搞这么久
   
0 请登录后投票
论坛首页 入门讨论版

跳转论坛:
JavaEye推荐