Sunday, April 04, 2010

AIA 2.4/2.5: Foundation Pack Quick Cluster Install

Installing AIA in a clustered environment is not a 'walk in the park'. Many documents exists from Oracle that describes various approaches to install AIA on a cluster. This article is written to have a simple straight forward installation and configuration.

Pre-requisites:

The AIA cluster installation is executed in 5 steps:
  • Step 1: Ensure that the SOA cluster is setup correctly
  • Step 2: AIA Software only install
  • Step 3: AIA Deployment and configuration preparation
  • Step 4: AIA Deployment and configuration execution
  • Step 5: AIA post configuration

Step 1: Ensure that the SOA cluster is setup correctly

The following are basic verification steps to ensure that your SOA cluster is setup correctly.
  • Navigating to the BPEL, ESB consoles successfully using the external Load Balancer URL as well as each of the internal virtual host.
  • Ensuring that the EM console shows all participating nodes in active state. There must be only one Active Design time. 
  • Ensure that ESB Design-time is completely up and running by accessing the following URL:
  • http://node1.vijfhuizen.com:7777/esb/dtStatus.jsp
  • http://node2.vijfhuizen.com:7777/esb/dtStatus.jsp 
  • These pages should return a true. Test this via both nodes. 
  • Deploying a sample BPEL process and a sample ESB process. And verify via the consoles on each node that the deployments exists. 
  • Change the state of the BPEL process on one node, e.x. Set state to retired. Verify on the other console that the state has been changed. 
  • Undeploy the BPEL process from this node. Verify on the other console that the BPEL process does not exists anymore.
Step 2: AIA Software only install
Install on both nodes the AIA Software only! Just run the AIA installer ant install the software only! It is recommened to install the software in a different  directory as the Oracle SOA 10g software, for example:
  • ORACLE_HOME: /app/oracle/products/10g/soa
  • AIA_HOME: /app/oracle/products/10g/aia
Step 3: AIA Deployment and configuration preparation

Add for each node the following java option, make sure all servers are down (opmnctl shutdown). Add the java option in the 'oc4j_soa' container.

vi $ORACLE_HOME/opmn/conf/opmn.xml
...
-Daia.home=/fs01/app/oracle/esbacc01/aia
...

Make sure indexing is enabled on th both Apache HTTP servers, apply this setting twice.

vi $ORACLE_HOME/Apache/Apache/conf/httpd.conf
...
<Directory />
Options FollowSymLinks MultiViews Indexes
...
<Directory "/app/app/oracle/product/10g//soa/Apache/Apache/htdocs">
Options FollowSymLinks MultiViews Indexes
...

Check the AIA configuration. With the AIA software only install, not all settings are correct:
vi $AIA_HOME/bin/aiaenv.sh
...
AIA_HOME=aia.home
ORACLE_HOME=oracle.home
AIA_INSTANCE=aiaapp.deploy.home
PLATFORM=platform
into
AIA_HOME=/app/oracle/product/oracle/10g/aia
ORACLE_HOME=/app/oracle/product/oracle/10g/soa
JAVA_HOME=$ORACLE_HOME/jdk
AIA_INSTANCE=/app/oracle/product/oracle/10g/soa/j2ee/oc4j_soa/applications
PLATFORM=ias_10g

