Darwin IT

Subscribe to Darwin IT feed
Darwin-IT professionals do ICT-projects based on a broad range of Oracle products and technologies. We write about our experiences and share our thoughts and tips.Martien van den Akkerhttps://plus.google.com/110503432901891966671noreply@blogger.comBlogger345125
Updated: 59 min 2 sec ago

Install Oracle Real-Time Integration Business Insight

Fri, 2016-04-01 08:50
Yes, Oracle FMW Integration Insight is available, as I wrote in an earlier post. You can download it here.
But of course we're very curious on how to install it. Do I have to unzip it into my FMW_HOME? Is there a nice Oracle Installer that I can run silently? No, none of that: it comes as a set of OPatch patches on SOASuite 12.2.1:
  1. p22189824_122100_Generic.zip: OPatch containing Oracle Real-Time Integration Business Insight 12.2.1.0.0
  2. p22655174_122100_Generic.zip: OPatch containing updates to SOA and BAM 12.2.1.0.0 
  3. p22659236_122100_Generic.zip: OPatch containing updates to Service Bus 12.2.1.0.0
Following the README.txt in the zip the correct order is to first install ORIBI and then patch SOA&BPM and then SB.


Earlier I wrote about installing BPM QuickStart under Linux. Based on that I created a script to install SOASuite. Maybe I should write about that in another post. I haven't tried if it's possible to install this in a SOA or BPM Quickstart, but I did it in a full FMW installation, that I built using my scripts. So this installation I scripted following the scripting-work I've done earlier


For this setup I have 2 folders:
  • scripts: with the scripts.
  • ofm_integration_insight_1221: with the downloaded ofm_integration_insight_12.2.1.0.0_disk1_1of1.zip
The scripts folder contains two scripts:
fmw12c_env.sh:
#!/bin/bash
echo set Fusion MiddleWare 12cR2 environment
export JAVA_HOME=/usr/java/jdk1.8.0_74
export FMW_HOME=/u01/app/oracle/FMW12210
export SOA_HOME=$FMW_HOME/soa
export OSB_HOME=$FMW_HOME/osb
export MFT_HOME=$FMW_HOME/mft

This provides the settings to the FMW_HOME and the JAVA_HOME. And the product homes I needed for my SOABPM Suite installation (I definately should write that down!).

The actual install script is installOII.sh:
#!/bin/bash
. $PWD/fmw12c_env.sh
#
export CD=$PWD
export OII_INSTALL_HOME=$CD/../ofm_integration_insight_1221
export OII_INSTALL_ZIP=ofm_integration_insight_12.2.1.0.0_disk1_1of1.zip
export OPATCH_SOABPM_ZIP=p22655174_122100_Generic.zip #OPatch containing updates to SOA and BAM 12.2.1.0.0
export OPATCH_SOABPM_NR=22655174
export OPATCH_OSB_ZIP=p22659236_122100_Generic.zip #OPatch containing updates to Service Bus 12.2.1.0.0
export OPATCH_OSB_NR=22659236
export OPATCH_OII_ZIP=p22189824_122100_Generic.zip #OPatch containing Oracle Real-Time Integration Business Insight 12.2.1.0.0
export OPATCH_OII_NR=22189824
export PATCHES_HOME=$FMW_HOME/OPatch/patches
export ORACLE_HOME=$FMW_HOME
# Unzip OII Install zip
if [ ! -f "$OII_INSTALL_HOME/$OPATCH_OII_ZIP" ]; then
if [ -f "$OII_INSTALL_HOME/$OII_INSTALL_ZIP" ]; then
echo Unzip $OII_INSTALL_HOME/$OII_INSTALL_ZIP to $OII_INSTALL_HOME
unzip $OII_INSTALL_HOME/$OII_INSTALL_ZIP -d $OII_INSTALL_HOME
else
echo $OII_INSTALL_HOME/$OII_INSTALL_ZIP does not exist
fi
fi
#
echo Check zips
cd $OII_INSTALL_HOME
md5sum -c patches.MD5
cd $CD
#
# Check patches folder
if [ ! -d "$PATCHES_HOME" ]; then
mkdir $PATCHES_HOME
else
echo $PATCHES_HOME available
fi
#
#Unzip OII patch
if [ ! -d "$PATCHES_HOME/$OPATCH_OII_NR" ]; then
if [ -f "$OII_INSTALL_HOME/$OPATCH_OII_ZIP" ]; then
echo Unzip $OII_INSTALL_HOME/$OPATCH_OII_ZIP to $PATCHES_HOME
unzip $OII_INSTALL_HOME/$OPATCH_OII_ZIP -d $PATCHES_HOME
echo Apply OII Patch
cd $PATCHES_HOME/$OPATCH_OII_NR
$ORACLE_HOME/OPatch/opatch apply
else
echo $OII_INSTALL_HOME/$OPATCH_OII_ZIP does not exist!
fi
else
echo OII Patch $PATCHES_HOME/$OPATCH_OII_NR already available
fi
cd $CD
#Unzip SOA&BPM patch
if [ ! -d "$PATCHES_HOME/$OPATCH_SOABPM_NR" ]; then
if [ -f "$OII_INSTALL_HOME/$OPATCH_SOABPM_ZIP" ]; then
echo Unzip $OII_INSTALL_HOME/$OPATCH_SOABPM_ZIP to $PATCHES_HOME
unzip $OII_INSTALL_HOME/$OPATCH_SOABPM_ZIP -d $PATCHES_HOME
echo Apply SOA BPM Patch
cd $PATCHES_HOME/$OPATCH_SOABPM_NR
$ORACLE_HOME/OPatch/opatch apply
else
echo $OII_INSTALL_HOME/$OPATCH_SOABPM_ZIP does not exist!
fi
else
echo SOA-BPM Patch $PATCHES_HOME/$OPATCH_SOABPM_NR already available
fi
cd $CD
#Unzip OSB patch
if [ ! -d "$PATCHES_HOME/$OPATCH_OSB_NR" ]; then
if [ -f "$OII_INSTALL_HOME/$OPATCH_OSB_ZIP" ]; then
echo Unzip $OII_INSTALL_HOME/$OPATCH_OSB_ZIP to $PATCHES_HOME
unzip $OII_INSTALL_HOME/$OPATCH_OSB_ZIP -d $PATCHES_HOME
echo Apply OSB Patch
cd $PATCHES_HOME/$OPATCH_OSB_NR
$ORACLE_HOME/OPatch/opatch apply
else
echo $OII_INSTALL_HOME/$OPATCH_OSB_ZIP does not exist!
fi
else
echo OSB Patch $PATCHES_HOME/$OPATCH_OSB_NR already available
fi
cd $CD
echo Finished installing Oracle Fusion MiddleWare Integration Insight


