= Application Composer Advanced Usage | |
:jbake-date: 2016-03-16 | |
:jbake-type: page | |
:jbake-status: published | |
:jbake-tomeepdf: | |
ApplicationComposer can be a way to run a JBatch not needing any HTTP connector. | |
Here is an example making batch integration easy - note you can extract the generic part in a library very easily: | |
TIP: if you didn't check yet BatchEE provides some standalone utilities for JBatch but the idea of this page can be reused for a lot of applications. | |
[source,java] | |
---- | |
// helper class reusable for any batch | |
abstract class BatchApplication { | |
private static final DateTimeFormatter DATE = DateTimeFormatter.ofPattern("YYYYMMddHHmmss"); | |
protected Report runBatch(final String batchName, final Properties config) { | |
final JobOperator operator = BatchRuntime.getJobOperator(); | |
final long id = operator.start(batchName, config); | |
Batches.waitForEnd(operator, id); | |
return new Report(operator.getJobExecution(id), operator.getParameters(id)); | |
} | |
@Module // we enforce BatchEE to be initialized as an EJB context to get JNDI for JTA init, needed for TomEE 1 | |
public EjbModule ensureBatchEESetupIsDoneInTheRightContext() { | |
final EjbJar ejbJar = new EjbJar().enterpriseBean(new SingletonBean(BatchEEBeanManagerInitializer.class)); | |
final Beans beans = new Beans(); | |
beans.addManagedClass(BatchEEBeanManagerInitializer.Init.class); | |
final EjbModule ejbModule = new EjbModule(ejbJar); | |
ejbModule.setModuleId("batchee-shared-components"); | |
ejbModule.setBeans(beans); | |
return ejbModule; | |
} | |
public static class Report { | |
private final JobExecution execution; | |
private final Properties properties; | |
public Report(final JobExecution execution, final Properties properties) { | |
this.execution = execution; | |
this.properties = properties; | |
} | |
public JobExecution getExecution() { | |
return execution; | |
} | |
public Properties getProperties() { | |
return properties; | |
} | |
} | |
} | |
@Classes(cdi = true, value = { MyFilter.class, MoveFile.class, InputFile.class, MyReader.class, LoggingListener.class }) | |
public class MyBatch extends BatchApplication { | |
private final Properties config; | |
public Mybatch(final String[] args) { // main args | |
this.config = new Properties() {{ // create the batch config | |
setProperty("input-directory", args[0]); | |
}}; | |
} | |
public Report execute(final String inputDirectory) { | |
return runBatch("sunstone", config); | |
} | |
public static void main(final String[] args) throws Exception { | |
ApplicationComposers.run(MyBatch.class, args); | |
} | |
} | |
---- |