JBeret is an implementation of JSR 352 (Batch Applications for the Java Platform). It is also included in WildFly, the new and improved JBoss Application Server to provide portable batch processing support in Java EE environment.
To build and run default set of tests:
mvn install
Some tests require additional steps and thus are not included in the default run. For instance, MongoDB-related tests need to start MongoDB first. To build and run all tests:
# start MongoDB database
mongod
# build JBeret, activate allTests maven profile to run all tests
mvn install -DallTests
Some tests involves very large data set (e.g., over 1 million rows of CSV or Excel data), and may cause memory errors in some machines:
OutOfMemoryError: unable to create new native thread
Increase ulimit
to avoid such errors. For example,
ulimit -u 2048add
- jberet-core: core batch runtime engine
- jberet-se: impl classes specific to Java SE runtime environment
- jberet-support: a collection of reusable batch readers and writers (e.g., CSV, fixed length, Excel, Json, XML, Mongo, JDBC, JMS, HornetQ, PDF, etc) for batch applications, and JNDI support
- jberet-rest-api: REST API for batch job management
- jberet-ui: front-end UI web app for batch job management
- jberet-distribution: produces a zip distribution for Java SE
- jberet-jpa-repository: batch job repository implemented with JPA (incomplete)
- test-apps: test applications
- tck-porting-impl: support running JSR 352 TCK with JBeret in Java SE
- wildfly-jberet-samples: Sample batch processing apps that can be deployed to WildFly or JBoss EAP 7
- JBoss Tools for Batch (Eclipse extensions, Wizards, Visual editing, etc)
- jberet-eap6
- jberetweb, job repository viewer
- jBatch Suite, Visual Modeling
- JBeret Issues & Bugs, Issues Awaiting Volunteers
- JBeret Documentation
- JBoss EAP Quickstarts for Batch Processing
- JBeret-dev Mailing List
- WildFly Forum
- JBeret Forum
- JSR 352 Expert Group Discussion
- JBoss Batch API project
- Download JBeret jars and distro zip from JBoss.org nexus
- Additional JBeret project info on ohloh Open HUB
- https://github.com/chengfang/wildfly-samples/tree/master/jberet, web apps that demonstrate the following:
- JsonItemReader, JsonItemWriter
- CsvItemReader, CsvItemWriter
- XmlItemReader, XmlItemWriter
- MongoItemReader, MongoItemWriter
- JNDI lookup of Jackson JsonFactory, MappingJsonFactory & XmlFactory in WildFly for batch reader and writer
- JNDI lookup of MongoClient in WildFly
- job xml files showing the use of various reader/writer configuration properties
- jberet-support module can be installed in WildFly and referenced by multiple apps via either MANIFEST.MF or jboss-deployment-structure.xml
- https://github.com/jberet/jsr352/tree/master/jberet-support/src/test
- comprehensive tests for implemented batch readers and writers
- https://github.com/jberet/jsr352/tree/master/test-apps
- test apps running in Java SE environment to verify core batch requirements
- test apps running in Java SE environment to verify additional JBeret features (inheritance, scripting support, infinispan job repository, etc)
<repositories>
<repository>
<id>jboss-public-repository-group</id>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public/</url>
</repository>
</repositories>
...
<dependencies>
<dependency>
<groupId>org.jboss.spec.javax.batch</groupId>
<artifactId>jboss-batch-api_1.0_spec</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.jberet</groupId>
<artifactId>jberet-core</artifactId>
<version>1.0.2.Final</version> <!-- replace it with the desired version -->
</dependency>
<dependency>
<groupId>org.jberet</groupId>
<artifactId>jberet-support</artifactId>
<version>1.0.2.Final</version> <!-- replace it with the desired version -->
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.batch</groupId>
<artifactId>jboss-batch-api_1.0_spec</artifactId>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.transaction</groupId>
<artifactId>jboss-transaction-api_1.2_spec</artifactId>
</dependency>
<dependency>
<groupId>org.jberet</groupId>
<artifactId>jberet-core</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.marshalling</groupId>
<artifactId>jboss-marshalling</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-core</artifactId>
</dependency>
<dependency>
<groupId>org.wildfly.security</groupId>
<artifactId>wildfly-security-manager</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
A note on webapp or Java EE application packaging: Java EE API jars (batch-api, cdi-api, javax.inject, transaction-api)
are already available in the appserver, and should not be included in WAR, JAR, or EAR files. Their maven dependency
scope should be set to provided
. In addition, if the application is deployed to JBoss EAP or WildFly, almost all of
the above dependencies are already available as JBoss modules, and should not be duplicated in application package.
The following is also required for Java SE batch applications (h2 can be omitted when using in-memory batch job repository):
<dependency>
<groupId>org.jberet</groupId>
<artifactId>jberet-se</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<!-- any JDBC driver jars, e.g., h2, when using jdbc batch job repository -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<!-- infinispan and jgroups jars, when infinispan job repository is used.
Additional infinispan cachestore jars (e.g., infinispan-cachestore-jdbc, infinispan-cachestore-mongodb,
infinispan-cachestore-leveldb, infinispan-cachestore-rest, infinispan-cachestore-cassandra, etc) may be
needed if such a cachestore is used. -->
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-core</artifactId>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-commons</artifactId>
</dependency>
<dependency>
<groupId>org.jgroups</groupId>
<artifactId>jgroups</artifactId>
</dependency>
<!-- MongoDB jars, when MongoDB job repository is used -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>${version.org.mongodb.mongo-java-driver}</version>
<scope>provided</scope>
</dependency>
<!-- For Weld 2.2.2.Final or later, Jandex is required for annotation processing -->
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jandex</artifactId>
</dependency>
<!-- replace Java built-in StAX provider with aalto-xml or woodstox
(woodstox dependencies not shown here)
-->
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>aalto-xml</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>stax2-api</artifactId>
</dependency>
<!-- jberet-support includes common reusable batch ItemReader & ItemWriter classes for
various data types such as CSV, XML, JSON, Fixed length, Excel, MongoDB, JDBC, JMS, HornetQ, etc.
The application should further provide appropriate transitive dependencies from
jberet-support, depending on its usage.
-->
<dependency>
<groupId>org.jberet</groupId>
<artifactId>jberet-support</artifactId>
</dependency>