Adding an Integration Framework application to Maximo 7.1 on WebSphere 6.1

Technote (FAQ)


This document applies only to the following language version(s):

English

Question

What are the steps required to add a stand-alone Maximo Integration Framework application for best performance?

Cause

When using the Maximo Integration Framework (MIF) in your environment the following should be considered.
· For best performance with minimal impact to users, the MIF can be configured to run on a single instance of Maximo.

· To share these resources, all resources will need to be defined at the cell level within the WebSphere console. The reason for this is although the MIF instance will do all of the processing of inbound transactions, outbound transaction events will still occur from the UI instance(s) (usually MXServer) upon saving Maximo records. This means that the UI instance(s) need to have access to the JMS resources such as connection factories in order to be able to send outbound messages.

· The MIF instance is only responsible for processing inbound MIF transactions from the continuous queue and therefore will need to also have the Message Driven Bean (MDB) deployed along with the Maximo application. This second instance will use a slightly modified maximo.ear that will processing outbound MIF transactions from the UI instance to a separate application server.


Answer

Below you will find instructions for setting up Maximo with a stand-alone application server for Maximo MIF transaction processing.


In the example configuration below, we will use the following names:
MXMIF is the application server for the Maximo Enterprise Adapter instance
MXServer is the default installed Maximo UI instance

Create a second application server: Name this second server MXMIF
1. Open the WebSphere Administrative Console.
2. Click Servers > Application servers, in the Application servers pane, click New.
3. Create New Application Server screen, enter MXMIF in the Server name field and click Next.
4. In the Select a server template screen, leave the selected “default” and click Next.
5. In the Specify server specific properties screen, check “Generate Unique Ports” checkbox,
click Next.
6. Click Finish, and then click Save.
7. Modify the MXMIF server properties:
a. Add Heap sizes:
Click on the new MXMIF server > Java and Process Management > Process Definition > Java
Virtual Machine and fill in both the Initial/Maximum Heap sizes. Click Apply, then click Save

NOTE: When setting the maximum heap size for the MXMIF application server JVM, the admin guide says to set this to 1024MB, however, since this application server will not be used by users directly, the memory size can be increased to 2048MB so that it can handle large volumes of messages

b. Set the MXMIF server to start in RUNNING mode:
Click on the new MXMIF server > Java and Process Management > Monitoring Policy and
change “Node restart state from STOPPED to RUNNING. Click Apply and then click Save.

Creating data source providers for JMS stores
Set two data sources in the WebSphere console for use by the JMS resources

Note that each data source will require a unique schema, one will be used by the MIF instance and the other will be used by the UI instance. This is a WebSphere requirement that two message engines require unique schema names. As you add bus members, each member added will cause a unique message engine to be created. In this configuration there are two members, the MIF instance and the UI instance.

Since two schemas will be required for this configuration, and the first schema name will be the maximo schema, work with your DBA to create a second schema in the same database specifically for use by the second data source before proceeding with the steps below.

Important: The user that owns the second schema must be able to create tables.

Creating the data source provider
1. Log into the WebSphere Administrative console
2. Resources > JDBC > JDBC Providers
3. Select a valid Scope from the dropdown that represents the top level (cell), such as
Cell=ctgCell01.
4. Click the "New" button.
5. In Step 1: Create new JDBC provider, select the following:
a. Select your database type.
b. Select the provider type (i.e. oracle and oracle driver).
c. In the implementation type dropdown select "XA data source".
d. In the name field, enter oraclexa, click “Next”.
6. In Step 2: Enter database class path information, enter the local path to your oraclethin.jar in the
Directory location box, example: C:\ibm\SMP\maximo\applications\maximo\lib\ and click Next.
7. Click “finish” and then click the oraclexa again
8. Edit the Class path box with the correct path to the oracethin.jar as follows:
C:\ibm\SMP\maximo\applications\maximo\lib\oraclethin.jar
9. Click Apply and then click Save.

Creating the data sources with JAAS-J2C authentication data
1. Navigate back to your JDBC providers and click oraclexa.
2. Click “Data sources" and then click New.
3. In Step 1: Enter basic data source information, in the Data source name field enter: oraclexads
4. In the JNDI name field, enter: jdbc/oraclexads, click “next”.
5. In Step 2: Enter database specific properties for the data source, enter the JDBC URL for your
database (this can be found in your maximo.properties if you are not sure)
jdbc:oracle:thin:@server:1521:ctginst1
6. Select the Data store helper class name dropdown, select your database version, click Next.
Click “Finish” and then click Save
7. Click on your new data source - oraclexads
8. Under Related Items, click the link for "JAAS-J2C authentication data", click New
a. In the alias field, enter a value you would like to use: i.e. maximo
b. Enter the username and password used to connect to the database.
c. Enter a description that identifies this entry
9. Click Apply.
10. Navigate back to your data source called oraclexads.
11. In the dropdown field for "Component managed authentication alias", select your data alias
(i.e. maximo)
12. Click Apply and then Save.
13. Navigate to your data source again and click the Test Connection button at the top of the
screen to test your data source.
14. Repeat steps 1-13 above to create a second data source named maximo2 JNDI - oraclexads2
and JAAS-J2C authentication.