Execute a chmod 775 on the ANT_HOME/bin/* oon beide nodes, to make the files executable.

chmod 755 $AIA_HOME/bin/*

Execute the following script on both nodes to enable the new settings.

source aiaenv.sh

Add heartbeat parameters to teh ESB config directory at the end of the file on both nodes:

vi $ORACLE_HOME/integration/esb/config/esb_config.ini
...
PingInterval=30
PingCount=30

Restart both nodes, first node1 then node2.

$ORACLE_HOME/opmn/bin/opmnctl shutdown
$ORACLE_HOME/opmn/bin/opmnctl startup

Now we need to prepare the deployment properties of AIA. This is done on both nodes.

cp $AIA_HOME/config/deploy.properties $AIA_HOME/config/deploy.properties.org
cp $AIA_HOME/Infrastructure/install/templates/deploy.properties.tmpl $AIA_HOME/config/deploy.properties

Open this deploy.properties file, on each node, to check parameters. Make sure the hostnames are correct for each node (j2ee.hostname, iasinstancename):

vi $AIA_HOME/config/deploy.properties
FPVersion=2.5.0.0.0
aia.home=/fs01/app/oracle/esbacc01/aia
oracle.home=/fs01/app/oracle/esbacc01/soa
http.hostname=node1.vijfhuizen.com
j2ee.hostname=node1.vijfhuizen.com
http.port=80
admin.user=oc4jadmin
iasinstancename=AS.vijfhuizen.com
oc4jinstancename=oc4j_soa
opmn.port=6003
rmi.port=12401
db.hostname=node1.vijfhuizen.com
db.port=1521
dbuser=sys
SID=esbacr011
#admin.password.encrypted=
admin.password=welcome1
#dbpwd.encrypted=
dbpwd=esbacr01

Check on both nodes the paramterea of BPEL. Note, that we set the option cluster to false! And the hostnames are different:

vi $ORACLE_HOME/bpel/utilities/ant-orabpel.properties
...
platform = ias_10g
hostname = node1.vijfhuizen.nl
http.hostname = ${hostname}
http.port = 80
cluster = false
oc4jinstancename = oc4j_soa
j2ee.hostname = node1.vijfhuizen.nl
asinstancename =

Before we can start with the the AIA configuration, we need to make a jms error topic. Otherwise the ant script for creating the FPErrorHandlingInstall will fail.
  • Login to EM
  • Click on soa_group link
  • Click on Administration
  • Click on JMS Destinations
  • Click on Create New
  • Destination Type: Topic
  • Desination Name: ESB_ERROR
  • In memory: checked
  • JNDI Location: jms/topic/ESB_ERROR
  • Click on OK

Step 4: AIA Deployment and configuration execution
Now we are able to start in configuration of AIA into Oracle SOA Suite 10g. The approach is as follows. FIrst we do some manual install scripts on node #2 (while node #1 is down!). Then we do a full install on node #1, while node#2 is down. After this we can bring up #2.

Stop node #1


$ORACLE_HOME/opmn/bin/opmnctl shutdown

Check if node #2 is up and running (oc4j_soa, HTTP, esbdt)

$ORACLE_HOME/opmn/bin/opmnctl status

Start the first scripts:

cd $AIA_HOME/Infrastructure/install/scripts/
ant --noconfig -buildfile FPCommonConfig.xml replaceFPInstallProperties

Buildfile: FPCommonConfig.xml

...log information...

BUILD SUCCESSFUL

ant --noconfig -buildfile FPConfiguration.xml CommonConfigurations

Buildfile: FPConfiguration.xml

...log information...
BUILD SUCCESSFUL
The first step is done of AIA. Just for checking, you should be able to view the AIA compontens:

http://loadbalancer.vijfhuizen.com:7777/AIAComponents/

The out-of-the-box URI is incorrect when is is executing a deployment. Change the URI as well the password!

vi $AIA_HOME/Infrastructure/install/scripts/FPInstall.properties
...
#deployer.uri=deployer:oc4j:opmn://node1.vijfhuizen.nl:6003/oc4j_soa
deployer.uri=deployer:cluster:opmn://node1.vijfhuizen.nl:6003/soa_group
oc4j.admin.user = oc4jadmin
oc4j.admin.password = welcome1
...

Execute the next AIA scripts.
 
ant --noconfig -buildfile FPCommonConfig.xml CreateCommonDatasources
Buildfile: FPCommonConfig.xml
 
CreateCommonDatasources:
 
...log information... 
 
BUILD SUCCESSFUL
 
ant --noconfig -buildfile FPCAVSInstall.xml createSchedulerDataSource

Buildfile: FPCAVSInstall.xml
createSchedulerDataSource:
 
...log information... 
 
BUILD SUCCESSFUL
ant --noconfig -buildfile FPErrorHandlingInstall.xml DeployESBErrorListenerMDB

Buildfile: FPErrorHandlingInstall.xml

DeployESBErrorListenerMDB:

...log information...
BUILD SUCCESSFUL

ant --noconfig -buildfile FPCAVSInstall.xml DeployAIAUI

Buildfile: FPCAVSInstall.xml

...log information... 

BUILD SUCCESSFUL

Check that the AIA data-sources are created in the oc4j_soa container of node #2.

vi $ORACLE_HOME/j2ee/oc4j_soa/config/data-sources.xml
...
<managed-data-source connection-pool-name="JMSConnectionPool" 
jndi-name="jdbc/AIA_JMS_DS" name="AIA_JMS_DS" tx-level="local"/>
<managed-data-source connection-pool-name="AIAXAConnectionPool" 
jndi-name="jdbc/xref" name="XREFDataSource"/>
<managed-data-source connection-pool-name="AIAConnectionPool" 
jndi-name="scheduler/OracleManagedDS" name="SchedulerOracleManagedDS"/>
<connection-pool name="Example Connection Pool">
...

Shutdown node #2!

$ORACLE_HOME/opmn/bin/opmnctl shutdown

Startup node #1!

$ORACLE_HOME/opmn/bin/opmnctl startall

Now we can execute a full install of AIA on the first node. This step can take a while. Verify that the deployment properties is correct in $AIA_HOME/config. A follow the log file that is created. It it fails you can re-run this step.

Note: I had an issue on a project when we used a Oracle RAC database. DUe to sime unknown reasons, we had to restart the database, because the script could not make user. It was 'hanging'. It tries to create two user schema's:
create user aia identified by aia;
grant connect,resource to aia;
grant CREATE VIEW to aia;
grant aq_administrator_role to aia;
grant execute on dbms_aqadm to aia;
grant execute on dbms_aq to aia;
grant execute on dbms_aqin to aia;
grant execute on dbms_aqjms to aia;

create user jmsuser identified by jmsuser;
GRANT connect,resource,AQ_ADMINISTRATOR_ROLE TO jmsuser IDENTIFIED BY jmsuser;
GRANT execute ON sys.dbms_aqadm TO jmsuser;
GRANT execute ON sys.dbms_aq TO jmsuser;
GRANT execute ON sys.dbms_aqin TO jmsuser;
GRANT execute ON sys.dbms_aqjms TO jmsuser;


cd $AIA_HOME/Infrastructure/install/scripts
ant --noconfig -buildfile FPInstall.xml

Buildfile: FPInstall.xml

...log information...
BUILD SUCCESSFUL

Check that the AIA data-sources are created in the oc4j_soa container of node #1.

vi $ORACLE_HOME/j2ee/oc4j_soa/config/data-sources.xml
...
<managed-data-source connection-pool-name="JMSConnectionPool" 
jndi-name="jdbc/AIA_JMS_DS" name="AIA_JMS_DS" tx-level="local"/>
<managed-data-source connection-pool-name="AIAXAConnectionPool" 
jndi-name="jdbc/xref" name="XREFDataSource"/>
<managed-data-source connection-pool-name="AIAConnectionPool" 
jndi-name="scheduler/OracleManagedDS" name="SchedulerOracleManagedDS"/>
<connection-pool name="Example Connection Pool">
...

Startup node #2.

$ORACLE_HOME/opmn/bin/opmnctl startall


Step 5: AIA post configuration
Now we have almost finished the AIA cluster setup, we need to make a few post configuration steps.

Go to node #2, and install the taskform application.
cd $AIA_HOME/Infrastructure/ErrorHandling/AIAErrorTaskAdministrationProcess
ant --noconfig deployTaskForm

Buildfile: build.xml

deployTaskForm:

... log info...

BUILD SUCCESSFULL

On node #1 and #2, add durable subscriber for the JMS topic

cd $AIA_HOME/Infrastructure/ErrorHandling/AIAReadJMSNotificationProcess/bpel
vi consumeFaultMsg.wsdl
...
<jca:operation ActivationSpec="oracle.tip.adapter.jms.inbound.JmsConsumeActivationSpec"
 DestinationName="java:comp/resource/AIA_ERROR_JMS/Topics/AIA.AIA_ERROR_TOPIC"
 DurableSubscriber="AIAReadJMSNotificationAgent"
 UseMessageListener="false"
 MessageSelector="JMSCorrelationID LIKE '%AIA_EH_DEFAULT%'"
 PayloadType="TextMessage" OpaqueSchema="false">
</jca:operation>

Add cluster-id to the Error notification agent. This makes that only one JMS service will dequeue a message, and not both nodes.

cd $AIA_HOME/Infrastructure/ErrorHandling/AIAReadJMSNotificationProcess/bpel
vi bpel.xml
...
<activationAgent className="oracle.tip.adapter.fw.agent.jca.JCAActivationAgent" partnerLink="consumeFaultMsg">
<property name="portType">Consume_Message_ptt</property>
<property name="clusterGroupId">AIAClusterERRORJMS</property>
</activationAgent>
...

Verify that the ESB systems points to the correct cluster-id and load balancer. Check the flowwing ESB systems
  • DefaultSystem
  • AIASystem
  • BPELSystem

Each system should have the following values:
  • Cluster Name: esb
  • Virtual Host: loadbalancer.vijfhuizen.com
  • Port: 80
  • Topic Location: ESBTopics/Topics/ESB_JAVA_DEFERRED
  • Connection Factory Location: OracleOJMS/XATCF
The Oracle SOA Suite 10g is now clustered and configured for AIA Foundation Pack.

I would thank Michel Schildmeijer for giving feedback and recommendations for this article.

Done
QED

Post a Comment