Manual Setup of Lifecycle Management and Integration Runtime Environment using JBoss

The following documentation describes how a Lifecycle Management and an Integration Runtime environment for the Infinity Process Platform can be set up manually using JBoss as opposed to using the Infinity on Demand Facilities or a Setup by Java Developers within an Eclipse environment

Both environments are JBoss Web application server instances with deployment of specific Web modules (WAR files) connected to Oracle databases with corresponding database schemas.

The Lifecycle Management server allows to manage Integration project configurations for multiple Integration Solutions and the creation of instances of these Solutions (e.g. for production, testing, demonstration and training purposes) in corresponding Integration Runtime environments.


Figure: Lifecycle Management and Integration Runtime

Note, that the Integration Runtime environment can run multiple instances of the same or of different Integration Solutions at the same time leveraging the multi-tenancy capabilities of IPP.

Furthermore, a single Lifecycle Management server can manage Solution Instances in multiple Integration Runtime environments. For instance, you may decide to deploy one Integration Runtime environment on one server on one testing machine to carry all instances for testing and demo purposes and another Integration Runtime environment on another server on a dedicated production machine which only carries a single solution instance for production.

The manual setup approach in this chapter is likely to be used to set up

The following tasks are assumed to be performed by a system administrator or at least by a technology-savvy resource with Java/J2EE background.

Initially, you may want to create one Lifecycle Management server and a single Integration Runtime server. Later you may add additional Integration Runtime Servers to your setup.

Installation Time

You should plan for 60-90 minutes for the steps described below.

Prerequisites

The prerequisites needed to set up the Lifecycle Management and Integration Runtime environments are

Details on a manual Setup using JBoss and SQL Server database can be found here.

Please refer to the Infinity Release Notes for specific versions supported in the current release.

Internet Connectivity

During the installation, you will need to download software artifacts from the internet. Make sure that you are connected.

Oracle Database

The Oracle database will store all lifecycle management artifacts such as solutions, releases and software assets as well as all runtime configuration such as runtime environments and solution instances. Hereby, the runtime elements represent the Integration Runtime environment the Lifecycle Management environment is connected to.

Artifact Repository Access

All IPP artifacts are provided in the Artifact Repository.

Note
Before proceeding further, please contact infinity.support@sungard.com to get all grants assigned correctly in the artifact repository.

In the subsequent sections you will be asked to download projects from this repository. To log into the repository, you can use your INTERNAL account (without preceeding INTERNAL/) and password for it.

Maven

Maven is used as a scripting utility to download all required IPP artifacts and perform certain tasks during the installation.

Maven Installation and Configuration

Please install Maven and configure the Maven repository as described in detail in chapter Creating a Infinity Process Platform Runtime environment with Apache Maven of the Installation Guide.

Maven Repository Configuration

After you followed the instructions on how to gain access to the artifacts repository, you can authenticate against the ipp-libs repository with the username and password you picked when registering.

<server>
   <id>ipp-repo</id>
   <username>username</username>
   <password>password-token</password>
</server>
<server>
   <id>iod-releases</id>
   <username>username</username>
   <password>password-token</password>
</server>
<server>
   <id>isb-libs</id>
   <username>username</username>
   <password>password-token</password>
</server>

We recommend to encrypt your password in a hash before storing it in your local settings. Please refer to section Configuring the Maven Repository in chapter Creating a Infinity Process Platform Runtime Environment with Apache Maven of the Installation Guide for details.

If you are working from behind an HTTP Proxy, make sure the proxy is configured in settings.xml similar to example below. If you have used the pre-configured settings.xml template, this entry already exists, but is commented out. In this case, uncomment this section and change the proxy <host> as appropriate in your environment setup.

<proxy>
   <active>true</active>
   <protocol>http</protocol>
   <host>10.244.145.252</host>
   <port>8080</port>
   <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
</proxy>

<proxy>
   <active>true</active>
   <protocol>https</protocol>
   <host>10.244.145.252</host>
   <port>8080</port>
   <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
</proxy>

Note that you may also need to add the <username> and <password> elements to the <proxy> element if your proxy requires basic authentication as outlined here.

<proxy>
   ...
   <username>user.name</username>
   <password>somepassword</password>
   ...
</proxy>

Set up a <profile> for Infinity Process Platform in the <profiles> section of the settings.xml file. If you have used the pre-configured settings.xml template, this entry already exists.