Creating the JMS buses and Bus members
1. Service Integration/Buses, click New.
2. In Step 1: Create a new bus, enter in the name field "intjmsbus"
3. Deselect the "Bus Security" checkbox and click “Next”, then click “Finish”.
4. Navigate to the bus you just created and select it.
5. Change the "High message threshold" to 500,000 messages
6. Click "Apply" and then Save.
7. Select intjmsbus, select "Bus members", click Add.
8. In Step1: Select server, cluster…, select the “server” radio button, select MXMIF server from
the drop down, click “next”
9. In Step 2: Select the “Data store” radio button, click Next.
10. In Step 3: Provide the message store properties,
a. select the “Use existing data source” radio button.
b. In the data source JNDI name field, enter: jdbc/oraclexads
c. Enter the schema name for the authentication alias used by this data source
(i.e. maximo).
d. Select the alias you created for this data source from the dropdown.
e. Make sure the “Create tables” checkbox is checked, click Next.
11. Click “finish” and then click Save.
12. Repeat steps 1-11 above for the uijmsbus, except using maximo2 and jdbc/oraclexads2

Setting the message store authentication alias
1. Service Integration/Buses and select intjmsbus, select “Messaging engines”
2. Select the message engine from the list, there should be only one for the MIF server
3. Under “Additional Properties” select “Message store”
4. In the authentication alias dropdown, select the maximo alias, click Apply and then click Save
5. Repeat the above 4 steps to for the uijmsbus and maximo2 alias.

Creating queues

cqin
1. Service Integration/Buses, select intjmsbus
2. Click "Destinations", click New
3. Under Select destination type, select "Queue" and click “Next”
4. In Step 1: Set queue attributes, the Identifier field, enter "cqinbd" and click “Next”
5. In Step 2: Assign the queue to a bus member, under Bus member select
Node=ctgNode01:server=MXMIF and click “Next”, then click “Finish”.
6. Navigate back to this destination, and set the exception destination radio button to “Specify”
and set the value in the textbox to cqinbderr
7. Click “Apply” and click Save.
8. Repeat steps 1-7 for the cqinbderr queue.

sqin
1. Click New
2. Under Select destination type, select "Queue" and click “Next”
3. In Step 1: Set queue attributes, the Identifier field, enter "sqinbd" and click “Next”
4. In Step 2: Assign the queue to a bus member, under Bus member select
Node=ctgNode01:server=MXMIF and click “Next”, then click “Finish”.
5. Navigate back to this destination, and set the exception destination radio button to “None”.
6. Click “Apply” and click Save.

sqout
1. Service Integration/Buses, select uijmsbus
2. Click "Destinations", click New
3. Under Select destination type, select "Queue" and click “Next”
4. In Step 1: Set queue attributes, the identifier field, enter "sqoutbd".
5. In Step 2: Assign the queue to a bus member, under Bus member select
Node=ctgNode01:Server=MXServer and click “Next”, then click “Finish”.
7. Navigate back to this destination, and set the exception destination radio button to “None”.
8. Click “Apply” and click Save.

Creating the MIF connection factories
1. Resources/JMS providers
2. Select “Default Messaging Provider”, Cell=ctgCell01 scope
3. Select "Queue connection factories", click New and fill in the following:
a. In the name field, enter "mifconfact"
b. In the JNDI name field, enter: jms/maximo/int/cf/intcfmif
c. Select the “Bus name” intjmsbus from the dropdown, click "apply".
4. Go back to "Queue connection factories", click New and fill in the following:
a. In the name field, enter "uiconfact".
b. In the JNDI name field, enter: jms/maximo/int/cf/intcfui
c. Select the bus uijmsbus from the dropdown.
d. Click "apply" and then click Save.

Create Continuous inbound error queue:
1. Resources/JMS providers
2. Select “Default Messaging Provider”, Cell=ctgCell01 scope
3. Click “Queues”, then click "New".
4. Enter the name as "CQINERR"
5. In the JNDI name field, enter "jms/maximo/int/queues/cqinerr”
6. Select the intjmsbus as the bus for this queue from the bus name drop down
7. Select the cqinbderr queue from the queue name drop down
8. Click "Apply".

Modify JMS queues

Continuous inbound queue:
1. Select "CQIN"
2. Select the intjmsbus as the bus for this queue from the bus name drop down
3. Select the cqinbd queue from the queue name drop down
4. Click "Apply".

