Maven

The Imixs-Workflow project contains a great deal of technologies which helps building powerful workflow applications. To integrate the Imixs-Workflow Engine into your own code, the project provides Maven artifacts. Maven is a build and configuration tool which helps you to organize your project and finding necessary libraries and artifacts automatically through the Internet.

All components of Imixs-Workflow are build with Maven which makes it easy to add them into a Maven based project. The following example adds the Imixs-Workflow Engine and the Imixs REST API into a maven based project:

	<properties>
		.....
		<org.imixs.workflow.version>6.2.5</org.imixs.workflow.version>
	</properties>
	...
	<dependency>
		<groupId>org.imixs.workflow</groupId>
		<artifactId>imixs-workflow-engine</artifactId>
		<version>${org.imixs.workflow.version}</version>
	</dependency>
	<dependency>
		<groupId>org.imixs.workflow</groupId>
		<artifactId>imixs-workflow-jax-rs</artifactId>
		<version>${org.imixs.workflow.version}</version>
	</dependency>
	<dependency>
		<groupId>org.imixs.workflow</groupId>
		<artifactId>imixs-workflow-index-lucene</artifactId>
		<version>${org.imixs.workflow.version}</version>
	</dependency>

The latest version number can be look up by browsing the maven-central-repository. Also detailed information about each artifact are provided in separate sections of the different Imixs-Workflow subprojects.

Downloads

All binaries from the Imixs-Workflow project are provided in the maven-central-repository. To download a binary directly from there you cab browse the maven-central-repository and search for the keyword ‘imixs’.

Snapshot Releases

Snapshot releases are newer releases of the Imixs-Workflow engine which are still under development. A Snapshot release should only be used in cases where the latest final release did not provide a specific feature or bug-fix needed to work with. The Imixs-Workflow snapshot releases are published into the Sonatype Snapshot repository.

Note: The snapshot repository should only be used if snapshot releases are necessary for a specific build!

To access the Snapshot repository the following additional repository location can be added into the Maven settings.xml configuration file or the project pom.xml.

...
<!-- Support Snapshot Repos -->
<repositories>
	<repository>
		<id>central-portal-snapshots</id>
		<name>Central Portal Snapshots</name>
		<url>https://central.sonatype.com/repository/maven-snapshots/</url>
		<releases>
			<enabled>false</enabled>
		</releases>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
	</repository>
</repositories>
....

Java EE Module Configuration Using Maven

If you are using Imixs-Workflow in a Web Application or a a Microservice, there is no special configuration necessary. Maven will put all libraries into the location /WEB-INF/lib/ which is the default location for web modules. You can skip the following section if your are working with a maven web module.

Packaging the Imixs-Workflow engine into a EJB Module

Imixs-Workflow is based on EJB and can be combined with a custom EJB module within your application.
Using the maven-ejb-plugin you can add a declaration for additional manifest entries. The following example shows how to add the additional configuration to your pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    	<parent>
    		<artifactId>imixs-workflow-jsf-sample</artifactId>
    		<groupId>org.imixs.workflow</groupId>
    		<version>0.0.2-SNAPSHOT</version>
    	</parent>
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>org.imixs.workflow</groupId>
    	<artifactId>imixs-workflow-jsf-sample-ejb</artifactId>
    	<packaging>ejb</packaging>
    	<version>0.0.2-SNAPSHOT</version>
    	<properties>
        	<org.imixs.workflow.version>3.9.0</org.imixs.workflow.version>
       </properties>
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<configuration>
    					<source>1.7</source>
    					<target>1.7</target>
    				</configuration>
    			</plugin>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-ejb-plugin</artifactId>
    				<configuration>
    					<ejbVersion>3.0</ejbVersion>
    					<archive>
    						<!-- add the EJB module imixs-workflow-engine -->
    						<manifestEntries>
    							<Class-Path>imixs-workflow-engine-${org.imixs.workflow.version}.jar imixs-workflow-core-${org.imixs.workflow.version}.jar</Class-Path>
    						</manifestEntries>
    					</archive>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    	<dependencies>
    	</dependencies>
    </project>

Note: The jar versions defined by the Class-Path entry need to match the jar versions provided by the module!

Packaging the Imixs-Workflow engine into an EAR

To package the Imixs-Workflow engine into an EAR the pom.xml can be configured as shown in the following example:

    ...
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-ear-plugin</artifactId>
    				<configuration>
    					<version>5</version>
    					<modules>
    						<!-- Web Module -->
    						....
    						<!-- EJB Module -->
    						...
    						<!-- Imixs-Workflow -->
    						<JarModule>
    							<groupId>org.imixs.workflow</groupId>
    							<artifactId>imixs-workflow-engine </artifactId>
    						</JarModule>
    						<JarModule>
    							<groupId>org.imixs.workflow</groupId>
    							<artifactId> imixs-workflow-core </artifactId>
    						</JarModule>
    						....
    					</modules>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    	<dependencies>
    		<!-- Imixs Workflow  -->
    		<dependency>
    			<groupId>org.imixs.workflow</groupId>
    			<artifactId>imixs-workflow-core</artifactId>
    			<type>jar</type>
    		</dependency>
    		<dependency>
    			<groupId>org.imixs.workflow</groupId>
    			<artifactId>imixs-workflow-engine</artifactId>
    			<type>jar</type>
    		</dependency>

    		....
    	</dependencies>

Note: The deployment descriptors for the EJB Module (ejb-jar.xml) are not part of the Imixs-Workflow jar files and need to be provided by the deployed application. This enables the application to provide custom environment specific configurations. See the following example of a ejb-jar.xml file providing the JNDI Mail resource to the Imixs-Workflow engine:

    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
    	version="3.0">
    	<enterprise-beans>
    		<session>
    			<ejb-name>WorkflowService</ejb-name>
    			<ejb-class>org.imixs.workflow.jee.ejb.WorkflowService</ejb-class>
    			<session-type>Stateless</session-type>
    			<!-- Mail Configuration -->
    			<env-entry>
    				<description>Mail Plugin Session name</description>
    				<env-entry-name>IMIXS_MAIL_SESSION</env-entry-name>
    				<env-entry-type>java.lang.String</env-entry-type>
    				<env-entry-value>java:/mail/org.imixs.workflow.mail</env-entry-value>
    			</env-entry>
    			<ejb-ref>
    				<ejb-ref-name>ejb/PropertyService</ejb-ref-name>
    				<ejb-ref-type>Session</ejb-ref-type>
    				<remote>org.imixs.workflow.jee.util.PropertyService</remote>
    			</ejb-ref>
    			<!-- Mail resource -->
    			<resource-ref>
    				<res-ref-name>java:/mail/org.imixs.workflow.mail</res-ref-name>
    				<res-type>javax.mail.Session</res-type>
    				<res-auth>Container</res-auth>
    				<res-sharing-scope>Shareable</res-sharing-scope>
    			</resource-ref>
    		</session>
    	</enterprise-beans>
    </ejb-jar>