The script first unzips the downloaded ofm_integration_insight_12.2.1.0.0_disk1_1of1.zip into:
  • p22189824_122100_Generic.zip
  • p22655174_122100_Generic.zip
  • p22659236_122100_Generic.zip
  • patches.MD5
  • README.txt
Then  it performs 'md5sum -c patches.MD5' to checks on the zips, but it ignores the results, just prints them.
Then for each patch it checks if the patch is already unzipped in the FMW_HOME/Opatch/patches folder. If so, it just assumes that its applied as well. If not the patch-zip is unzipped in the patches folder. And then it will perform opatch apply.
Opatch will ask if you want to proceed (answer with 'y') and if the system is ready to be patched (again answer with 'y'). For the SB Patch (the last in the list) it will look like:
Apply OSB Patch
Oracle Interim Patch Installer version 13.3.0.0.0
Copyright (c) 2016, Oracle Corporation. All rights reserved.


Oracle Home : /u01/app/oracle/FMW12210
Central Inventory : /u01/app/oraInventory
from : /u01/app/oracle/FMW12210/oraInst.loc
OPatch version : 13.3.0.0.0
OUI version : 13.3.0.0.0
Log file location : /u01/app/oracle/FMW12210/cfgtoollogs/opatch/22659236_Apr_01_2016_09_37_29/apply2016-04-01_09-37-22AM_1.log


OPatch detects the Middleware Home as "/u01/app/oracle/FMW12210"

Verifying environment and performing prerequisite checks...
OPatch continues with these patches: 22659236

Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.

Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/u01/app/oracle/FMW12210')


Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Applying interim patch '22659236' to OH '/u01/app/oracle/FMW12210'

Patching component oracle.osb.server, 12.2.1.0.0...

Patching component oracle.osb.server, 12.2.1.0.0...
Patch 22659236 successfully applied.
Log file location: /u01/app/oracle/FMW12210/cfgtoollogs/opatch/22659236_Apr_01_2016_09_37_29/apply2016-04-01_09-37-22AM_1.log

OPatch succeeded.
Finished installing Oracle Fusion MiddleWare Integration Insight

If you have a home with only OSB or only SOA-BPM adapt the script yourself to not patch the not-installed product.

Oh, I did not check on the install, for now I assume it worked.  Next step for me is describe the SOA/BPM install and check-out on the Integration Insight product.

Auto DDL: delete obsolete columns from table

Wed, 2016-03-30 06:55
A quick one. In the past I used to generate ddl based on queries, like the following. But I find myself to re-invent them again. So to have it saved for my offspring: here's one on deleting obsolete columns as generated on importing an excel sheet in SQLDeveloper:


declare
l_schema_name varchar2(30) := 'MY_SCHEMA';
l_table_name varchar2(30) := 'A_TABLE';
cursor c_cols is
select column_name
from all_tab_columns col
where col.table_name = l_table_name
and col.owner = l_schema_name
and col.column_name like 'COLUMN%';
begin
for r_cols in c_cols loop
execute immediate 'alter table '||l_schema_name||'.'||l_table_name||' drop column '||r_cols.column_name;
end loop;
end;
/

And here's one to generate a check constraint on all index colunns of a table:

declare
l_schema_name varchar2(30) := 'MY_SCHEMA';
l_table_name varchar2(30) := 'A_TABLE';
l_constraint_name_pfx varchar2(30) := 'XXX_ALIAS_CHK';
l_idx pls_integer := 1;
cursor c_cols is
select column_name
from all_tab_columns col
where col.table_name = l_table_name
and col.owner = l_schema_name
and col.column_name like 'IND_%';
begin
for r_col in c_col loop
execute immediate 'ALTER TABLE '||l_schema_name||'.'||l_table_name||' ADD CONSTRAINT '||l_constraint_name_pfx||l_idx||' CHECK ('||r_col.column_name||' in (''J'',''N''))ENABLE';
l_idx := l_idx+1;
end loop;
end;
/

Real-Time Integration Business Insight Available

Wed, 2016-03-23 12:22
To day Real-Time Integration Business Insight is available. I wrote about it in my summary of the OPN FMW Community forum. I hope I can get into it in the near future.

Enable Process Analytics in BPM12c

Wed, 2016-03-23 12:07
To be able to use BAM12c together with BPM12c, you'll need to enable process analytics. This means that only when that is enabled BAM12c will write the sample data to the proces cubes/star schema.

To do so you'll need to go to the enterprise manager (eg. http://darlin-vce-db:7001/em). Then open up the System MBean Browser. This can be started from the soa-infra:

And than from the SOA Infrastructure -> Administration -> System MBean Browser:


However, you can also start it a little quicker from the Weblogic Domain menu:
In the MBean Browser look for 'Application Defined MBeans':
Than look for 'oracle.as.soainfra.config'-> 'your server' -> AnalyticsConfig -> analytics:

Then in the pane make sure that both 'DisableAnalytics' and 'DisableProcessMetrics' are set to false:


 And click 'Apply'.

Above you'll see the layout of 12.2.1, but in 12.1.3 it works the same. Restart the SOA Server after that.

I'm not the first one to write about these changes, but I found that you can only update these fields if you have started the BAM server at least once. Apparently the BAM Server registers itself so that only after that you can update and apply these attributes.




BAM 12c: Extent Data objects

Wed, 2016-03-23 11:42
BAM 12c is a huge improvement against 11g. Best thing I think is that it is quite a lot easier to create a dashboard. There are several tutorials on BAM, for instance at the BAM12c site, so I'm not going to explain how to create a dashboard here.

One thing however on business queries: the examples mostly start with a BPM process and then query from the Process of Activity Data Object as created on deployment of the particular process. How-ever, often you'll find that you want to filter on a certain date range, for instance process started less than a day or a week ago. Or activities running less than an hour, or between an hour and two hours, two and three hours or longer. But then you'll find that you can't filter in the Business Queries on a date function. For instance you can't filter on something like  '{process start date} < now() - 7'.

