jberet / jsr352

Implementation of Jakarta Batch Specification and API
Eclipse Public License 2.0
124 stars 76 forks source link
batch batch-processing jakarta java

JBeret logo

JBeret is an implementation of Jakarta Batch. It is also included in WildFly, the new and improved JBoss Application Server to provide portable batch processing support in Jakarta EE environment.

Build JBeret

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 Modules:

3rd-party & Community Extensions:

Project Resources:

Batch sample & test applications:

org.jberet artifacts may be retrieved from Maven Central or JBoss Public Repository

<repositories>
    <repository>
        <id>jboss-public-repository-group</id>
        <name>JBoss Public Repository Group</name>
        <url>https://repository.jboss.org/nexus/content/groups/public/</url>
    </repository>
</repositories>
...
<dependencies>
        <dependency>
            <groupId>jakarta.batch</groupId>
            <artifactId>jakarta.batch-api</artifactId>
            <version>${version.jakarta.batch.batch-api}</version>
            <scope>provided</scope>
        </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>

Batch application dependencies

Minimal application dependencies:
    <dependency>
            <groupId>jakarta.batch</groupId>
            <artifactId>jakarta.batch-api</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 Jakarta EE application packaging: Jakarta EE API jars 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.

maven BOM dependency used to encapsulate all the dependencies required by JBeret Java SE.
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jberet</groupId>
            <artifactId>jberet-se-bom</artifactId>
            <version>2.1.2.Final-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
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>
Optional application dependencies depending on application usage:
    <!-- 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>

    <!-- 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>