Sunday, July 8, 2012

CRUD operations with the Entity variable – Oracle SOA Suite

CRUD operations with the Entity variable in Oracle SOA Suite:

In Oracle SOA Suite, we can use the Entity variables to perform the CRUD operations on the database. Entity variable will have the reference to the SDO enabled web services like ADF BC web service.
In Oracle SOA Suite we can expose the View objects (VOs) in ADF BC as SDO’s. SDOs enable you to modify business data regardless of how it is physically accessed.

For each Entity variable, a Unique Key (e.g. Primary key) must be associated with the corresponding Element.

Entity Variables automatically propagate data object changes through the ADF BC layer via "Change Summary" operations and can be used in BPEL by means of a partner link of either an ADF-BC binding or SOAP (WS) binding reference to your ADF BC service.

We can use the following activities Create Entity, Bind Entity and Remove Entity to perform the CRUD operations.

Bind Entity:

This activity enables you to select the entity variable to act as the data handle. This action select the row from the datasource, the update/Delete operation can be performed on the selected data.  

Create Entity: 

This activity enables you to create an entity variable. This action creates a row in the Datasource. 

Remove Entity: 

This activity enables you to remove an entity variable. This action removes the row from the datasource.

Follow the previous blog (Invoking a ADF-BC service from the SOA Composite – Oracle SOA 11g) to create and deploy the ADF BC SDO service.

Create a BPEL process which will take the employee details as input/output as shown below.


Create the web service parnerlink in the composite.xml by consuming the ADF BC service URL created in the previous blog. 



Friday, June 29, 2012

Enable Discovery Cache to Avoid Long Delay during Login to EM console – Oracle SOA Suite 11g

Enable Discovery Cache to Avoid Long Delay during Login to EM console in Oracle SOA Suite 11g

Logging into Enterprise Manager of Fusion Middleware Control 11g (fmwctl) takes a long time, the fmwctl discovery is always performed as part of login.  For installations with thousands of targets (e.g. Composites), fmwctl discovery may take 45-60 seconds. This time is expected because EM discovery Mbeans need to be invoked for every target. If the number of fmwctl monitored targets (e.g. Deployed Composites) increases, the login time will go up as well.
Solution is to cache the discovery results in the servlet context and use it for subsequent logins. This discovery result will be shared by all the fmwctl users. This will still require the entire discovery to be done at least once.
New parameters are added to enable/disable and to control the usage of the cached discovery results.  
  • If the caching is enabled, fmwctl will use the cached discovery results.
  • The default setting is "not use the cached results"
We have observed this issue in Oracle SOA Suite version 11.1.1.5.0 and Oracle suggested the patch 13251077 to enable the fmwctl discovery cache.

Steps to enable fmwctl discovery cache:

  1. Upgrade to FMw 11.1.1.6 or apply available patch 13251077 for your version.
    If applying patch 13251077, set ORACLE_HOME to MW_HOME/oracle_common before applying.
  2. Navigate to fmwctl System mBean browser.



Thursday, June 28, 2012

Monitoring the JCA Adapter’s through WLST script – Oracle SOA Suite

Monitoring the JCA Adapter’s through WLST script in Oracle SOA Suite:

Sometimes we may need to monitor the runtime performance of the JCA adapters, the monitoring is possible through EM console for limited details, the below WLST script will help us to monitor the required details of the JCA adapter (the scrip should be extended to monitor more details).

The below script can be used for monitoring only the DBAdapter’s and MQAdapter’s; the same can be extended to monitor other JCA Adapters (like FileAdapter) .

Before executing the script change the below condition according to your server name.

if server.getName().strip().startswith('S') | server.getName().strip().startswith('O')

The Adapters are only available in SOA and OSB servers so that I am filtering the other servers  based on the name(AdminServer or MS servers) .The exception will be thrown if we are trying to cd the MBean related to Adapters in others servers.

ResourceAdapterMonitor.py

def monitorDBAdapter(serverName):
    cd("ServerRuntimes/"+str(serverName)+"/ApplicationRuntimes/DbAdapter/ComponentRuntimes/DbAdapter/ConnectionPools")
    connectionPools = ls(returnMap='true')
    print '--------------------------------------------------------------------------------------'
    print 'DBAdapter Runtime details for '+ serverName
    print '                                                                                      '
    print '                                                                                      '
    print '--------------------------------------------------------------------------------------'

    print '%10s %13s %15s %18s' % ('Connection Pool', 'State', 'Current', 'Created')
    print '%10s %10s %24s %21s' % ('', '', 'Capacity', 'Connections')
    print '                                                                                      '
    print '--------------------------------------------------------------------------------------'
    for connectionPool in connectionPools:
       if connectionPool!='eis/DB/SOADemo':
          cd('/')
          cd("ServerRuntimes/"+str(serverName)+"/ApplicationRuntimes/DbAdapter/ComponentRuntimes/DbAdapter/ConnectionPools/"+str(connectionPool))
          print '%15s %15s %10s %20s' % (cmo.getName(), cmo.getState(), cmo.getCurrentCapacity(), cmo.getConnectionsCreatedTotalCount())

    print '                                                                                      '
    print '--------------------------------------------------------------------------------------'