Sequential inbound queue:
1. Select "SQIN"
2. Select the intjmsbus as the bus for this queue from the bus name drop down
3. Select the sqinbd queue from the queue name drop down
4. Click "Apply".

Sequential outbound queue:
1. Select "SQOUT"
2. Select the uijmsbus as the bus for this queue from the bus name drop down
3. In Select the sqoutbd queue from the queue name drop down
4. Click "Apply" and then click Save.

Creating the JMS Activation Specifications
1. Resources/JMS/Activation specifications.
2. If it already exists, select and delete the current Activation specification “intjmsact”
3. Resources/JMS/JMS providers
4. Select “Default Messaging Provider”, Cell=ctgCell01 scope
5. Click “Activation specifications”, then click "New".
a. In both the Name field and the JNDI name field, enter "intjmsact"
b. In the "Destination JNDI name" field, enter "jms/maximo/int/queues/cqin"
c. Select the bus "intjmsbus" from the bus name drop down
d. Set Maximum batch size to 10, set Maximum concurrent end points to 5
6. Click Apply
7. Repeat the steps above for a second activation specification called “intjmsacterr”
a. both the Name field and the JNDI name field, enter "intjmsacterr"
b. In the “Destination JNDI name” field, enter “jms/maximo/int/queues/cqinerr”
c. Select the bus "intjmsbus" from the bus name drop down
d. Set Maximum batch size to 1, set Maximum end points to 10
8. Click “apply” and then click Save.

Changes required in Maximo
1. Log into the Maximo application
2. Navigate to the Integration/External Systems application
3. Select any external system and then from the Select action menu, select add/modify queues
4. Modify the connection factory names for your queues to match the names created above and the Maximum try count value as below:

Continuous inbound queue:
Queue JNDI name: jms/maximo/int/queues/cqin
Queue Connection Factory: jms/maximo/int/cf/intcfmif
Maximum Try count: 3

Queue JNDI name: jms/maximo/int/queues/cqinerr
Queue Connection Factory: jms/maximo/int/cf/intcfmif
Maximum Try count: 0

Sequential inbound queue:
Queue JNDI name: jms/maximo/int/queues/sqin
Queue Connection Factory: jms/maximo/int/cf/intcfmif
Maximum Try count: 0

Sequential outbound queue:
Queue JNDI name: jms/maximo/int/queues/sqout
Queue Connection Factory: jms/maximo/int/cf/intcfui
Maximum Try count: 0

5. Save your changes.

6. Configure you JMS crontasks (see the Systems Administrator guide for details).

The following sections cover preparing both the UI and IF applications

Prepare the UI application

1. Edit the maximo.properties file and add the donotrun option as below:
a. mxe.crontask.donotrun=JMSQSEQCONSUMER.SEQQIN ,BBCron.BBCRON1, ESCALATION. ESCESCBLTNEXP, REPORTLOCKRELEASE. REPORTLOCKRELEASE1, REPORTUSAGECLEANUP. REPORTUSAGECLEANUP1
Since we want all crontasks to run in the MIF instance, all crontasks will be listed here except for the JMSQSEQCONSUMER.SEQQOUT - this crontask will need to run in the UI instance.

Note: You can also use the Target Enable feature to force the MIF crontasks to run in specific servers.

Be sure to go through your list of crontasks and note each instance in the correct case and add it to the mxe.crontask.donotrun parameter in the maximo.properties, each separated by a comma

2. Build the maximo.ear file.


Prepare the IF application

For the MXMIF application instance, edit the following files and enable the message driven beans used by the continuous queues:

1. Locate the file under maximo/applications/maximo/mboejb/ejbmodule/meta-inf/ejb-jar.xml and edit the file, making sure the following four sections are uncommented to look like below:

<!-- MEA MDB -->
<message-driven id="MessageDriven_JMSContQueueProcessor_1">
<ejb-name>JMSContQueueProcessor-1</ejb-name>
<ejb-class>psdi.iface.jms.JMSContQueueProcessor</ejb-class>
<transaction-type>Container</transaction-type>
<message-destination-type>javax.jms.Queue</message-destination-type>
<env-entry>
<env-entry-name>MESSAGEPROCESSOR</env-entry-name>
<env-entry-type>java.lang.String </env-entry-type>
<env-entry-value>psdi.iface.jms.QueueToMaximoProcessor</env-entry-value>
</env-entry>
</message-driven>

