运行批处理时

时间:2018-10-31 18:57:00

标签: java jax-rs batch-processing

尝试运行批处理时出现此错误:

  

16:05:35,807警告[org.jberet](批处理线程-1)JBERET000001:无法运行批处理org.jberet.job.model.RefArtifact@2dea3d8a:java.lang.IllegalStateException:JBERET000600:无法创建工件参考名称为MyBatchlet。确保存在CDI beans.xml,并且正确配置了batch.xml(如果有)。       在org.jberet.runtime.context.JobContextImpl.createArtifact(JobContextImpl.java:185)       在org.jberet.runtime.runner.AbstractRunner.createArtifact(AbstractRunner.java:156)       在org.jberet.runtime.runner.BatchletRunner.run(BatchletRunner.java:66)       在org.jberet.runtime.runner.StepExecutionRunner.runBatchletOrChunk(StepExecutionRunner.java:229)       在org.jberet.runtime.runner.StepExecutionRunner.run(StepExecutionRunner.java:147)       在org.jberet.runtime.runner.CompositeExecutionRunner.runStep(CompositeExecutionRunner.java:164)       在org.jberet.runtime.runner.CompositeExecutionRunner.runFromHeadOrRestartPoint(CompositeExecutionRunner.java:88)       在org.jberet.runtime.runner.JobExecutionRunner.run(JobExecutionRunner.java:60)       在org.wildfly.extension.batch.jberet.impl.BatchEnvironmentService $ WildFlyBatchEnvironment $ 1.run(BatchEnvironmentService.java:243)       在org.wildfly.extension.requestcontroller.RequestController $ QueuedTask $ 1.run(RequestController.java:497)       在org.jberet.spi.JobExecutor $ 3.run(JobExecutor.java:161)       在org.jberet.spi.JobExecutor $ 1.run(JobExecutor.java:99)       在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)       在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)       在java.lang.Thread.run(Thread.java:748)       在org.jboss.threads.JBossThread.run(JBossThread.java:320)   原因:java.lang.IllegalStateException:JBERET000600:无法创建参考名称为MyBatchlet的工件。确保存在CDI beans.xml,并且正确配置了batch.xml(如果有)。       在org.jberet.creation.ArtifactFactoryWrapper.getClassFromBatchXmlOrClassLoader(ArtifactFactoryWrapper.java:65)       在org.jberet.creation.ArtifactFactoryWrapper.create(ArtifactFactoryWrapper.java:41)       在org.jberet.runtime.context.JobContextImpl.createArtifact(JobContextImpl.java:183)       ...另外15个   由以下原因引起:java.lang.ClassNotFoundException:[Service Module Loader中的模块“ deployment.idkwebapp.war:main”中的MyBatchlet)       在org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)       在org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)       在org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)       在org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)       在org.jberet.creation.ArtifactFactoryWrapper.getClassFromBatchXmlOrClassLoader(ArtifactFactoryWrapper.java:63)       ...还有17个

我已经创建了beans.xml,但是仍然无法正常工作...

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

这是批次:

package br.com.idk;

import javax.batch.runtime.context.JobContext;
import javax.batch.runtime.context.StepContext;
import javax.inject.Inject;

public class MyBatchlet {

	 @Inject JobContext jobContext;
	 @Inject StepContext stepContext;

	public String process() throws Exception {
		
	    long executionId = jobContext.getExecutionId();
		
	    System.out.println("I'm a cool batchlet!!!!!!!!!!!!!!!");
	    
		return null;
	}

	public void stop() throws Exception {
		// TODO Auto-generated method stub
		
	}	
	
	
}

在这里我称之为:

package br.com.idk;

import java.util.Properties;

import javax.batch.operations.JobOperator;
import javax.batch.runtime.BatchRuntime;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/hello")
public class Resource {
	
	@GET
	@Path("testBatch")
	public Long testBatch() {
		JobOperator jobOperator = BatchRuntime.getJobOperator();
        Properties props = new Properties();
        props.setProperty("name", "Dude");
        
        return jobOperator.start("simple-batchlet-job", props);
	}
}

这是工作的XML:

<?xml version="1.0" encoding="UTF-8"?>
<job id="simple-batchlet-job" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
    <step id="myBatchlet">
        <batchlet ref="MyBatchlet"/>
    </step>
</job>

1 个答案:

答案 0 :(得分:1)

像这样用bean-discovery-mode =“ all”更改bean.xml

<?xml version="1.0" encoding="UTF-8"?>
    <beans
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                      http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
        bean-discovery-mode="all">
</beans>