When using the Maximo Integration Framework (IF) in a clustered environment the following should be considered.
For best performance with minimal impact to users, the Maximo Integration Framework (IF) can be configured to run on a single WebLogic application server instance of Maximo while users log in and work with a User Interface (UI) cluster of Maximo instances.
In the below example, you will need 4 WebLogic application servers.
One application server will serve as the Administration console for the rest of the "managed" servers.
One application server will be used for the stand-alone Maximo application used specifically for inbound IF transaction processing.
The other two application servers will be used to set up a cluster of application servers for use as the UI cluster. All outbound transactions will be generated by the UI cluster members running Maximo.
In the sample configuration below, there are 2 application servers in the UI cluster and 1 application server in the stand-alone application server.
Below you will find instructions for configuring JMS resources for the IF instance and the UI cluster.
Before you begin:
Below are the names used in the rest of this document:
Name the Admin server AdminMAXSERV
Name the first Maximo application server for the UI cluster MAXIMOUI1
Name the second Maximo application server for the UI cluster MAXIMOUI2
Name the stand-alone Maximo application server MAXIMOIF
It is best to have two Maximo installation folders that are identical, since there will be a need for 2 different maximo.ear files, one with the Message Driven Bean enabled for inbound transaction processing on the MAXIMOIF application server, and one for the Maximo cluster where no inbound transaction processing will occur, this will eliminate confusion as to which ear file has this module enabled.
Creating your application servers
This document assumes you already have WebLogic 9.x installed and that you have an Administration server, and one managed server used for the Maximo application.
If you do not have a separate Administration server instance, create a new application server specifically for this purpose which will have a unique port.
You will need to modify the start script of your original application server and change the ADMIN_URL variable to point to the correct hostname and port of your new Administration server.
i.e. set ADMI N_UR L=ht tp:/ /loc alho st:7 00 1
Maximo will not be deployed to the administration server, it will be used only to manage all other application server instances.
Your original application server instance can be designated as your IF server. However, if you prefer to have it named according to this document, you will need to delete and recreate this server with the name MAXIMOIF.
You will also need to create 2 new managed application servers, belonging to a new cluster.
You can name them MAXIMOUI1 and MAXIMOUI2.
Configuring your startup scripts
See guide for your application server to complete the configuration of the startup scripts.
NOTE: When setting the maximum heap size for the MAXIMOIF 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 a larger volume of messages without running out of memory.
Refer to this BEA web site for general information on load balancing in a cluster.
Defining the jdbc data source for use with JMS resources
Click the “lock and edit” button
1) log in to the WebLogic console and navigate to services/jdbc/data sources
2) click "create a new jdbc data source"
3) enter the name and JNDI name as follows:
4) select the type as your database platform type such Oracle thin or sql server driver etc, click next - NOTE: this must be a non-XA driver
5) turn off “supports global transaction” because feature is not supported for jms stores, then click next
6) configure the correct database name, hostname, port and user information, click next
7) confirm the information and click the “test connection” button.
8) If successful click next
9) select all 3 servers (IF, UI1 and UI2) as the targets for this data source
10) click “finish”
Click “Activate Changes”
Creating your data stores for use with JMS resources
NOTE: the prefix values are very important, if you do not have unique names for prefix values on each store, messages can become corrupt as they will all use the same store files.
In the WebLogic console, navigate in the left pane serv ices /JDB C/pe rsis tent stores
Click the “lock and edit” button
1) click the link "create a new JMS jdbc store"
2) enter the name as mxintcqinstore
3) select the target for this store as MAXIMOIF
4) select the data source created above
5) enter a prefix value of "mxintcqin", then click "finish"
6) create another new JMS jdbc store
7) enter the name as mxintsqinstore
8) select the target for this store as MAXIMOIF
9) select the data source created above
10) enter a prefix value of "mxintsqin", then click "finish"
11) create a third JMS jdbc store
12) enter the name as mxintsqoutstore
13) select the target for this store as MAXI MOUI 1(mi grat eabl e )
14) select the data source created above
15) enter a prefix value of "mxintsqout", then click "finish"
16) create a fourth JMS jdbc store
17) enter the name as mxintcqinerrstore
18) select the target for this store as MAXIMOIF
19) select the data source created above
20) enter a prefix value of "mxintcqinerr", then click "finish"
Click “Activate Changes”
Creating your JMS resources for use in a clustered environment
Click the “lock and edit” button
1. Create three JMS servers with the following configuration parameters:
Parameter Value Properties
Name: Target:
sqinserver MAXIMOIF
sqoutserver MAXI MOUI 1(Mi grat eabl e )
cqinserver MAXIMOIF
cqin errs erve r MAXIMOIF
2. Create a JMS system module named ifjmsmodule with MAXIMOIF as the target server.
3. Add a connection factory resource to the JMS module:
Parameter Value
Name:
intjmsconfact
JNDI Name:
jms/ maxi mo/i nt/c f/in tcf
Target:
MAXIMOIF
7. Add three queue resources to the JMS Module:
a. Create the queue resource type.
b. Create a new subdeployment with the same name as the queue, click next.
c. select the radio button for the JMS server you are creating this subdeployment for.
Parameter Value
Queue 1
Name:
sqin
JNDI Name:
jms/ maxi mo/i nt/q ueue s/sq in
Subdeployment name:
sqin
JMS server name:
mxintsqin
Queue 2
Name:
cqin
JNDI Name:
jms/ maxi mo/i nt/q ueue s/cq in
Subdeployment name:
cqin
JMS server name:
mxintcqin
Queue 3
Name:
cqinerr
JNDI Name:
jms/ maxi mo/i nt/q ueue s/cq iner r
Subdeployment name:
cqinerr
JMS server name:
mxintcqinerr
Template:
None
8. Enable the JMS connection factory for XA:
a. Select the intjmsconfact link.
b. From the Transactions tab, check the XA Connection Factory Enabled checkbox
c. Set the Maximum Messages per Session to -1.
9. Save and activate the changes.
10. Create a second JMS system module named uijmsmodule with MAXIMOUI1 as the target server.
11. Add a connection factory resource to the JMS module:
Parameter Value
Name:
intjmsconfact
JNDI Name:
jms/ maxi mo/i nt/c f/in tcf
Target:
MAXI MOUI 1(mi grat eabl e )
12. Add one queue resource to the JMS Module:
a. Create the queue resource type.
b. Create a new subdeployment with the same name as the queue, click next.
c. select the radio button for the JMS server you are creating this subdeployment for.
Parameter Value
Queue 1
Name:
sqout
JNDI Name:
jms/ maxi mo/i nt/q ueue s/sq ou t
Template:
None
13. Enable the JMS connection factory for XA:
a. Select the intjmsconfact link.
b. From the Transactions tab, check the XA Connection Factory Enabled checkbox
c. Set the Maximum Messages per Session to -1.
14. Save and activate the changes.
Restart the WebLogic Admin, IF and UI application servers
NOTE: For each JDBC data store created above, a table will automatically be created in your MAXIMO schema with the prefix names you entered when you created the new stores and will be created in the database when the application servers are restarted:
MXINTCQINWLSTORE
MXINTCQINERRWLSTORE
MXINTSQINWLSTORE
MXINTSQOUTWLSTORE
Preparing the Maximo application for deployment to the IF application server
To make sure that the MDB used by the IF application is deployed correctly, edit the following file and make sure the MDBs are uncommented:
1. locate the file under Maxi mo/a ppli cati ons/ maxi mo/m boej b/ej bmod ule/ META -INF /ejb -jar .xml
Open the file using a text editor and uncomment the following:
Make sure the following 4 sections look like this:
<!-- MEA MDB -->
<message-driven id=" Mess ageD rive n_JM SCon tQue uePr oces sor_ 1" >
<ejb -nam e>JM SCon tQue uePr oces sor- 1</e jb-n ame >
<ejb -cla ss>p sdi. ifac e.jm s.JM SCon tQue uePr oces sor< /ejb -cla ss >
<tra nsac tion -typ e>Co ntai ner< /tra nsac tion -typ e >
<mes sage -des tina tion -typ e>ja vax. jms. Queu e</m essa ge-d esti nati on-t ype >
<env-entry>
<env -ent ry-n ame> MESS AGEP ROCE SSOR </en v-en try- name >
<env -ent ry-t ype> java .lan g.St ring </env-entry-type>
<env -ent ry-v alue >psd i.if ace. jms. Queu eToM axim oPro cess or</ env- entr y-va lue >
</env-entry>
</message-driven>
<!-- MEA MDB for error queue -->
<message-driven id=" Mess ageD rive n_JM SCon tQue uePr oces sor_ 2" >
<ejb -nam e>JM SCon tQue uePr oces sor- 2</e jb-n ame >
<ejb -cla ss>p sdi. ifac e.jm s.JM SCon tQue uePr oces sor< /ejb -cla ss >
<tra nsac tion -typ e>Co ntai ner< /tra nsac tion -typ e >
<mes sage -des tina tion -typ e>ja vax. jms. Queu e</m essa ge-d esti nati on-t ype >
<env-entry>
<env -ent ry-n ame> MESS AGEP ROCE SSOR </en v-en try- name >
<env -ent ry-t ype> java .lan g.St ring </env-entry-type>
<env -ent ry-v alue >psd i.if ace. jms. Queu eToM axim oPro cess or</ env- entr y-va lue >
</env-entry>
<env-entry>
<env -ent ry-n ame> MDBD ELAY </en v-en try- name >
<env -ent ry-t ype> java .lan g.Lo ng </env-entry-type>
<env -ent ry-v alue >300 00</ env- entr y-va lue >
</env-entry>
</message-driven>
<!-- MEA MDB -->
<con tain er-t rans acti on >
<method>
< ejb- name >JMS Cont Queu ePro cess or-1 </ej b-na me >
< meth od-n ame> *</m etho d-na me >
</method>
<tra ns-a ttri bute >Req uire d</t rans -att ribu te >
</co ntai ner- tran sact ion >
<!-- MEA MDB for error queue -->
<con tain er-t rans acti on >
<method>
< ejb- name >JMS Cont Queu ePro cess or-2 </ej b-na me >
< meth od-n ame> *</m etho d-na me >
</method>
<tra ns-a ttri bute >Req uire d</t rans -att ribu te >
</co ntai ner- tran sact ion >
2. Save and close the file.
3. Locate the Maxi mo/a ppli cati ons/ maxi mo/p rope rtie s/ma ximo .pro pert ies file and change the mxe.name property to a name that represents that this is the ear file for the IF instance, i.e. MXServerIF.
4. Add the line mxe. cron task .don otru n if it does not already exist in the properties files so that all crontasks except for the JMSQ SEQC ONSU MER. SEQQ OUT crontask will run on this server:
e.g.
mxe. cron task .don otru n=JM SQSE QCON SUME R.SE QQOU T
This will be the only crontask entry because this is the only crontask that we do not want to run.
5. Save and close the file
6. Build the maximo.ear
7. Deploy the maximo.ear to the MAXIMOIF application server (refer to the system administrator's guide for deployment information)
8. Restart the MAXIMOIF application server
Preparing the Maximo application for deployment to the UI cluster
To make sure that the MDB used by the IF application does not run in the UI cluster, edit the following files and make sure the MDBs are commented out:
1. locate the file under maxi mo/a ppli cati ons/ maxi mo/m boej b/ej bmod ule/ META -INF /ejb -jar .xml
2. Open the file using a text editor and comment out the following
Make sure the following 4 entries look like this:
<!-- MEA MDB
<message-driven id=" Mess ageD rive n_JM SCon tQue uePr oces sor_ 1" >
<ejb -nam e>JM SCon tQue uePr oces sor- 1</e jb-n ame >
<ejb -cla ss>p sdi. ifac e.jm s.JM SCon tQue uePr oces sor< /ejb -cla ss >
<tra nsac tion -typ e>Co ntai ner< /tra nsac tion -typ e >
<mes sage -des tina tion -typ e>ja vax. jms. Queu e</m essa ge-d esti nati on-t ype >
<env-entry>
<env -ent ry-n ame> MESS AGEP ROCE SSOR </en v-en try- name >
<env -ent ry-t ype> java .lan g.St ring </env-entry-type>
<env -ent ry-v alue >psd i.if ace. jms. Queu eToM axim oPro cess or</ env- entr y-va lue >
</env-entry>
</message-driven>
-->
<!-- MEA MDB for error queue
<message-driven id=" Mess ageD rive n_JM SCon tQue uePr oces sor_ 2" >
<ejb -nam e>JM SCon tQue uePr oces sor- 2</e jb-n ame >
<ejb -cla ss>p sdi. ifac e.jm s.JM SCon tQue uePr oces sor< /ejb -cla ss >
<tra nsac tion -typ e>Co ntai ner< /tra nsac tion -typ e >
<mes sage -des tina tion -typ e>ja vax. jms. Queu e</m essa ge-d esti nati on-t ype >
<env-entry>
<env -ent ry-n ame> MESS AGEP ROCE SSOR </en v-en try- name >
<env -ent ry-t ype> java .lan g.St ring </env-entry-type>
<env -ent ry-v alue >psd i.if ace. jms. Queu eToM axim oPro cess or</ env- entr y-va lue >
</env-entry>
<env-entry>
<env -ent ry-n ame> MDBD ELAY </en v-en try- name >
<env -ent ry-t ype> java .lan g.Lo ng </env-entry-type>
<env -ent ry-v alue >300 00</ env- entr y-va lue >
</env-entry>
</message-driven>
-->
<!-- MEA MDB
<con tain er-t rans acti on >
<method>
< ejb- name >JMS Cont Queu ePro cess or-1 </ej b-na me >
< meth od-n ame> *</m etho d-na me >
</method>
<tra ns-a ttri bute >Req uire d</t rans -att ribu te >
</co ntai ner- tran sact ion >
-->
<!-- MEA MDB for error queue
<con tain er-t rans acti on >
<method>
< ejb- name >JMS Cont Queu ePro cess or-2 </ej b-na me >
< meth od-n ame> *</m etho d-na me >
</method>
<tra ns-a ttri bute >Req uire d</t rans -att ribu te >
</co ntai ner- tran sact ion >
-->
3. Save the close the file.
4. Locate the maxi mo/a ppli cati ons/ maxi mo/p rope rtie s/ma ximo .pro pert ies file and change the mxe.name property to a name that represents that this is the ear file for the UI cluster, i.e. MXServerUI.
5. Add the line mxe. cron task .don otru n if it is does not already exist in the properties file
so that no crontasks except for the JMSQ SEQC ONSU MER. SEQQ OUT crontask will run on this server:
e.g.
mxe. cron task .don otru n=JM SQSE QCON SUME R.SE QQIN ,IFA CETA BLEC ONSU MER. IFAC EIN, BBcr on.B BCRO N1,. .... .
Since we want all crontasks to run in the IF instance, all crontasks will be listed here except for the JMSQ SEQC ONSU MER. SEQQ OUT. This crontask will need to run in the cluster.
Crontasks are cluster aware as long as they are specified where to run using the maximo.properties. If using the Target Enable feature to force the IF crontasks to run in specific servers, they are not cluster aware and no failover will occur if the server running a specific IF crontask fails.
Be sure to go through your list of crontasks and note each instance in the correct case and add it to the mxe. cron task .don otru n parameter in the maximo.properties file, each separated by a comma.
6. Save and close the file.
7. Build the maximo.ear
8. Deploy this maximo.ear to the cluster (refer to the system administrator's guide for deployment information)
9. Restart the cluster
Web services:
When deploying web services, you will need to set up the web service administration URL and port to point to the MAXIMOIF 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 MAXIMOIF application server IP address and port, not the cluster address for the UI instances.
This is to prevent any inbound transaction processing from web service invocation from taking place on the UI cluster. 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.
The Integration Global Directory:
When you deploy a web service, all wsdl and schema files are written with the service you have just deployed. These file will be written to the Integration Global Directory. If WebLogic 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 shared location can be either a mapped drive or UNC share (Windows), or a mount point (Unix). The user specified to run the WebLogic services must have access to read and write to this share or mount point. This includes the node manager if in use. In Windows, do not use a local system account 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.
Important note:
Importing data can only be performed while logged into the IF instance where the Message Driven Bean is deployed. Exporting data can only be performed while logged into one of the UI cluster members.
If you need to be able to perform outbound transactions for any reason from the IF instance such as due to recurrence or crontasks that update data causing events to be fired, you will need to add another jms server to the MAXIMOIF application server, and create another queue with the same jndi name jms/ maxi mo/i nt/q ueue s/sq out as exists in the first jms uijmsmodule in the ifjmsmodule.
This configuration will require that you duplicate the JMSQ SEQC ONSU MER. SEQQ OUT crontask instance so you will have two instances running for the same queue jndi name.
The first instance will need to be forced to run in the UI cluster and the second forced to run in the IF instance.
This is accomplished using the donotrun property.
These instructions work with both WebLogic v9 and v10.
Reference :
https://www.ibm.com/developerworks/community/blogs/a9ba1efe-b731-4317-9724-a181d6155e3a/entry/setting_up_maximo_7_x_in_a_weblogic_v9_cluster_using_jms_queues_for_integration?lang=en
No comments:
Post a Comment