<profiles>
   <profile>
      <id>IPP</id>
      <activation>
         <activeByDefault>true</activeByDefault>
      </activation>
   
      <repositories>
         <repository>
            <!-- (1.) -->
            <id>ipp-repo</id>
            <url>https://infinity.sungard.com/repository/ipp-libs</url>
         </repository>
         <repository>
            <!-- (2.) -->
            <id>central</id>
            <url>http://repo1.maven.org/maven2</url>
         </repository>
         <repository>
            <!-- (3.) -->
            <id>java.net</id>
            <url>http://download.java.net/maven/2</url>
         </repository>
         <repository>
            <id>jboss</id>
            <name>JBoss Repository</name>
            <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
         </repository>
         <repository>
            <id>iod-releases</id>
            <url>https://infinity.sungard.com/repository/iod-releases</url>
         </repository>
         <repository>
            <id>isb-libs</id>
            <url>https://infinity.sungard.com/repository/isb-libs</url>
         </repository>
   
         <repository>
            <id>iod-libs-dev</id>
            <url>https://infinity.sungard.com/repository/iod-libs-dev</url>
         </repository>
         <repository>
            <id>ipp-snapshots</id>
            <url>https://infinity.sungard.com/repository/ipp-snapshots</url>
         </repository>
         <repository>
            <id>isb-snapshots</id>
            <url>https://infinity.sungard.com/repository/isb-snapshots</url>
         </repository>
      </repositories>
   
      <pluginRepositories>
         <pluginRepository>
            <!-- (4.) -->
            <id>central-plugin</id>
            <name>Central PlugIn Repository</name>
            <url>http://repo1.maven.org/maven2</url>
         </pluginRepository>
      </pluginRepositories>
   </profile>
</profiles>

Integration Runtime Environment Setup

Note
Throughout the section below, variables IR_JBOSS_HOME and IR_PROJECT_HOME must be interpreted and/or replaced with the equivalent actual folder paths in your setup.

Setting up the Integration Runtime JBoss application Server

Perform the following steps to set up the Integration runtime JBoss application server:

  1. Download and extract JBoss Application Server (7.1.1.Final) for Integration Runtime to an arbitrary folder referred to as IR_JBOSS_HOME in the remainder of this document.
  2. Change memory settings in <IR_JBOSS_HOME>/bin/standalone.conf.bat file to below values.
    set "JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"

Create the Integration Runtime project

Create an Integration runtime Maven project by running the following command (adjust below archetype version accordingly). In the following IR_PROJECT_HOME is used for the folder created by the Integration Runtim archetype.

mvn archetype:generate -DarchetypeGroupId=com.infinity.iod.archetypes -DarchetypeArtifactId=iod-archetype-jb711-ir-portal-war -DarchetypeVersion=7.2.0-RC2-SNAPSHOT -DgroupId=com.infinity.iod -DartifactId=ir-ipp720-jb711 -Dversion=1.0.0-SNAPSHOT

On successful completion, you should see something like the following:

[INFO] project created from Archetype in dir: C:/development/ipp/ir-ipp720-jb711
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.580s
[INFO] Finished at: Thu Sep 27 10:44:51 CDT 2013
[INFO] Final Memory: 10M/120M
[INFO] ------------------------------------------------------------------------

Building the Integration Runtime WAR File

Adjust the pom.xml file residing in folder IR_PROJECT_HOME. Make sure the specified db.user has administrator rights.

<db.user>root</db.user>
<db.password>root</db.password>
<db.url>jdbc:oracle:thin:@localhost:1521:SG</db.url>

Install the ojdbc6.jar driver into the local repository with the Maven command below if not done already. The jar file could be found in the Oracle installation or downloaded from here.

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0
   -Dpackaging=jar -Dfile=ojdbc6.jar -DgeneratePom=true

If required, adjust the carnot.properties accordingly in IR_PROJECT_HOME/src/main/resources.

AuditTrail.URL = jdbc:oracle:thin:localhost:1521:SG
AuditTrail.User = ir
AuditTrail.Password = ir
AuditTrail.Schema = ir

If required, the target version can be changed by modifying <ipp.version> in the IR_PROJECT_HOME/pom.xml file.

<ipp.version>9.2.0</ipp.version>

Build the Integration Runtime Maven project from the IR_PROJECT_HOME folder. Note that this may take several minutes.

mvn clean package

On successful completion, you should see something like the following:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:04:37.514s
[INFO] Finished at: Thu Apr 11 08:59:18 CDT 2013
[INFO] Final Memory: 20M/137M
[INFO] ------------------------------------------------------------------------

Copy the resulting integration-runtime.war file under IR_PROJECT_HOME/target into IR_JBOSS_HOME/standalone/deployments.