def monitorMQAdapter(serverName):
    cd("ServerRuntimes/"+str(serverName)+"/ApplicationRuntimes/MQSeriesAdapter/ComponentRuntimes/MQSeriesAdapter/ConnectionPools")
    connectionPoolsMQ = ls(returnMap='true')
    print '--------------------------------------------------------------------------------------'
    print 'MQAdapter Runtime details for '+ serverName
    print '                                                                                      '
    print '                                                                                      '
    print '--------------------------------------------------------------------------------------'

    print '%15s %17s %15s %18s' % ('Connection Pool', 'State', 'Current', 'Created')
    print '%15s %15s %24s %21s' % ('', '', 'Capacity', 'Connections')
    print '                                                                                      '
    print '--------------------------------------------------------------------------------------'
    for connectionPoolMQ in connectionPoolsMQ:
          cd('/')
          cd("ServerRuntimes/"+str(serverName)+"/ApplicationRuntimes/MQSeriesAdapter/ComponentRuntimes/MQSeriesAdapter/ConnectionPools/")
          cd(connectionPoolMQ)
          print '%15s %20s %10s %20s' % (cmo.getName(), cmo.getState(), cmo.getCurrentCapacity(), cmo.getConnectionsCreatedTotalCount())

    print '                                                                                      '
    print '--------------------------------------------------------------------------------------'


def main():
      #connect(username, password, admurl)
      connect('weblogic','reuters123','t3://<SOA Host>:<SOA Port>)
      servers = cmo.getServers()
      domainRuntime()
      for server in servers:
         cd("/ServerLifeCycleRuntimes/" + server.getName())
         if cmo.getState() == 'RUNNING':  
            if server.getName().strip().startswith('S') | server.getName().strip().startswith('O') :
                 monitorDBAdapter(server.getName())
      for server in servers:
         cd('/')
         cd("/ServerLifeCycleRuntimes/" + server.getName())
         if cmo.getState() == 'RUNNING':  
            if server.getName().strip().startswith('S') | server.getName().strip().startswith('O') :
                 monitorMQAdapter(server.getName())   
      disconnect()
     
main()

Copy the script to the soa server and execute the below command

>   wlst.sh ResourceAdapterMonitor.py

O/P:
--------------------------------------------------------------------------------------
DBAdapter Runtime details for SOA1
--------------------------------------------------------------------------------------
Connection Pool         State         Current            Created
                                                    Capacity          Connections
--------------------------------------------------------------------------------------
  eis/DB/SOA             Running         22               1051
      eis/DB/Test           Running           2                  697
    eis/DB/Test1           Running           1                  130
--------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------
MQAdapter Runtime details for SOA1
------------------------------------------------------------------------------------------------------
Connection Pool                                       State          Current            Created
                                                                                  Capacity           Connections
------------------------------------------------------------------------------------------------------
eis/MQ/MQAdapter                                 Running          0                    0
eis/MQ/MQSeriesAdapterRemote            Running          2                   84
-------------------------------------------------------------------------------------------------------


DOWNLOAD ResourceAdapterMonitor.py


Thursday, June 21, 2012

Support to Retrieve or set a HTTP header in Oracle SOA Suite 11.1.1.5 version


Oracle SOA Suite 11.1.1.6 version provides the support to retrieve or set a HTTP header from BPEL

The same fix has been applied to the version 11.1.1.4 as a patch 12928372 but the patch was not available for the version 11.1.1.5.

Recently oracle has released the patch 12928372 for the version 11.1.1.5 also.

The patch can be downloaded for the metalink by specifying the patch no as 12928372.


 This functionality is working only with the BPEL version 2.0, make sure the BPEL process version is 2.0 when we are trying to implement this functionality.



Friday, June 8, 2012

Could not find registry for application_JBOServiceRegistry while deploying the composite with Oracle ADF-BC adapter


Could not find registry for application_JBOServiceRegistry while deploying the composite with Oracle ADF-BC adapter

When we are invoking the Oracle ADF-BC service from our Oracle SOA Suite composite, we may receive the error
“Could not find registry for applicationname_JBOServiceRegistry”.

The error is due to the wrong registry name used in the ADF-BC adapter configuration also the missing listener entry in the weblogic-application.xml

Follow the below steps to resolve the issue:

Verify the registry name provided in the ADF-BC adapter used in the composite.



The Registry name should be of form <application name>_ JBOServiceRegistry
The application name can be found on the application deployment profile of the ADF-BC application.