<!-- MEA MDB for error queue -->
<message-driven id="MessageDriven_JMSContQueueProcessor_2">
<ejb-name>JMSContQueueProcessor-2</ejb-name>
<ejb-class>psdi.iface.jms.JMSContQueueProcessor</ejb-class>
<transaction-type>Container</transaction-type>
<message-destination-type>javax.jms.Queue</message-destination-type>
<env-entry>
<env-entry-name>MESSAGEPROCESSOR</env-entry-name>
<env-entry-type>java.lang.String </env-entry-type>
<env-entry-value>psdi.iface.jms.QueueToMaximoProcessor</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>MDBDELAY</env-entry-name>
<env-entry-type>java.lang.Long </env-entry-type>
<env-entry-value>30000</env-entry-value>
</env-entry>
</message-driven>

<!-- MEA MDB -->
<container-transaction>
<method>
<ejb-name>JMSContQueueProcessor-1</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>

<!-- MEA MDB for error queue -->
<container-transaction>
<method>
<ejb-name>JMSContQueueProcessor-2</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>

2. Locate the file under maximo/applications/maximo/mboejb/ejbmodule/meta-inf/ibm-ejb-jar-bnd.xmi and edit the file using a text editor, making sure the following 2 sections are uncommented to look like below:

<!-- MEA MDB -->
<ejbBindings xmi:type="ejbbnd:MessageDrivenBeanBinding" xmi:id="MessageDrivenBeanBinding_1" activationSpecJndiName="intjmsact">
<enterpriseBean xmi:type="ejb:MessageDriven" href="META-INF/ejb-jar.xml#MessageDriven_JMSContQueueProcessor_1"/>
</ejbBindings>

<!-- MEA MDB for error queue -->
<ejbBindings xmi:type="ejbbnd:MessageDrivenBeanBinding" xmi:id="MessageDrivenBeanBinding_1" activationSpecJndiName="intjmsacterr">
<enterpriseBean xmi:type="ejb:MessageDriven" href="META-INF/ejb-jar.xml#MessageDriven_JMSContQueueProcessor_2"/>
</ejbBindings>

3. Edit the maximo.properties file and add the donotrun option as below:
a. mxe.name=MXMIF
b. mxe.crontask.donotrun=JMSQSEQCONSUMER.SEQQOUT

Note: SEQQOUT will be the only crontask entry because this is the only crontask that we do not want to run.
4. Rename the current maximo.ear (for keeping) and then build the maximo.ear. When the new ear has been built, rename the new ear to”mxmif.ear”.

Deploy both the UI and IF applications

1. 1. Deploy both ear files:
a. The maximo.ear will be deployed to the MXServer, when mapping modules to servers make sure you select both the MXServer as well as the webserver1 and when mapping virtual hosts to web modules use the virtual host you created above: maximo_host

b. The mxmif.ear will be deployed to the MXMIF application, for the application name change from "MAXIMO" to MXMIF. When mapping modules to servers make sure you select both the MXMIF as well as the webserver1 and when mapping virtual hosts to web modules use the virtual host you created above: maximo_host

2. Start the MXServer and the MXMIF application servers.

Also see:
Building different maximo.ear files from one Maximo installation folder
https://www-304.ibm.com/support/docview.wss?uid=swg21450028

The Integration Global Directory:

When you deploy a web service, a folder called Axis2 is updated with the service you have just deployed. This file will be written under to root folder of the Integration Global Directory. If WebSphere application servers will be distributed in a multi-node environment, the integration global directory must exist in a shared location that all application servers can access.

This directory is used for error file extract and wsdl files for web services.
This shared location can be either a mapped drive or UNC share (Windows), or a mount point (Unix). The user specified to run the WebSphere services must have access to read and write to this share or mount point. This includes the node agent. In Windows, do not use a local system account to start Windows services but rather a domain account as local system accounts to not have access to mapped drives or UNC shares.

You set the integration global directory path in the System Properties application, the property is called mxe.int.globaldir.

Deploying web services

When deploying web services, you will need to set up the web service administration URL and port to point to the MXMIF application server IP address and port. When sending transactions to these interfaces, you will need to point your web service client to the IP address and port of the MXMIF application server IP address and port, not the cluster address for the UI instances

It is also important to make sure that the Integration Global Directory is in a location that all application servers in a multi-node environment can access. See the next section for information on the Integration Global Directory.


Important note:

Importing data can only be performed while logged into the MIF instance where the Message Driven Bean is deployed. Exporting data can only be performed while logged into one of the UI application.


Cross reference information
Segment Product Component Platform Version Edition
Systems and Asset Management Tivoli Asset Management for IT Not Applicable
Systems and Asset Management Tivoli Change and Configuration Management Database Not Applicable
Systems and Asset Management Tivoli Service Request Manager Not Applicable

Rate this page:

(0 users)Average rating

Document information


More support for:

IBM Maximo Asset Management

Software version:

7.1, 7.1.1

Operating system(s):

AIX, HP-UX, Linux, Solaris, Windows

Software edition:

All Editions

Reference #:

1461689

Modified date:

2011-02-07

Translate my page

Machine Translation

Content navigation