Here is my experiences with installing SOA Suite 11.1.1.7 on Red Hat 6 (64-bit) using Java 7.
First have a look at the documentation:
Oracle Fusion Middleware Download, Installation, and Configuration ReadMe (11.1.1.7.0)
Oracle Fusion Middleware Installation Planning Guide (11.1.1.7.0)
Oracle Fusion Middleware Installation Guide for Oracle SOA Suite and Oracle BPM Suite (11.1.1.7.0)
Overview
- Download the software
- Prepare the OS
- Install Java
- Install the latest Java SE CPU patch
- Install the WebLogic Server 10.3.6
- Install the latest WebLogic Server PSU patch
- Install the SOA Suite
- Patch the SOA Suite
- Create database schemas via the RCU
- Configure the SOA Suite
- Homes overview
- Starting the servers
- Java parameters
- debugFlag
- Configuring the Node Manager
- Configure automatic start of the servers
- Java 7
- AQ errors
- Miscellaneous
- Securing your installation
- Configure OCM
Download the software
- JDK 7 64-bit latests update
- WebLogic 10.3.6
- WebLogic 10.3.6 April 2013 PSU 10.3.6.0.4 (Patch 16083651)
- SOA Suite 11.1.1.7 Disk 1
- SOA Suite 11.1.1.7 Disk 2
- Repository Creation Utility 11.1.1.7.0 (RCU)
Please notice
- Before using the direkt download links to http://download.oracle.com you need to login in to the site and accept a License Agreement. It does not matter which product you choose.
Prepare the OS
I am using Red Hat 6 64-bit. Check the “System Requirements for UNIX Operating Systems”.
Also check “Special Startup Requirements for Linux x86 or Linux x86-64 Operating Systems” in the same document.
This should install the needed packages:
yum install binutils-2*.x86_64 -y yum install compat-libcap1-1* -y yum install compat-libstdc++-33*.i686 -y yum install compat-libstdc++-33*.x86_64 -y yum install gcc-4*.x86_64 -y yum install gcc-c++-4*.x86_64 -y yum install glibc-2*.x86_64 -y yum install glibc-2*.i686 -y yum install glibc-devel-2*.i686 -y yum install libaio-0.*.x86_64 -y yum install libaio-devel-0.*.x86_64 -y yum install libgcc-4.*.x86_64 -y yum install libstdc++-4.*.i686 -y yum install libstdc++-4.*.x86_64 -y yum install libstdc++-devel-4.*.x86_64 -y yum install libXext.i686 -y yum install libXtst.i686 -y yum install sysstat-9.*.x86_64 -y yum install redhat-lsb-4.*.x86_64 -y
Change the open file limits in /etc/security/limits.conf
sed -i '/.*End of file/d' /etc/security/limits.conf echo "* soft nofile 16384" >> /etc/security/limits.conf echo "* hard nofile 16384" >> /etc/security/limits.conf echo "# End of file" >> /etc/security/limits.conf cat /etc/security/limits.conf
Change the kernel parameters that need changing. Often the default values are OK.
Normally I only change/add these two and this is really only needed if you use Coherence.
echo "net.core.rmem_max=4192608" >> /etc/sysctl.conf echo "net.core.wmem_max=4192608" >> /etc/sysctl.conf /sbin/sysctl -p
Create user, group and directories.
groupadd oinstall useradd -g oinstall -G oinstall oracle passwd oracle mkdir -p /u01/app/oracle/product mkdir -p /u01/tmp chown -R oracle:oinstall /u01 chmod -R 750 /u01
Set the umask for the oracle user. If you don’t want to set it in the .bash_profile at least set it manually when installing the software as suggested by Oracle.
su - oracle echo "umask 027" >> .bash_profile cat .bash_profile
Enabling Unicode Support in the .bash_profile for the oracle user.
su - oracle echo "export LANG=\"en_US.UTF-8\"" >> .bash_profile cat .bash_profile
Install Java
Unzip and untar the downloaded file:
gunzip jdk-7u25-linux-x64.tar.gz tar xvf jdk-7u25-linux-x64.tar mv jdk1.7.0_25 /u01/app/oracle/product/.
After I install Java I always create a softlink to the installation directory and reference it everywhere. This makes it is easier later when you have to upgrade.
ln -s /u01/app/oracle/product/jdk1.7.0_25 /u01/app/oracle/product/java_current
Install the latest Java SE CPU patch
Check the Java SE Critical Patch Update (CPU) to see if you need to patch the Java you have installed.
The latest Java SE CPU is from June 2013. It patches update 21 and earlier. I use update 25 so there is no need to patch it.
Until now the Java SE CPU has had its own release schedule but from October it will follow the same schedule as the other Oracle products.
Install the WebLogic Server 10.3.6
Take care when downloading the wls1036_generic.jar file since some browsers will rename it to wls1036_generic.zip.
I use Xming as X Server on Windows. “Xming” currently has a problem with Java 7. When you start the Oracle installer most things work, but under certain conditions you cannot make selections via mouse or keyboard. This stumped me a bit until Simon Haslam pointed out what was going on. Xming is based on Cygwin that currently has a bug. As Simon points out a workaround is to not set -multiwindow on. This works but is not a good solution since you sometime get a mashup of screens.
To get around the problem I temporary install Java 6 and use it during the installation.
/u01/app/oracle/product/java_current/bin/java -Djava.io.tmpdir=/u01/tmp -jar wls1036_generic.jar -log=wls_install.log
-Djava.io.tmpdir is only needed if there is not enough tmp space.
Below I have ignored the screens where you can sign up for security updates etc.
Here my Java soft link is “ignored” so we have to fix this later.
The Java soft link was “ignored” so we have to fix this:
cd /u01/app/oracle/product/soa grep -R jdk1.6.0_39 * find . -type f -exec sed -i "s/\/u01\/app\/oracle\/product\/jdk1.6.0_39/\/u01\ /app\/oracle\/product\/java_current/g" {} \;
Install the latest WebLogic Server PSU patch
Oracle releases quarterly security updates. You can read more about CPU, SPU, PSU and BP patches here.
WebLogic 10.3.6 April 2013 PSU 10.3.6.0.4 patch 16083651 (p16083651_1036_Generic.zip)
Make sure all WebLogic servers are stopped and remove any previously applied Patch Set Update and associated overlay patches.
mkdir /u01/app/oracle/product/soa/utils/bsu/cache_dir cp D33T.jar /u01/app/oracle/product/soa/utils/bsu/cache_dir/. cp patch-catalog_19345.xml /u01/app/oracle/product/soa/utils/bsu/ cache_dir/patch-catalog.xml ls -la /u01/app/oracle/product/soa/utils/bsu/cache_dir
Make sure that the patch-catalog_19345.xml is renamed to patch-catalog.xml!
cd /u01/app/oracle/product/soa/utils/bsu/ ./bsu.sh -prod_dir=/u01/app/oracle/product/soa/wlserver_10.3 -patchlist=D33T -verbose -install
Verify that the patch is installed.
./bsu.sh -prod_dir=/u01/app/oracle/product/soa/wlserver_10.3 -status=applied -verbose -view
Alternative use.
. /u01/app/oracle/product/soa/wlserver_10.3/server/bin/setWLSEnv.sh java weblogic.version
For example.
[oracle@wintermute ~]$ java weblogic.version WebLogic Server 10.3.6.0.4 PSU Patch for BUG16083651 Thu Mar 28 15:24:29 IST 2013 WebLogic Server 10.3.6.0 Tue Nov 15 08:52:36 PST 2011 1441050
Install the SOA Suite
cd ofm_soa_generic_11.1.1.7.0/Disk1 ./runInstaller -jreLoc /u01/app/oracle/product/java_current/jre
Below I have ignored the screens where you can sign up for security updates etc.
If you press Save you will be prompted for a place to save a response file you can use for silent installation.
If you press Save you will be prompted for a place to store a file with information about the installation.
It contains this.
Install Oracle SOA Suite Directory Details Middleware Home Location: /u01/app/oracle/product/soa Oracle Home Location: /u01/app/oracle/product/soa/Oracle_SOA1 Application Server Type: WebLogic Server Application Server Location: /u01/app/oracle/product/soa Disk Space Oracle Home Size: 1715 MB Available: 166748 MB Applications Oracle BPEL PM, Mediator, Rules, B2B, Human Workflow Oracle Business Activity Monitoring (BAM) Oracle Enterprise Manager
Patch the SOA Suite
To find out if there exists any patches that you should install check “Information Center: Oracle SOA Suite 11g [ID 1369339.2]” on MOS and Known Issues for Oracle SOA Products and Oracle AIA Foundation Pack on OTN.
Also make sure you check for SPU patches for the SOA Suite. Currently there are no SPU and no bundle patches for this release.
When you patch the SOA Suite always remember to download and install the latest OPatch version from MOS.
Create database schemas via the RCU
First have a look at the documentation:
Oracle Fusion Middleware Repository Creation Utility User’s Guide
Also have a look at the RCU MOS FAQ: βOracle Fusion Middleware 11g Repository Creation Utility (RCU) – FAQ [ID 1304790.1]β
Check the database requirements.
SID != Service Name
RCU uses the Service Name when connecting to a database, not the SID. The SID and the Service Name can contain different values.
You can find the Service Name in the database via:
SQL> show parameter service_names NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string xdb.egf
Which schema’s are required?
To figure out which schema’s are required have a look at the documentation.
Tablespaces
You can create tablespaces via the RCU but I prefer to create them myself.
A database will often have a default tablespace called USERS. It often ends up being a mess with all kind of different objects that nobody really knows why are there π
You should create separate tablespaces and use them after the kind of data that goes in them: Object size, growth rate, object type (Tables, LOBs, etc.)
create smallfile tablespace SOA_REPO datafile'/u01/app/oracle/oradata/SOATST/soa_repo01.dbf' size 150m autoextend on next 100m maxsize 1g extent management local autoallocate;
Start the RCU
cd ofm_rcu_linux_11.1.1.7.0_64_disk1_1of1/rcuHome/bin
./rcu
Configure the SOA Suite
Use config.sh to create a domain. If you experience problems you can enable logging to a file. It is possible to set the log level etc.
The CONFIG_JVM_ARGS is set to speed things up if the system is low on entropy.
export CONFIG_JVM_ARGS=”-Djava.security.egd=file:/dev/./urandom”
cd /u01/app/oracle/product/soa/Oracle_SOA1/common/bin
./config.sh
Below I have ignored the screens where you can sign up for security updates etc.
I only need the SOA Suite and the BPM Suite, so no BAM. Do not select products you do not need. “Basic WebLogic SIP Server Domain” is for example not compatible with the SOA Suite.
I like to keep the domains away from the software installation.
In the past I used to not name the default administrator user weblogic on production servers. Just as an extra precaution so you know that you are logging on to a production server. I have never experienced problems with this. But a the UKOUG conference last year I was told by somebody that you can get in trouble with some of the IDM products if there is no weblogic user.
If you do not select any options on this page the configuration wizard will default create an AdminServer and a soa_server1 with an empty listen address and using port 7001 and 8002. The Node Manager uses port 8001. I like to change listen address, ports etc…
You can use the Summary View drop-down menu to inspect different details about the installation.
Homes overview
There are many homes:
- Application Home β /u01/app/oracle/applications/soa
- Domain Home β /u01/app/oracle/domains/soa
- Middleware Home β /u01/app/oracle/product/soa
- Oracle Common Home β /u01/app/oracle/product/soa/oracle_common
- Oracle Home (SOA Suite) β /u01/app/oracle/product/soa/Oracle_SOA1
- WebLogic Server Home β /u01/app/oracle/product/soa/wlserver_10.3
For more information check the Oracle Fusion Middleware Installation Planning Guide.
Starting the servers
Start the Admin Server:
cd /u01/app/oracle/domains/soa ./startWebLogic.sh
Waite till you see:
<Server started in RUNNING mode>
Now you should be able to access the Admin Console: http://wintermute:7001/console
And the Fusion Middleware Control: http://wintermute:7001/em
Start the Managed Server in another terminal:
cd /u01/app/oracle/domains/soa/bin ./startManagedWebLogic.sh soa_server1
Input username and password when prompted.
It takes a while before soa_server1 reaches the Running state and you will also see a some warnings/errors being reported.
When it reaches the Running state check the status for the deployments in the Admin Server Console. The deployments should all have status Active. There will be a few that has status Installed. These are optional modules that default is not target to anything.
For more information about which modules should be targeted where check the appendix “Targeting Applications and Resources to Servers“.
Java parameters
You can set Java memory parameters in several ways. I normally do it by setting USER_MEM_ARGS in DOMAIN_HOME/bin/startWebLogic.sh. For the SOA Suite the setSOADomainEnv.sh in the same directory overwrites USER_MEM_ARGS so for SOA Suite I use setSOADomainEnv.sh and PORT_MEM_ARGS.
Development Mode
# ************************************************************************* # lorenzen Begin # ************************************************************************* if [ "${SERVER_NAME}" = "" ] ; then SERVER_NAME="AdminServer" export SERVER_NAME fi if [ "${SERVER_NAME}" = "AdminServer" ] ; then PORT_MEM_ARGS="-Xms256m -Xmx768m -XX:MaxPermSize=350m -Djava.security.egd=file:/dev/./urandom" elif [ "${SERVER_NAME}" = "soa_server1" ] ; then PORT_MEM_ARGS="-Xms768m -Xmx1536m -XX:MaxPermSize=768m -Djava.security.egd=file:/dev/./urandom" fi # ************************************************************************* # lorenzen End # *************************************************************************
Production Mode
# ************************************************************************* # lorenzen Begin # ************************************************************************* if [ "${SERVER_NAME}" = "" ] ; then SERVER_NAME="AdminServer" export SERVER_NAME fi if [ "${SERVER_NAME}" = "AdminServer" ] ; then PORT_MEM_ARGS="-Xms256m -Xmx768m -XX:MaxPermSize=350m" elif [ "${SERVER_NAME}" = "soa_server1" ] ; then PORT_MEM_ARGS="-Xms1536m -Xmx1536m -XX:MaxPermSize=768m" fi # ************************************************************************* # lorenzen End # *************************************************************************
You also need to comment this out, otherwise the Perm parameters will be set twice.
#if [ "${JAVA_VENDOR}" != "Oracle" ] ; then # DEFAULT_MEM_ARGS="${DEFAULT_MEM_ARGS} -XX:PermSize=127m -XX:MaxPermSize=768m" # PORT_MEM_ARGS="${PORT_MEM_ARGS} -XX:PermSize=255m -XX:MaxPermSize=768m" #fi
In Development Mode I have added a parameter to take care of any entropy problems.
In Production Mode -Xms and -Xmx should always contain the same value for Managed Servers.
By the way if you are messing around with different Java installations etc. this is a good blog post.
debugFlag
If you are not running in Production Mode I always set debugFlag to false.
If you do not do this you can get errors like the below, because several servers are trying to use the same port:
ERROR: transport error 202: bind failed: Address already in use ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized
So add this:
debugFlag="false"
This should do it:
sed -i 's/debugFlag="true"/debugFlag="false"/g' setDomainEnv.sh
If your developers need the debug ports, make sure each server uses unique ports.
Configuring the Node Manager
I always use the Node Manager (NM) to start and stop WebLogic servers.
1. Set NM user name and password
Use the Admin Console and navigate to the domain. Select Security and then Advanced. Set “NodeManager Username” and “NodeManager Password”:
2. Set the NM type to plain
The NM default uses SSL. I normally do not use SSL for the NM and if you do you should use valid SSL certificates not the default demo certificates.
Navigate to Environment => Machines => machine_1 => Node Manager.
Change Type to Plain.
3. Stop the Admin Server and the Managed Server
Stop them via the Admin Console or just ctrl+c in the two terminals.
4. Start the NM
cd /u01/app/oracle/product/soa/wlserver_10.3/server/bin ./startNodeManager.sh
When you see:
INFO: Secure socket listener started on port 5556
Stop NM again with ctrl+c. The NM has now create it’s setup files and we need to make a couple of changes in nodemanager.properties in:
/u01/app/oracle/product/soa/wlserver_10.3/common/nodemanager
Change these lines:
javaHome=/u01/app/oracle/product/java_current JavaHome=/u01/app/oracle/product/java_current/jre ListenAddress=localhost SecureListener=false CrashRecoveryEnabled=true StartScriptEnabled=true
This should do it.
sed -i 's/javaHome=.*/javaHome=\/u01\/app\/oracle\/product\/java_current/g' nodemanager.properties sed -i 's/JavaHome=.*/javaHome=\/u01\/app\/oracle\/product\/java_current\/jre/g' nodemanager.properties sed -i 's/ListenAddress=/ListenAddress=localhost/g' nodemanager.properties sed -i 's/SecureListener=true/SecureListener=false/g' nodemanager.properties sed -i 's/CrashRecoveryEnabled=false/CrashRecoveryEnabled=true/g' nodemanager.properties sed -i 's/StartScriptEnabled=false/StartScriptEnabled=true/g' nodemanager.properties
Start the NM again. Wait until you see:
INFO: Plain socket listener started on port 5556
5. Start the Admin Server
In another terminal start the Admin Server:
. /u01/app/oracle/product/soa/wlserver_10.3/server/bin/setWLSEnv.sh java weblogic.WLST nmConnect(username='nodemgr', password='manager2', domainName='soa', domainDir='/u01/app/oracle/domains/soa', nmType='plain') nmStart('AdminServer')
6. Start the Managed Server
When the Admin Server is Running start the Managed Server via the Admin Console.
Notice that things are a bit different if you use Production Mode.
Configure automatic start of the servers
Now everything is running but of cause the NM should not be started manually but automatically when the server boots.
Here is a very simple boot script:
/etc/init.d/soaNodeManager
cd /etc/init.d chmod 755 soaNodeManager chkconfig --add soaNodeManager chkconfig --list soaNodeManager ./soaNodeManager start
Java 7
Because of the mentioned problem with Xming I have used Java 6 during the installation.
Before switching to Java 7 you should read “Using WebLogic Server with JDK 7“.
mkdir /u01/app/oracle/product/jdk1.7.0_25/jre/lib/endorsed cd /u01/app/oracle/product/soa/modules cp javax.annotation_* /u01/app/oracle/product/jdk1.7.0_25/jre/lib/endorsed cp javax.xml.bind_* /u01/app/oracle/product/jdk1.7.0_25/jre/lib/endorsed cp javax.xml.ws_* /u01/app/oracle/product/jdk1.7.0_25/jre/lib/endorsed ls /u01/app/oracle/product/jdk1.7.0_25/jre/lib/endorsed
The java_current soft link still points to Java 6 so we should change this:
rm -f /u01/app/oracle/product/java_current ln -s /u01/app/oracle/product/jdk1.7.0_25 /u01/app/oracle/product/java_current ls -l /u01/app/oracle/product/java_current
AQ errors
When you start the WebLogic server you might encounter errors like these in the log files.
<Jul 13, 2013 12:29:35 PM CEST> <Warning> <oracle.integration.platform.blocks.event.saq> <SOA-31013> <Error handling message (rolling back). java.sql.SQLException: ORA-25226: dequeue failed, queue DEV_SOAINFRA.EDN_OAOO_QUEUE is not enabled for dequeue ORA-06512: at "SYS.DBMS_AQ", line 335 ORA-06512: at "DEV_SOAINFRA.EDN_DEQUEUE_OAOO_DELIVERY", line 14 ... >
<Jul 13, 2013 12:29:10 PM CEST> <Error> <oracle.soa.b2b.transport> <BEA-000000> <AQDequeuer_ReadMessage: A database exception occurred: java.sql.SQLException: ORA-25226: dequeue failed, queue DEV_SOAINFRA.IP_OUT_QUEUE is not enabled for dequeue>
There are more than 20 AQ queues in the schemas the RCU has created. Have a look.
set pagesize 1000 set linesize 1000 select owner, name, enqueue_enabled, dequeue_enabled from dba_queues where owner like 'DEV%' order by owner, name;
For these initial errors errors to go away you only need to enable enqueue/dequeue on 3 of them.
exec dbms_aqadm.start_queue(queue_name => 'DEV_SOAINFRA.EDN_OAOO_QUEUE',enqueue=>true,dequeue=>true); exec dbms_aqadm.start_queue(queue_name => 'DEV_SOAINFRA.IP_OUT_QUEUE',enqueue=>true,dequeue=>true); exec dbms_aqadm.start_queue(queue_name => 'DEV_SOAINFRA.IP_IN_QUEUE',enqueue=>true,dequeue=>true);
Miscellaneous
You should audit the Logging settings for the domain and the servers to make sure log rotation is configured.
Notice that .out log files cannot be rotated by WebLogic. The are only rotated when the servers are restarted.
On Windows this is a problem on Linux not so much π
But make sure you developers know that:
System.out.println("This is forbidden! Use Java Logging or Log4j");
You should configure “Configuration Archiving” for the domain. Domain => Configuration => General => Advanced. Set “Configuration Archive Enabled” and “Archive Configuration Count”.
When you change the configuration the old configuration files will automatically be save so you can revert to an old version if you get in trouble.
Securing your installation
Have a look at Oracle Fusion Middleware Securing a Production Environment for Oracle WebLogic Server 11g
It is of cause only the top of the iceberg but is a start.
Configure OCM
If your servers has access to the Internet OCM will automatically download the latest version. If not you should download it yourself and install it manually.
. /u01/app/oracle/domains/soa/bin/setDomainEnv.sh export ORACLE_HOME=/u01/app/oracle/product/soa/utils export JAVA_HOME=/u01/app/oracle/product/java_current cd $ORACLE_HOME/ccr/bin ./setupCCR -s 12345678 nobody@cgi.com DK
Verify that it is working:
cd $ORACLE_HOME/ccr/bin ./emCCR start ./emCCR status ./emCCR -register test ./emCCR -verbose test ./emCCR register ./emCCR collect ./emCCR upload ./emCCR disable_target
Feedback
If you feel that I am missing something or find mistakes please tell me. I always want to learn!
{ 7 comments… read them below or add one }
Peter,
Thanks for the nice article..I see you have set two linux kernel parameters(net.core.rmem_max and net.core.wmem_max)..I am not seeing them in the installation guide..Did oracle recommended them?
Thanks/Chandra
Hi Chandra,
That is a very good question and it took me a while to remember why π
It is only when you use Coherence you need to set thous. See https://theheat.dk/blog/?p=1140#warnings and The Error “java.net.SocketException: No Buffer Space Available” is Reported when Starting Coherence (Doc ID 1150113.1).
I will write a comment in the post about this. Thanks
Regards Peter
Very nice blog. Very explanatory and covered many critical topics which we usually forget to do. thank you for your great effort.
thanks.
I was searching for an article into soa installation and ended up here. You done a great job by explaining each and every step clearly. Thanks for the information Peter. About to install SOA on Oracle Linux 6.4 version in VMware. Will post comments if i miss anything. Once again thanks dude.
Hi Team,
Thank you for your great article.
i have small doubet.
My database team moved the oracle database from one unix to onther unix box.
how can i reconfigure SOA servers to access the database in new unix box?
Is changing the datasource is enough or do i have to configure all this thing like configuring RCU?
Thanks In advance.
Yes all you need to do is to change the connection pool in the data sources.
Regards Peter
Its really useful for my work, ty for the article