Audit Trail Data Source

The Audit Trail Data Source is providing XA access to the IPP database.

Define the OJDBC6 Module

To define the OJDBC6 module perform the following steps:

  1. Create folder com/oracle/main under IR_JBOSS_HOME/modules.
  2. Copy ojdbc6.jar to folder IR_JBOSS_HOME/modules/com/oracle/main
  3. Create module.xml in folder IR_JBOSS_HOME/modules/com/oracle/main with the content below
    <?xml version="1.0" encoding="UTF-8"?>
    <module xmlns="urn:jboss:module:1.0" name="com.oracle">
       <resources>
          <resource-root path="ojdbc6.jar" />
       </resources>
       <dependencies>
          <module name="javax.api" />
          <module name="javax.transaction.api"/>
       </dependencies>
    </module>

XA Data Source definition

Define the XA data source:

  1. Add the XA Data Source definition to LM_JBOSS_HOME/standalone/configuration/standalone.xml to <subsystem xmlns="urn:jboss:domain:datasources:1.0"> (under datasources tag) and adjust URL, User and Password accordingly.
    <xa-datasource jndi-name="java:/AuditTrail.DataSource" pool-name="AuditTrail" enabled="true" use-ccm="false">
       <xa-datasource-property name="URL">
          jdbc:oracle:thin:@localhost:1521:XE
       </xa-datasource-property>
       <xa-datasource-property name="User">ir</xa-datasource-property>
       <xa-datasource-property name="Password">ir</xa-datasource-property>
       <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
       <driver>oracle</driver>
       <xa-pool>
          <min-pool-size>1</min-pool-size>
          <max-pool-size>60</max-pool-size>
          <prefill>false</prefill>
          <use-strict-min>false</use-strict-min>
          <flush-strategy>FailingConnectionOnly</flush-strategy>
          <no-tx-separate-pools>true</no-tx-separate-pools>
          <pad-xid>false</pad-xid>
          <wrap-xa-resource>true</wrap-xa-resource>
       </xa-pool>
       <validation>
          <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
          <validate-on-match>false</validate-on-match>
          <background-validation>false</background-validation>
          <use-fast-fail>false</use-fast-fail>
          <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
          <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
       </validation>
    </xa-datasource>
       

Driver definition

Add the driver definition to IR_JBOSS_HOME/standalone/configuration/standalone.xml to <subsystem xmlns="urn:jboss:domain:datasources:1.0"> (under drivers tag):

<driver name="oracle" module="com.oracle">
   <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>

Jackrabbit Respository

Define JCR 2.0 Module

Perform the following steps to define the JCR 2.0 module:

  1. Create folder javax/jcr/main under IR_JBOSS_HOME/modules.
  2. Copy jcr-2.0.jar to folder IR_JBOSS_HOME/modules/javax/jcr/main.
  3. Create module.xml in folder IR_JBOSS_HOME/modules/javax/jcr/main with the content below:
    <?xml version="1.0" encoding="UTF-8"?>
    <module xmlns="urn:jboss:module:1.0" name="javax.jcr">
       <resources>
          <resource-root path="jcr-2.0.jar"/>
       </resources>
       <dependencies>
          <module name="javax.transaction.api" export="true"/>
       </dependencies>
    </module>

Prepare Jackrabbit RAR deployment

Now prepare the Jackrabbit RAR deployment:

  1. Copy jackrabbit-jca-2.6.1.rar to folder IR_JBOSS_HOME/standalone/deployments. You can download the jackrabbit-jca-2.6.1-infinity02.rar file from the following location: https://infinity.sungard.com/repository/simple/ipp-3rd-party/org/apache/jackrabbit/jackrabbit-jca/2.6.1-infinity02/jackrabbit-jca-2.6.1-infinity02.rar.

  2. In the RAR file the META-INF/MANIFEST.MF has to be changed by adding the following line to the end of the file:
    Dependencies: javax.jcr export,org.slf4j
  3. Remove jars logback-classic-0.9.20.jar and logback-core-0.9.20.jar from the RAR file to use the JBoss logging framework.
  4. Copy ojdbc6.jar to the Jackrabbit RAR file.

Note

In case you like to use DOCX files, e.g. for templating, and you have a local jackrabbit-jca-2.6.1.rar which was downloaded via the earlier jackrabbit-jca-2.6.1-infinity01.rar file version, do one of the following:

Resource Adapter