To solve that you can add extra Calculated Fields that return yes or no or  1 or 0 if a certain date calculation condition is met. To do so go to the administration tab of the BAM Composer (eg. http://darlin-vce-db:7006/bam/composer):

 Then you can expand the Data Objects and you'll find that the process that is deployed resulted in two Dataobjects, one for Activities and one or the Process-instances:

By the way, to get those you can need to have the process analytics enabled. I'll explain that in another blog.

Click for instance on the CustomerSurvey Activity, then on the tab 'Calculated Fields' and then on 'Add Calculated Field':
d

You need to provide a name that has no spaces but only lowercase or uppercase letters and underscores. Then you can provide a name that is shown in the designer and in flat queries. The column type can be measure, dimension or attribute, but in this case you'll want attribute, to be able to filter on it. In this case I returned 'J' or 'N' for 'Ja' (Yes) or 'Nee' (No). This is sufficient for filtering. But if you want to count/summarize instances that are running less than one hour, or between one or two hours, etc., then you might want to return 1 or 0.

Click on OK and then save:

By clicking on the pencil-icon you can edit the field.

I'll provide some other examples that I found helpfull for the activity dataobject:



Field NameDisplay NameColumn TypeExpressiondescriptionactivity_started_lt_week_agoActivity started less than week agoAttributeIF(DATEDIFF(SQL_TSI_DAY,{Activity Start Time},now())<=7)THEN("J")ELSE("N")Is the activity started at most 7 days ago? (J/N)activity_started_lt_day_agoActivity started less than day agoAttributeIF(DATEDIFF(SQL_TSI_HOUR,{Activity Start Time},now())<=24)THEN("J")ELSE("N")Is the activity started at most 24 hours ago? (J/N)Activiteit_Looptijd_minActiviteit Loop tijd (min)AttributeIF({Activity Instance Status}=="ACTIVE")THEN(DATEDIFF(SQL_TSI_MINUTE,{Activity Start Time},now()))ELSE(DATEDIFF(SQL_TSI_MINUTE,{Activity Start Time},{Activity End Time}))Actual running time of the activity instance. If the instance is active, than the result is the difference between the start time and the current time (NOW()), otherwise it is the difference between de  start time and the end time. The "Activity Running Time" is aparently different from the predefined runningtime field, because of the sampling moments. Sometimes the Running time is near to zero, while the instance is still active. Activiteit_Looptijd_lt_1hrActiviteit Looptijd < 1 uurAttributeIF({Activity Instance Status}=="ACTIVE")&&(DATEDIFF(SQL_TSI_MINUTE,{Activity Start Time},now())<60 td="">Is Activity Running less than an hour?Activiteit_Looptijd_lt_2hrActiviteit Looptijd < 2 uurAttributeIF({Activity Instance Status}=="ACTIVE")&&(DATEDIFF(SQL_TSI_MINUTE,{Activity Start Time},now())>=60&&DATEDIFF(SQL_TSI_MINUTE,{Activity Start Time},now())<120 td="">Is Activity Running more than one but less than two hours?Activiteit_Looptijd_lt_3hrActiviteit Looptijd< 3 uurAttributeIF({Activity Instance Status}=="ACTIVE")&&(DATEDIFF(SQL_TSI_MINUTE,{Activity Start Time},now())>=120&&DATEDIFF(SQL_TSI_MINUTE,{Activity Start Time},now())<180 td="">Is Activity Running more than two but less than three hours?Activiteit_Looptijd_gt_maxActiviteit Looptijd > maxAttributeIF({Activity Instance Status}=="ACTIVE")&&(DATEDIFF(SQL_TSI_MINUTE,{Activity Start Time},now())>180)THEN(1)ELSE(0)Is Activity Running 3 hours or longer?Activiteit_is_openActiviteit is open?AttributeIF({Activity Instance Status}=="ACTIVE")THEN("J")ELSE("N")Is the activity still Open?
For the process Data Objects these are a good starting point:
Field NameDisplay NameColumn TypeExpressiondescriptionProcess_Running_Time_Min_attrProcess Running Time (Min) AttrAttribute{Process Running Time (millisecs)}/600000Number of minutes a process is executed. There is another comparable field already defined, but that is of type 'Measurement'. You can't use that for  analytid functions as AVG, MIN, MAX, etc.process_started_lt_week_agoProcess started less than week agoAttributeIF(DATEDIFF(SQL_TSI_DAY,{Process Start Time},now())<=7)THEN("J")ELSE("N")Is the process instantie started at most 7 days ago? (J/N)process_started_lt_day_agoProcess started less than day agoAttributeIF(DATEDIFF(SQL_TSI_HOUR,{Process Start Time},now())<=24)THEN("J")ELSE("N")Is the process instance started at most 24 hours ago? (J/N)Process_Looptijd_in_minProcess Looptijd (min)AttributeIF({Process Instance Status}=="ACTIVE")THEN(DATEDIFF(SQL_TSI_MINUTE,{Process Start Time},now()))ELSE(DATEDIFF(SQL_TSI_MINUTE,{Process Start Time},{Process End Time}))Actual running time of the process instance. If the instance is active, than the result is the difference between the start time and the current time (NOW()), otherwise it is the difference between de  start time and the end time. The "Process Running Time" is aparently different from the predefined runningtime field, because of the sampling moments. Sometimes the Running time is near to zero, while the instance is still active. So these help you in filter and aggregate on activity and process running times. Sorry for the dutch names, but I figure you can get the meaning.

The expressions are based on info I got from the user guide. You can find the 12.2.1 user guide over here. The 12.1.3 can be found here. Look for chapter 13.8 (in the 12.2.1 user guide) or 14.8 (in the 12.1.3 user guide).

Unable to logon to BPM Workspace

Tue, 2016-03-22 04:30
Yesterday I tried to test a demo bpm process with a few tasks. But I couldn't logon to the workspace. I couln't find an error, except for:

<[ServletContext@452818297[app:OracleBPMWorkspace module:/bpm/workspace path:null spec-version:3.1]] Servlet failed with an Exception java.lang.IllegalStateException: Response already committed

I tried several optional solutions, like setting the listen-address, that did not work. What solved the issue was setting the ServerURL in the System MBean browser of the soa-infra.
To do so in BPM12cR2, go to the Enterprise Manager, (eg. http://darlin-vce-db:7001/em as it is in my VM) and go to the soa-infra:
Then in the SOA Infrastructure -> Administration menu open the System MBean Browser:
In the System MBean Browser look for the Application Defined MBeans and expand it:
Within the Application Defined MBeans, expand 'oracle.as.soainfra.config', then your server  and then 'SoaInfraConfig' and click on soa-infra:
Find the attribute ServerURL and edit it to the host:port of your soa-server, including the 'http://' protocol, eg. 'http://darlin-vce-db:7005':

Don't forget to hit the enter key and click on Apply:


Restart your server and it should be good to go.

OPN Fusion Middleware Community Forum 2016: my summary

Sat, 2016-03-19 06:24

I just boarded on my flight back to Amsterdam and  I'd grab a chance to put down my first impressions of this week.

Apart from catching a flu, it was a great event. As could be expected the word describing the weather fenomena I'm about to enter resonates throughout the whole event. (For those who didn't catch my vague description: it's 'Cloud, Cloud,  Cloud).

One of the presenters put that Oracle needs to go for 100% Cloud for a while to become a recognised Cloud provider. But in a few years it wil most probably turn out that in most cases we wil be in a hybrid environment. And then Oracle will have the best papers to provide for both Cloud and On-Premise.  By the way: Oracle will encounter the same problems with upgrades that customers have for years.  So it can be expected that upgrading Oracle software will improve over time as well.

The most interesting session on the first day for me was the session of Grant Ronald about Application Builder Cloud Service and Max: Mobile Application Accelerator.  The latter is a little like Forms Builder in the cloud to build an app the 4 GL way.  Very cool in my opinion and Grant was amusing as always.  Smart to give him the last slot of the day.

The second day started for me with an excellent introduction and demo of Real Integration Business Insight or in short Insight.  Although leveraging BAM it has a whole different approach.  With BAM you need to complete your composite with Business Indicator definitions and deploy it. Only then you can define your queries, views and dashboard.  But with Insight you can do it top down. You don't need to define any indicators or sensors in your composites or service bus projects.  You define a model with milestones and Business Indicators afterwards in Insight. Then you need to map the indicators and milestones to particular points in your services.  Probably this is done by a more technical person or architect, who knows the implementation of the services.  For the rest business users can implement it. Your model can even span composites that are not interrelated with an ECID, using a correlation key.  This comes in convenient in cases like where  one BPEL process writes something to a database and later another instance picks it up.  Logically you're still working on the same business process but for SOA Suite it wasn't the same flow anymore.  Did you get that I mentioned Service Bus?  Besides BPEL it works for SB as well.  And since BAM is leveraged you'll find the models back in the data sources so you'll be able to expand from there and use the BAM functionality to join it with other sources. 

I took some sessions on PCS. They announced a few new capabilities for the next few releases.  For me Correlation Sets is a highly appreciated addition.  We have it in BPEL from the first release.  In BPM it was added to to the second patchset and apparently they left it out of PCS. Probably because correlation is hard to grasp. But when you want to interact with a running process you need to indicate how the engine can conclude for which instance the incoming event is meant. 

There is a very native integration with DOCS so you can add documents to a folder related to the process instance.  But there will be a new start event to start an instance on arrival of a document in a certain folder.  This caters for an end 2 end document workflow.  Thight integration with Oracle Social Network allows you to interact with peers on an task.

Another thing I took from there was that apparently we still see PCS too much as a stripped down version of BPM Suite in the cloud.  So we tend to think in ways like: 'why is this piece of BPM functionality not in PCS' or 'In BPM we can do this, why can't we do that in PCS as well?'. But although BPM was the starting point I believe that we need to start seeing it as a whole separate product with its own purpose. So let's think from PCS and think on how this could be used and grown up  as a child on it's own legs. So that needed to come of my chest... ;).

The day ended with a nice ACE hacking event on how you could build a showcase with as many Cloud Services as you can.  Not everything went smooth but I think they did a good job.

I took the PCS Hybrid Applications track for the workshop.  It could have been a little more elaborate but it was nice. Got to play with the upcoming April release of PCS in a VM. It looked great. If I get the chance I'll post a little bit more on that later on.

Yesterday we went into the city of Valencia for the Fallas Festivities.  I learned this morning it had something to do with carpenters and to burn their waste.  The whole week there were lots of fireworks, even older people walk around with a box of fireworks and throw around fire-crackers: something we see only teenagers doing on the day before new year. And there were processions and funny statue groups. 

So that completes my overview I think.  I hope I'll be able to write about some subjects in a little more detail soon.

BPM QuickStart 12c on Windows 10

Fri, 2016-03-18 04:27
As many people probably did, I upgraded my laptop to Windows 10. Actually after that I re-installed even windows 10, since I installed an SSD drive (a Samsung EVO 850, which is really fast).

Earlier I wrote about installing SOA/BPM QuickstartInstaller, using silent install. All goes well, but where in 12.1.3 you actually can succesfully create a domain, with 12.2.1 you can't. I don't know why I got it working with 12.1.3, but I found why it doesn't in 12.2.1.

I turns out to be a recurring problem that also arose in JDeveloper 11g and it is caused by jython being not able to recognize the OS.

If you open the jython-modules.jar that can be found here %FMW_HOME%\wlserver\common\wlst\modules, then you'll find a 'Lib' folder with in it the file javashell.py. You can open the jar file using an archiver, I used my favorite tool TotalCommander, with the key-combi <CTRL>-<PgDn>.

Copy the file out of it and find the part '_osTypeMap' and add the string 'Windows 10' to the 'nt' list:

_osTypeMap = (
( "nt", ( 'nt', 'Windows NT', 'Windows NT 4.0', 'WindowsNT',
'Windows 2000', 'Windows 2003', 'Windows XP', 'Windows CE',
'Windows Vista', 'Windows Server 2008', 'Windows 7', 'Windows 8',
'Windows Server 2012', 'Windows 10' )),
( "dos", ( 'dos', 'Windows 95', 'Windows 98', 'Windows ME' )),
( "mac", ( 'mac', 'MacOS', 'Darwin' )),
( "None", ( 'None', )),
)

Just copy it back in to the jar file, overwriting the older version. By the way, although I found out earlier that the fault was in the jython install, the real thanks should go to Christos Vezalis, for his great explanation and the actual solution (I did not know what the string should be).

By the way, this same solution works for JDeveloper 12c as well.

Automatic install SOA/BPM QuickStart under Linux

Fri, 2016-02-26 07:51
Earlier I wrote about the automatic or silent install of JDeveloper. As a preperation for an automatic install of the complete SOASuite I translated this to Linux.

To do so in Linux you'll need to adapt the sudoers file.

Log in als root via het commando
[oracle@darlin-vce-db ~]$ su -
Password:
Last login: Fri Feb 26 06:44:05 EST 2016 on pts/0

Then edit the sudo-ers file:
[root@darlin-vce-db ~]# vi /etc/sudoers
Uncomment the lines for the Cmnd_Alias-es SOFTWARE en SERVICES (remove the hash ’#’ from the start of the lines)
## Installation and management of software
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

Then add the following two lines to the end of the file:
## Extra rights for oracle to do for instance rpm without password.
oracle ALL= NOPASSWD: SERVICES, SOFTWARE
Save the file (use an exclamation-mark in the ‘:wq!’ command, since sudoers is a read-only-file.
I separated the settings for the environment in a seperate file, called 'jdev12c_env.sh', so you can use that before starting JDeveloper later on or to add these settings in your profile:
#!/bin/bash
echo set Jdeveloper BPM Quickstart 12cR2 environment
export JAVA_HOME=/usr/java/jdk1.8.0_74
export JDEV_HOME=/u01/app/oracle/JDeveloper/12210_BPMQS
export JDEV_USER_HOME_SOA=/home/oracle/JDeveloper/SOA
export JDEV_USER_DIR_SOA=/home/oracle/JDeveloper/SOA
I adapted the response file because of a different ORACLE_HOME path under Linux and renamed it to 'bpmqs1221_silentInstall-lnx.rsp':
[ENGINE]

#DO NOT CHANGE THIS.
Response File Version=1.0.0.0.0

[GENERIC]

#Set this to true if you wish to skip software updates
DECLINE_AUTO_UPDATES=true

#
MOS_USERNAME=

#
MOS_PASSWORD=

#If the Software updates are already downloaded and available on your local system, then specify the path to the directory where these patches are available and set SPECIFY_DOWNLOAD_LOCATION to true
AUTO_UPDATES_LOCATION=

#
SOFTWARE_UPDATES_PROXY_SERVER=

#
SOFTWARE_UPDATES_PROXY_PORT=

#
SOFTWARE_UPDATES_PROXY_USER=

#
SOFTWARE_UPDATES_PROXY_PASSWORD=

#The oracle home location. This can be an existing Oracle Home or a new Oracle Home
ORACLE_HOME=/u01/app/oracle/JDeveloper/12210_BPMQS

As an extra I also created an start script called 'jdev12c.sh':
#!/bin/bash
. $PWD/jdev12c_env.sh
echo start Jdeveloper BPM Quickstart 12cR2
$JDEV_HOME/jdeveloper/jdev/bin/jdev

The actual install script is as
#!/bin/bash
. $PWD/jdev12c_env.sh
echo JAVA_HOME=$JAVA_HOME
if [ ! -d "$JAVA_HOME" ]; then
# Install jdk
echo Install jdk 1.8
sudo rpm -ihv ./jdk-8u74-linux-x64.rpm
else
echo jdk 1.8 already installed
fi
# Install BPM QS
if [ ! -d "$JDEV_HOME" ]; then
# Install JDeveloper BPM QuickStart
echo Install JDeveloper BPM QuickStart 12cR2
$JAVA_HOME/bin/java -jar fmw_12.2.1.0.0_bpm_quickstart.jar -silent -responseFile $PWD/bpmqs1221_silentInstall-lnx.rsp
else
echo JDeveloper BPM QuickStart 12cR2 already installed
fi
echo copy jdev.boot naar $JDEV_HOME/jdeveloper/jdev/bin
mv $JDEV_HOME/jdeveloper/jdev/bin/jdev.boot $JDEV_HOME/jdeveloper/jdev/bin/jdev.boot.org
cp $PWD/jdev.boot $JDEV_HOME/jdeveloper/jdev/bin/
echo copy JDeveloper BPM QuickStart 12cR2 environment and start scripts to ~/bin
cp $PWD/jdev12c_env.sh ~/bin
cp $PWD/jdev12c.sh ~/bin

As described in the Windows variant of this install this script copies an adapted version of the jdev.boot file to use the JDEV_USER_HOME_SOA and JDEV_USER_DIR_SOA environment variables as set in the jdev12c_env.sh. Also it copies the jdev12c_env.sh and jdev12c.sh scripts to the ~/bin folder (user home dir), so after install you're good to go by running the jdev12c.sh script for starting JDeveloper.

BPM/SOA 12c: Symbolic Filebased MDS in Integrated Weblogic

Tue, 2016-02-02 05:44
In BPM/SOA projects, we use the MDS all the time, for sharing xsd's and wsdl's between projects.

Since 12cR1 (12.1.3) we have the QuickStart installers for SOA and BPM,  that allows you to create an Integrated Weblogic domain to use for SOASuite and/or BPMSuite.

In most projects we have the contents of the MDS in subversion and of course a check out of that in a local svn working copy.

My whitepaper mentioned in this blog entry describes how you can use the mds in a SOA Suite project from 11g onwards.

But how use the MDS in your integrated weblogic? I would expect that some how 'magically' the integrated weblogic would 'know' of the mds references that I have in the adf-config.xml file in my SOA/BPM Application. But unfortunately it hasn't. That is only used on design/compile time.

Now you could just deploy/sync your MDS to your integrated weblogic as you would do to your test/production server and did on 11g.

But I wouldn't write this blog-entry if I did not find a cool trick: symbolic links, even on Windows.

As denoted by the JDEV_USER_DIR variable your (see also this blog entry), your DefaultDomain would be in 'c:\Data\JDeveloper\SOA\system12.2.1.0.42.151011.0031\DefaultDomain' or 'c:\Users\MAG\AppData\Roaming\JDeveloper\system12.2.1.0.42.151011.0031\DefaultDomain' (on Windows).

Within the  Domain folder you'll find the following folder structure: 'store\gmds\mds-soa\soa-infra'.
 This is apparently the folder that is used for the MDS for SOA and BPM Suite. Within there you'll find the folders:
  • deployed-composites
  • soa
In there you can create a symbolic link (in Windows a Junctions) named 'apps' and pointing to the folder in your svn working copy that holds the 'oramds://apps'-related content. In Windows this is done like:
C:\...\DefaultDomain\store\gmds\mds-soa\soa-infra>mklink /J apps y:\Generiek\MDS\trunk\SOA\soa-infra\apps
The /J makes it a 'hard symbolic link' or a 'Junction'. Under Linux you woud use 'ln -s ...'.

You'll get a response like:
C:\...\DefaultDomain\store\gmds\mds-soa\soa-infra>Junction created for apps <<===>> y:\Generiek\MDS\trunk\SOA\soa-infra\apps
When you perform a dir you'll see:

c:\Data\JDeveloper\SOA\system12.2.1.0.42.151011.0031\DefaultDomain\store\gmds\mds-soa\soa-infra>dir
Volume in drive C is System
Volume Serial Number is E257-B299

Directory of c:\Data\JDeveloper\SOA\system12.2.1.0.42.151011.0031\DefaultDomain\store\gmds\mds-soa\soa-infra

02-02-2016 12:06 <DIR> .
02-02-2016 12:06 <DIR> ..
02-02-2016 12:06 <JUNCTION> apps [y:\Generiek\MDS\trunk\SOA\soa-infra\apps]
02-02-2016 12:07 <DIR> deployed-composites
02-02-2016 11:23 <DIR> soa
0 File(s) 0 bytes
5 Dir(s) 18.475.872.256 bytes free
You can just CD to the apps folder and do a DIR there, it will then list the contents of the svn working copy folder of your MDS but just from within your Default Domain.

Just refire your Integrated Domain's DefaultServer and you should be able to deploy your composites that depend on the MDS.

Using SKIP LOCKED feature in DB Adapter polling

Tue, 2016-01-19 04:53
Last few days I spent with describing a Throttle mechanism using the DB Adapter. Today the 'Distributed Polling' functionality of the DB Adapter was mentioned to me, which uses the SKIP LOCKED clausule of the database.

On one of the pages you'll get to check the 'Distributed Polling' option:
Leave it like it is, since it adds the 'SKIP LOCKED' option in the 'FOR UPDATE' clausule.

In my example screendump I set the Database Rows per Transaction, but you might want to set in a sensible higher value with regards to the 'RowsPerPollingInterval' that you need to set yourself in the JCA file:

The 'RowsPerPollingInterval' is not an option in the UI, unfortunately. You might want to set this as a multiple to the MaxTransactionSize (in the UI denoted as 'Database Rows per Transaction').

A great explanation for this functionality is this A-Team blogpost. Unfortunately the link to the documentation about 'SKIP LOCKED' in that post is broken. I found this one. Nice thing is that it suggests using AQ as preferred solution in stead of SKIP LOCKED.

Maybe a better way for throttling is using the AQ Adapter together with the properties

Automatic install of JDeveloper

Wed, 2016-01-06 01:57
A few weeks ago I wrote a little script to do a silent install of SOA/BPM QuickStart.
Yesterday I enhanced the script to also do an automatic install of Java and adapt the environment settings to have the JDeveloper settings specific placed in C:\Data\JDeveloper\SOA.

To run the script you should have the following files placed in one folder (for instance c:\temp\soabpm):
Download the jdk-8u65-windows-x64.exe from here. If you use another version adapt the script below to change the JAVA_HOME as the place where it should be installed and the reference to the installer (jdk-8u65-windows-x64.exe) to the version. The script below ignores any other installation of Java (either an other update of jdk8 or earlier versions).

Using the 'setx' command  (see docs) the JAVA_HOME is explicitly set, and also later on the variables JDEV_USER_DIR_SOA and JDEV_USER_HOME_SOA pointing to C:\Data\JDeveloper\SOA. I picked the jdev.boot from an earlier install adapted the ide.user.dir.var variable as follows:

#
# The ide.user.dir.var specifies the name of the environment variable
# that points to the root directory for user files. The system and
# mywork directories will be created there. If not defined, the IDE
# product will use its base directory as the user directory.
#
ide.user.dir.var = JDEV_USER_HOME_SOA,JDEV_USER_DIR_SOA

A copy of this jdev.boot file I placed in the same folder as the script. The scripts sets the FMW_HOME as 'C:\oracle\JDeveloper\12210_BPMQS'. After the install of JDeveloper-SOA/BPM QuickStart, it copies this jdev.boot file to the right place in the FMW_HOME (%FMW_HOME%\jdeveloper\jdev\bin).
Make sure that you have the installer jar files (fmw_12.2.1.0.0_bpm_quickstart.jar and fmw_12.2.1.0.0_bpm_quickstart.jar) unzipped in the same folder. You could have downloaded them in zip files. You can use this script also to do a complete silent install of the JDeveloper Studio Edition, but then use the generic installer downloaded here (Oracle JDeveloper 12c 12.2.1.0.0 Generic/Others(2.1GB)).

The installBpmQS.bat script is as follows.
@echo off
set JAVA_HOME=c:\Program Files\Java\jdk1.8.0_65
echo setx -m JAVA_HOME "%JAVA_HOME%"
setx -m JAVA_HOME "%JAVA_HOME%"
echo JAVA_HOME=%JAVA_HOME%
rem Check Java
if exist "%JAVA_HOME%" goto :JAVA_HOME_EXISTS
echo Install %JAVA_HOME%
jdk-8u65-windows-x64.exe /s INSTALLDIR="%JAVA_HOME%"
:JAVA_HOME_EXISTS
echo %JAVA_HOME% exists
rem check BPM12.2 QS
set FMW_HOME=C:\oracle\JDeveloper\12210_BPMQS
if exist "%FMW_HOME%" goto :BPMQS_HOME_EXISTS
echo Install %FMW_HOME%
rem echo "Current dir2:" %~dp0
echo "Silent install BPM QuickStart, using response file:" %cd%\bpmqs1221_silentInstall.rsp
"%JAVA_HOME%\bin\java.exe" -jar fmw_12.2.1.0.0_bpm_quickstart.jar -silent -responseFile %cd%\bpmqs1221_silentInstall.rsp -nowait
:BPMQS_HOME_EXISTS
echo %FMW_HOME% exists
if not exist c:\Data mkdir c:\Data
if not exist c:\Data\JDeveloper mkdir c:\Data\JDeveloper
if not exist c:\Data\JDeveloper\SOA mkdir c:\Data\JDeveloper\SOA
rem set JDEV_USER_DIR_SOA and JDEV_USER_HOME_SOA as 'c:\Data\JDeveloper\SOA'
echo set JDEV_USER_DIR_SOA and JDEV_USER_HOME_SOA as c:\Data\JDeveloper\SOA
setx -m JDEV_USER_DIR_SOA c:\Data\JDeveloper\SOA
setx -m JDEV_USER_HOME_SOA c:\Data\JDeveloper\SOA
echo copy jdev.boot naar "%FMW_HOME%\jdeveloper\jdev\bin"
copy jdev.boot "%FMW_HOME%\jdeveloper\jdev\bin" /Y
echo done

For completeness, the content of the response file is:
[ENGINE]

#DO NOT CHANGE THIS.
Response File Version=1.0.0.0.0

[GENERIC]

#Set this to true if you wish to skip software updates
DECLINE_AUTO_UPDATES=true

#
MOS_USERNAME=

#
MOS_PASSWORD=<secure value="">

#If the Software updates are already downloaded and available on your local system, then specify the path to the directory where these patches are available and set SPECIFY_DOWNLOAD_LOCATION to true
AUTO_UPDATES_LOCATION=

#
SOFTWARE_UPDATES_PROXY_SERVER=

#
SOFTWARE_UPDATES_PROXY_PORT=

#
SOFTWARE_UPDATES_PROXY_USER=

#
SOFTWARE_UPDATES_PROXY_PASSWORD=<secure value="">

#The oracle home location. This can be an existing Oracle Home or a new Oracle Home
ORACLE_HOME=C:\oracle\JDeveloper\12210_BPMQS
Save this as bpmqs1221_silentInstall.rsp. If you use this for the installation of JDeveloper Studio Edition or any other version of JDeveloper, then adapt the name, also in installBpmQS.bat above, and adapt the FMW_HOME/ORACLE_HOME in both installBpmQS.bat and the response-file.

I could have enhanced this script to put the possible points to change in variables. But I think with my eloboration you should get the point... 

Pages