blob: 8c22e142c1611c87a8d8617a6c49dbac78900f93 [file] [log] [blame]
= 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);
}
}
----