To configure the resource adapter:

  1. Add the resource adapter definition to the IR_JBOSS_HOME/standalone/configuration/standalone.xml file to <subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"> (under resource-adapters tag) and adjust configFile and homeDir accordingly (make sure the defined folders are existing).
    <subsystem xmlns="urn:jboss:domain:resource-adapters:1.0">
       <resource-adapters>
          <resource-adapter>
             <archive>
                jackrabbit-jca-2.6.1.rar
             </archive>
             <transaction-support>XATransaction</transaction-support>
             <connection-definitions>
                <connection-definition class-name="org.apache.jackrabbit.jca.JCAManagedConnectionFactory" jndi-name="java:/jcr/jackrabbit" enabled="true" use-java-context="true" pool-name="jackrabbit" use-ccm="false">
                   <config-property name="configFile">
                      C:/tmp/repository-ir/repository.xml
                   </config-property>
                   <config-property name="bindSessionToTransaction">
                      true
                   </config-property>
                   <config-property name="homeDir">
                      C:/tmp/repository-ir
                   </config-property>
                </connection-definition>
             </connection-definitions>
       	</resource-adapter>
       </resource-adapters>
    </subsystem>
  2. Copy the repository.xml configuration file from IR_PROJECT_HOME/src/main/webapp/WEB-INF/jackrabbit to the location specified in the configFile property and adjust the database related configuration accordingly.
  3. Due to an issue with validation when deploying Jackrabbit on JBoss (please see https://issues.apache.org/jira/browse/JCR-3241), the archive-validation should be disabled within the JCA subsystem in the IR_JBOSS_HOME/standalone/configuration/standalone.xml file.
    <subsystem xmlns="urn:jboss:domain:jca:1.1">
       <archive-validation enabled="false" fail-on-error="true" fail-on-warn="false"/>
       
  4. Set up a global module for the jcr-2.0.jar to be accessible to all deployments. In <subsystem xmlns="urn:jboss:domain:ee:1.0"> add the following line:
    <global-modules>
       <module name="javax.jcr" slot="main" />
    </global-modules>

Messaging Provider for IPP

Add a messaging provider for IPP:

  1. Add <extension module="org.jboss.as.messaging"/> to extensions in IR_JBOSS_HOME/standalone/configuration/standalone.xml if it does not exist already.
  2. In the IR_JBOSS_HOMEstandalone/configuration/standalone.xml file the following content should be added inside <subsystem xmlns="urn:jboss:domain:messaging:1.1">. The connection-factory dummyCF has to be created as workaround due to issue: https://issues.jboss.org/browse/AS7-5538.
    <subsystem xmlns="urn:jboss:domain:messaging:1.1">
       <hornetq-server>
          <connectors>
             <in-vm-connector name="in-vm" server-id="0"/>
          </connectors>
          <acceptors>
             <in-vm-acceptor name="in-vm" server-id="0"/>
          </acceptors>
          <jms-connection-factories>
             <connection-factory name="dummyCF">
                <connectors>
                   <connector-ref connector-name="in-vm"/>
                </connectors>
                <entries>
                   <entry name="java:jboss/exported/jms/dummyCF"/>
                </entries>
             </connection-factory>
             <pooled-connection-factory name="hornetq-ra">
                <transaction mode="xa"/>
                <connectors>
                   <connector-ref connector-name="in-vm"/>
                </connectors>
                <entries>
                   <entry name="java:/CarnotConnectionFactory"/>
                </entries>
             </pooled-connection-factory>
          </jms-connection-factories>
          <jms-destinations>
             <jms-queue name="IppApplicationQueue">
               <entry name="java:/queue/CarnotApplicationQueue"/>
             </jms-queue>
             <jms-queue name="IppSystemQueue">
               <entry name="java:/queue/CarnotSystemQueue"/>
             </jms-queue>
             <jms-queue name="IppDaemonQueue">
               <entry name="java:/queue/CarnotDaemonQueue"/>
             </jms-queue>
          </jms-destinations>
       </hornetq-server>
    </subsystem>

Hazelcast Resource Adapter for transient process feature

Define Hazelcast 2.4 Module

Perform the following steps to define the Hazelcast module:

  1. Create folder com/hazelcast/main under IR_JBOSS_HOME/modules.
  2. Copy the hazelcast-2.4-stardust03.jar to folder IR_JBOSS_HOME/modules/com/hazelcast/main.
  3. Create a module.xml tile in folder IR_JBOSS_HOME/modules/com/hazelcast/main with the content below:
    <module xmlns="urn:jboss:module:1.1" name="com.hazelcast">
       <dependencies>
          <module name="javax.api" />
       </dependencies>
       <resources>
          <resource-root path="hazelcast-2.4-stardust03.jar" />
       </resources>
    </module>

Define Hazelcast RA 2.4 Module

Perform the following steps to define the Hazelcast RA module:

  1. Create folder com/hazelcast/ra/main under IR_JBOSS_HOME/modules.
  2. Copy the hazelcast-ra-2.4-stardust03.jar to folder IR_JBOSS_HOME/modules/com/hazelcast/ra/main.
  3. Create a module.xml file in folder IR_JBOSS_HOME/modules/com/hazelcast/ra/main with the below content:
    <module xmlns="urn:jboss:module:1.1" name="com.hazelcast.ra">
       <dependencies>
          <module name="javax.resource.api" />
          <module name="javax.api" />
          <module name="com.hazelcast" />
       </dependencies>
       <resources>
          <resource-root path="hazelcast-ra-2.4-stardust03.jar" />
       </resources>
    </module>

Prepare Hazelcast RAR deployment

Now prepare the Hazelcast RAR deployment:

  1. Copy hazelcast-ra-2.4-stardust03.rar to folder IR_JBOSS_HOME/standalone/deployments.
  2. Add the below Hazelcast RAR configuration to IR_JBOSS_HOME/standalone/configuration/standalone.xml to <subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"> (under resource-adapters tag)
    <resource-adapter>
    	<archive>hazelcast-ra-2.4-stardust03.rar</archive>
       <transaction-support>LocalTransaction</transaction-support>
       <connection-definitions>
          <connection-definition class-name="com.hazelcast.jca.ManagedConnectionFactoryImpl" jndi-name="java:/HazelcastCF" use-ccm="false" />
       </connection-definitions>
    </resource-adapter>
  3. Add Hazelcast modules to global modules in the IR_JBOSS_HOME/standalone/configuration/standalone.xml file:
    <subsystem xmlns="urn:jboss:domain:ee:1.0">
       <ear-subdeployments-isolated>false</ear-subdeployments-isolated>
       <global-modules>
          <module name="javax.jcr" slot="main"/>
          <module name="com.hazelcast" slot="main"/>
          <module name="com.hazelcast.ra" slot="main"/>
       </global-modules>
    </subsystem>
  4. Adjust ra.xml in the Hazelcast RAR file. For config-property connectionTracingEvents the value FACTORY_INIT has to be set.
    <config-property>
       <description>Comma separated list of FACTORY_INIT, CREATE, TX_START, TX_COMPLETE, CLEANUP and DESTROY to
       trace connection events</description>
       <config-property-name>connectionTracingEvents</config-property-name>
       <config-property-type>java.lang.String</config-property-type>
       <config-property-value>FACTORY_INIT</config-property-value>
    </config-property>

Additional changes on JBoss configuration

Comment out the below lines in the IR_JBOSS_HOME/standalone/configuration/standalone.xml file to avoid that JBoss already starts a Web service endpoint:

<!--  subsystem xmlns="urn:jboss:domain:webservices:1.1">
   <modify-wsdl-address>true</modify-wsdl-address>
   <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
   <endpoint-config name="Standard-Endpoint-Config"/>
   <endpoint-config name="Recording-Endpoint-Config">
      <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
         <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
      </pre-handler-chain>
   </endpoint-config>
</subsystem> -->

Lifecycle Management Setup

Note
Throughout the section below, variables LM_JBOSS_HOME and LM_PROJECT_HOME must be interpreted and/or replaced with the equivalent actual folder paths in your setup.

Setting up the Lifecycle Management JBoss application Server

To set up the Lifecycle Management JBoss application server:

  1. Download and extract JBoss Application Server (7.1.1.Final) for Lifecycle Management to an arbitrary folder referred to as LM_JBOSS_HOME in the remainder of this document.
  2. Change memory settings in LM_JBOSS_HOME/bin/standalone.conf.bat file to below values:
    set "JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"

Building the Lifecycle Management WAR File for JBoss 7.1.1 / Oracle 11g

Create a Lifecycle Management Maven project (adjust below archetype version accordingly). In the following LM_PROJECT_HOME is used for the folder created by the Lifecycle Management archetype.

mvn archetype:generate -DarchetypeGroupId=com.infinity.iod.archetypes -DarchetypeArtifactId=iod-archetype-jb711-lm-portal-war 
   -DarchetypeVersion=1.5-M5-SNAPSHOT -DgroupId=com.infinity.iod -DartifactId=lm-ipp720-jb711 -Dversion=1.0.0-SNAPSHOT

On successful completion, you should see something like the following:

[INFO] project created from Archetype in dir: C:/development/ipp/lm-ipp720-jb711
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.780s
[INFO] Finished at: Thu Sep 27 07:44:51 CDT 2013
[INFO] Final Memory: 10M/120M
[INFO] ------------------------------------------------------------------------

Change db.user and db.password in LM_PROJECT_HOME/pom.xml to a user with administrator rights.

Adjust the pom.xml file in the LM_PROJECT_HOME folder. Make sure the specified db.user has administrator rights.

<db.user>root</db.user>
<db.password>root</db.password>
<db.url>jdbc:oracle:thin:@localhost:1521:SG</db.url>
<db.lm.user>lm</db.lm.user>
<db.lm.password>lm</db.lm.password>
<db.jcr.user>jcr16</db.jcr.user>
<db.jcr.password>jcr16</db.jcr.password>

Make sure the ojdbc6 dependency in pom.xml is using the correct version (e.g. 11.2.0.1.0):

<dependency>
   <groupId>com.oracle</groupId>
   <artifactId>ojdbc6</artifactId>
   <version>11.2.0.1.0</version>
</dependency>

Install the ojdbc6.jar driver into local repository with Maven command below if not done already.

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar 
   -Dfile=ojdbc6.jar -DgeneratePom=true

If required, adjust carnot.properties accordingly in LM_PROJECT_HOME/src/main/resources for database connectivity settings:

AuditTrail.URL = jdbc:oracle:thin:localhost:1521:SG
AuditTrail.User = lm
AuditTrail.Password = lm
AuditTrail.Schema = lm

If required, the target version can be changed by modifying <ipp.version> in the LM_PROJECT_HOME/pom.xml file:

<ipp.version>7.2.0</ipp.version>

Build the Lifecycle Management Maven project from the LM_PROJECT_HOME folder. Note that this may take several (possibly in excess of 45+) minutes.

mvn clean package

On successful completion, you should see something like the following:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:04:37.514s
[INFO] Finished at: Thu Apr 11 08:59:18 CDT 2013
[INFO] Final Memory: 20M/137M
[INFO] ------------------------------------------------------------------------

Copy the lifecycle-management.war file from folder LM_PROJECT_HOME/target to folder LM_JBOSS_HOME/standalone/deployments.

Audit Trail Data Source

The Audit Trail Data Source is providing XA access to the database and LM-specific tables.

Define OJDBC6 Module

Perform the following steps to define the OJDBC6 module:

  1. Create folder com/oracle/main under LM_JBOSS_HOME/modules.
  2. Copy the ojdbc6.jar file to folder LM_JBOSS_HOME/modules/com/oracle/main
  3. Create module.xml in folder LM_JBOSS_HOME/modules/com/oracle/main with the content below:
    <?xml version="1.0" encoding="UTF-8"?>
    <module xmlns="urn:jboss:module:1.0" name="com.oracle">
       <resources>
          <resource-root path="ojdbc6.jar" />
       </resources>
       <dependencies>
          <module name="javax.api" />
          <module name="javax.transaction.api"/>
       </dependencies>
    </module>

XA Data Source definition

Add the XA Data Source definition to LM_JBOSS_HOME/standalone/configuration/standalone.xml to <subsystem xmlns="urn:jboss:domain:datasources:1.0"> (under datasources tag) and adjust URL, User and Password accordingly.

<xa-datasource jndi-name="java:/AuditTrail.DataSource" pool-name="AuditTrail" enabled="true" use-ccm="false">
   <xa-datasource-property name="URL">
      jdbc:oracle:thin:@localhost:1521:XE
   </xa-datasource-property>
   <xa-datasource-property name="User">lm</xa-datasource-property>
   <xa-datasource-property name="Password">lm</xa-datasource-property>
   <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
   <driver>oracle</driver>
   <xa-pool>
      <min-pool-size>1</min-pool-size>
      <max-pool-size>60</max-pool-size>
      <prefill>false</prefill>
      <use-strict-min>false</use-strict-min>
      <flush-strategy>FailingConnectionOnly</flush-strategy>
      <no-tx-separate-pools>true</no-tx-separate-pools>
      <pad-xid>false</pad-xid>
      <wrap-xa-resource>true</wrap-xa-resource>
   </xa-pool>
   <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
      <validate-on-match>false</validate-on-match>
      <background-validation>false</background-validation>
      <use-fast-fail>false</use-fast-fail>
      <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
   </validation>
</xa-datasource>

Driver definition

Add the driver definition to LM_JBOSS_HOME/standalone/configuration/standalone.xml to <subsystem xmlns="urn:jboss:domain:datasources:1.0"> (under drivers tag).

<driver name="oracle" module="com.oracle">
   <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>

Jackrabbit Respository

Define JCR 2.0 Module

To define the JCR 2.0 module perform the following steps:

Prepare Jackrabbit RAR deployment

To prepare a Jackrabbit RAR deployment:

  1. Copy jackrabbit-jca-2.6.1.rar to folderLM_JBOSS_HOME/standalone/deployments. You can download the jackrabbit-jca-2.6.1-infinity02.rar file from the following location: https://infinity.sungard.com/repository/simple/ipp-3rd-party/org/apache/jackrabbit/jackrabbit-jca/2.6.1-infinity02/jackrabbit-jca-2.6.1-infinity02.rar.
  2. In the RAR file the META-INF/MANIFEST.MF has to be changed by adding the following line to the end of the file:
    Dependencies: javax.jcr export,org.slf4j
  3. Remove jars logback-classic-0.9.20.jar and logback-core-0.9.20.jar from the RAR file to use the JBoss logging framework.
  4. Copy ojdbc6.jar to the Jackrabbit RAR file.

Note

In case you like to use DOCX files, e.g. for templating, and you have a local jackrabbit-jca-2.6.1.rar which was downloaded via the earlier jackrabbit-jca-2.6.1-infinity01.rar file version, do one of the following:

Resource Adapter

Configuring the resource adapter:

  1. Add the resource adapter definition to LM_JBOSS_HOME/standalone/configuration/standalone.xml to <subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"> (under resource-adapters tag) and adjust configFile and homeDir accordingly (make sure the defined folders are existing).
    <subsystem xmlns="urn:jboss:domain:resource-adapters:1.0">
       <resource-adapters>
       	<resource-adapter>
             <archive>
                jackrabbit-jca-2.6.1.rar
             </archive>
             <transaction-support>XATransaction</transaction-support>
             <connection-definitions>
                <connection-definition class-name="org.apache.jackrabbit.jca.JCAManagedConnectionFactory" jndi-name="java:/jcr/jackrabbit" enabled="true" use-java-context="true" pool-name="jackrabbit" use-ccm="false">
                   <config-property name="configFile">
                      C:/tmp/repository-lm/repository.xml
                   </config-property>
                   <config-property name="bindSessionToTransaction">
                      true
                   </config-property>
                   <config-property name="homeDir">
                      C:/tmp/repository-lm
                   </config-property>
             	</connection-definition>
             </connection-definitions>
       	</resource-adapter>
       </resource-adapters>
    </subsystem>
  2. Copy the repository.xml configuration file from LM_PROJECT_HOME/src/main/webapp/WEB-INF/jackrabbit to the location specified in configFile property and adjust the database related configuration accordingly.
  3. Due to an issue with validation when deploying Jackrabbit on JBoss (https://issues.apache.org/jira/browse/JCR-3241), the archive-validation should be disabled within the JCA subsystem in LM_JBOSS_HOME/standalone/configuration/standalone.xml.
    <subsystem xmlns="urn:jboss:domain:jca:1.1">
       <archive-validation enabled="false" fail-on-error="true" fail-on-warn="false"/>
  4. Set up a global module for the jcr-2.0.jar to be accessible to all deployments. In <subsystem xmlns="urn:jboss:domain:ee:1.0"> add the following line:
    <global-modules>
       <module name="javax.jcr" slot="main" />
    </global-modules>

Messaging Provider for IPP

Perform the following steps to configure a messaging provider for IPP:

  1. Add <extension module="org.jboss.as.messaging"/> to extensions in LM_JBOSS_HOME/standalone/configuration/standalone.xml if it does not exist already.
  2. In the LM_JBOSS_HOME/standalone/configuration/standalone.xml file, add the following content inside <subsystem xmlns="urn:jboss:domain:messaging:1.1">. The connection-factory dummyCF has to be created as workaround due to the following issue: https://issues.jboss.org/browse/AS7-5538.
    <subsystem xmlns="urn:jboss:domain:messaging:1.1">
       <hornetq-server>
          <connectors>
             <in-vm-connector name="in-vm" server-id="0"/>
          </connectors>
          
          <acceptors>
             <in-vm-acceptor name="in-vm" server-id="0"/>
          </acceptors>
          
          <jms-connection-factories>
             <connection-factory name="dummyCF">
                <connectors>
                   <connector-ref connector-name="in-vm"/>
                </connectors>
                <entries>
                   <entry name="java:jboss/exported/jms/dummyCF"/>
                </entries>
             </connection-factory>
             <pooled-connection-factory name="hornetq-ra">
                <transaction mode="xa"/>
                <connectors>
                   <connector-ref connector-name="in-vm"/>
                </connectors>
                <entries>
                   <entry name="java:/CarnotConnectionFactory"/>
                </entries>
             </pooled-connection-factory>
          </jms-connection-factories>
          
          <jms-destinations>
             <jms-queue name="IppApplicationQueue">
                <entry name="java:/queue/CarnotApplicationQueue"/>
             </jms-queue>
             <jms-queue name="IppSystemQueue">
                <entry name="java:/queue/CarnotSystemQueue"/>
             </jms-queue>
             <jms-queue name="IppDaemonQueue">
                <entry name="java:/queue/CarnotDaemonQueue"/>
             </jms-queue>
          </jms-destinations>
       </hornetq-server>
    </subsystem>

Lifecycle-Management Persistence Layer (JPA)

Define Eclipse Link 2.0.0 Module

To define an Eclipse link module:

  1. Create a folder org/eclipse/persistence/main under LM_JBOSS_HOME/modules.
  2. Copy the eclipselink-2.0.0.jar to folder LM_JBOSS_HOME/modules/org/eclipse/persistence/main.
  3. Create a file module.xml in folder LM_JBOSS_HOME/modules/org/eclipse/persistence/main with the below content:
    <?xml version="1.0" encoding="UTF-8"?>
    <module xmlns="urn:jboss:module:1.1" name="org.eclipse.persistence">
       <resources>
          <resource-root path="eclipselink-2.0.0.jar"/>
       </resources>
       <dependencies>
          <module name="com.oracle"/>
          <module name="asm.asm"/>
          <module name="javax.api"/>
          <module name="javax.persistence.api"/>
          <module name="javax.transaction.api"/>
          <module name="javax.validation.api"/>
          <module name="javax.xml.bind.api"/>
          <module name="org.antlr"/>
          <module name="org.apache.commons.collections"/>
          <module name="org.dom4j"/>
          <module name="org.javassist"/>
          <module name="org.jboss.logging"/>
       </dependencies>
    </module>

Additional changes on JBoss Configuration

Perform the following additional changes on the JBoss configuration:

  1. Comment out the following lines in the LM_JBOSS_HOME/standalone/configuration/standalone.xml file to avoid that JBoss already starts a Web service endpoint:
    <!--  subsystem xmlns="urn:jboss:domain:webservices:1.1">
       <modify-wsdl-address>true</modify-wsdl-address>
       <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
       <endpoint-config name="Standard-Endpoint-Config"/>
       <endpoint-config name="Recording-Endpoint-Config">
          <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
             <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
          </pre-handler-chain>
       </endpoint-config>
    </subsystem> -->
  2. Change ports in the LM_JBOSS_HOME/standalone/configuration/standalone.xml file to avoid conflicts with Integration Runtime.
    Example:
    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
       <socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9989}"/>
       <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9980}"/>
       <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9444}"/>
       <socket-binding name="ajp" port="8010"/>
       <socket-binding name="http" port="8081"/>
       <socket-binding name="https" port="8444"/>
       <socket-binding name="osgi-http" interface="management" port="8091"/>
       <socket-binding name="remoting" port="4448"/>
       <socket-binding name="txn-recovery-environment" port="4714"/>
       <socket-binding name="txn-status-manager" port="4715"/>
       <outbound-socket-binding name="mail-smtp">
          <remote-destination host="localhost" port="25"/>
       </outbound-socket-binding>
    </socket-binding-group>

Lifecycle Management Portal Setup

Note
Throughout the section below, variables LM_JBOSS_HOME and IR_JBOSS_HOME must be interpreted and/or replaced with the equivalent actual folder paths in your setup.

Starting JBoss

Start the Lifecycle Management server by running LM_JBOSS_HOME/bin/standalone.bat

Start the Integration Runtime server by running IR_JBOSS_HOME/bin/standalone.bat

Portal Login

Login to the Lifecycle Management Portal via http://host:port/lifecycle-management whereby host and port depend on your settings for the Lifecycle JBoss server. If using all the default settings from above, this would be http://localhost:8081/lifecycle-management. The default motu / motu credentials can be used.


Figure: Lifecycle Portal Login.

Setting up a Solution

More details regarding how to setup and deploy a solution can be found here.