我尝试通过遵循this page学习JEE批处理。我使用NetBeans 8.2通过JEE7创建企业项目。它在同一glassfish5容器中同时运行ejb层和Web层。由于我的读者,处理器和作家类处于ejb层,因此我在jar文件的TestJob.xml
中创建了META-INF/batch-jobs
。其内容:
<job id="TestJob" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
<step id="process">
<chunk item-count="2">
<reader ref="SimpleItemReader"/>
<processor ref="SimpleItemProcessor"/>
<writer ref="SimpleItemWriter"/>
</chunk>
</step>
</job>
jar的结构也很简单:
<jar file>
|-- META-INF
| |-- batch-jobs
| |-- TestJob.xml
| |-- MANIFEST.MF
|-- testjob <-- my packge
|-- SimpleItemReader.class . . . <-- class files
与链接相同,我使用servlet触发作业。但是找不到TestJob.xml
。
因此,我将xml文件移至战争层。战争文件的结构是这样的:
<war file>
|-- META-INF
| |-- MANIFEST.MF
|-- WEB-INF
|-- classes
|-- META-INF
| |-- batch-jobs
| |-- TestJob.xml
|-- testjob.servlet <-- my package for servlet
|-- PayrollJobServlet.class
但是随后它命中了ClassNotFoundException: SimpleItemReader
。
我还尝试将xml文件同时放入ejb和war层,看来ejb总是被忽略,而war-1却因ClassNotFoundException: SimpleItemReader
而失败。因此,如果有人可以帮助我在这里发现错误,我将不胜感激。如有必要,我可以在此处发布编码,但似乎还没有到达该类。此外,它们是从链接复制的。请帮忙。