Monday Apr 27, 2015

Implementing Coherence and OWSM out-of-process on OSB 12c by David Saes

Introduction

Enterprise Deployment Guide for Oracle SOA Suite states that we should segregate Oracle Web Service Manager (OWSM) and if we plan to use Result Caching heavily with OSB we should segregate Coherence from OSB Managed Server too, but to perform these tasks at WebLogic 12c is quite different than old version 11g. This article describes how to create an OSB domain and segregate (or “out-of-process”) OWSM and Coherence Servers from OSB Managed Servers, our desired domain is covered by the following image:

clip_image002

Tested Environment

  • Oracle Fusion Middleware 12c (12.1.3.0.0) Infrastructure
  • Oracle Fusion Middleware 12c (12.1.3.0.0) Service Bus
  • Oracle JDK 7u75
  • Linux

Installation Steps

I’m assuming that all Installation steps are already done before, and I’ll not cover them on this article to not be boring, the installation steps are:

(Note: always certify your system meets the Requirements and Supported Platform):

Domain Configuration

Now we already have installed the OSB binaries, we need to configure the domain using the Configuration Wizard, my Oracle Home is /u01/oracle/middleware/fmw1213 and to start the Configuration Wizard we need to go to $ORACLE_HOME/oracle_common/common/bin and execute:

$ ./config.sh

Choose “Create a new domain” and choose the Domain Location as you prefer (in my case it will be /u01/oracle/domains/OSBDomain) and Click in Next button:

clip_image004

Select the Template “Oracle Service Bus”, and the templates: “WebLogic Advanced Web Services for JAX-RPC Extension”, “ODSI XQuery 2004 Components”, “Oracle Enterprise Manager”, “Oracle WSM Policy Manager”, “Oracle JRF” and “WebLogic Coherence Cluster Extension” will be selected too, then Click in Next button:

clip_image006

Choose the Application Location as you prefer (in my case it will be /u01/oracle/domains/applications/OSBDomain) and Click in Next button:

clip_image008

Define the Administrator Account User and password (in my case it will be weblogic for User and welcome1 for Password) and Click in Next button:

clip_image010

Select “Production” on Domain Mode and Choose the JDK appropriate and Click in Next button:

clip_image012

Enter your Database connection and RCU data then click in “Get RCU Configuration”, after we verify everything is OK click in Next button:

clip_image014

On Component Datasources click in Next button:

clip_image016

On JDBC Test verify if everything is OK and click in Next button:

clip_image018

Select “Administration Server”, “Node Manager”, “Managed Servers, Clusters and Coherence” and Click in Next button:

clip_image020

On Administration Server enter the “Server Name” and “Listen Port” as you prefer, on “Listen Address” as EDG states use a virtual host (in my case it will be AdminServer for Server Name, admin-vip for Listen Address and 7001 for Listen Port), on “Server Groups” leave “Unspecified” and click in Next button:

clip_image022

Choose the “Node Manager Type” and “Node Manager Credentials” as you prefer (in my case it will be Per Domain Default Location for Node Manager Type, nmuser for Username and welcome1 for Password) and click in Next button:

clip_image024

On Managed Servers screen, we will change the Server Group for OSB Server from “OSB-MGD-SVRS-COMBINED” to “OSB-MGD-SVRS-ONLY”, and Click in clip_image026 button to add our OWSM Managed Server then we will associate the Server Groups: “JFR-MAN-SVR” and “WSMPM-MAN-SVR” for it, then click in Next button:

clip_image028

Create two new cluster as following, you can adapt the names to your standards (Note: Always set Frontend Host to OSB)

Cluster Name

Cluster Address

Frontend Host

Frontend HTTP Port

Frontend HTTPS

cluster_osb

osb-node-01-vip:7010

osb-dev.internal

80

443

cluster_owsm

owsm-node-01-vip:7020

Click in Next button:

clip_image030

Associate each Server on your respective cluster then click in Next button:

clip_image032

Enter the name for Coherence Cluster and an Unicast Port Listen (in my case it will be CoherenceCluster for Cluster Name and 0 for Unicast Listen Port), if you leave port 0 it will create an offset for the Managed Servers, then click in Next button:

clip_image034

Enter the Machine information (in my case it will be machine1 for Name, machine1-vip for Node Manager Listen Address and 5556 for Node Manager Listen Port) then click in Next button:

clip_image036

Associate the Managed Servers to Machine created then click in Next button:

clip_image038

Click in Create button on Configuration Summary:

clip_image040

After the Domain was created, click in Next button:

clip_image042

Click in Finish button:

clip_image044

Here we’ve already segregated the OSB and OWSM in two different Managed Servers.

Starting OSB domain

Now we start our OSB domain created in previous step, my Domain Location or $DOMAIN_HOME is /u01/oracle/domains/OSBDomain, and to start the Admin Server we need to go $DOMAIN_HOME, execute startWebLogic.sh shell script, when asked enter the admin user name and password and wait the process to be in RUNNING state:

$ ./startWebLogic.sh

.

.

JAVA Memory arguments: -Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m

.

CLASSPATH=/u01/oracle/middleware/fmw1213/oracle_common/modules/features/com.oracle.db.jdbc7-dms.jar:/u01/oracle/middleware/fmw1213/oracle_common/modules/odsi_xquery2004_12.1.3/odsi.xquery.modules_12.1.3.0.jar:/u01/oracle/jdk1.7.0_75/lib/tools.jar:/u01/oracle/middleware/fmw1213/wlserver/server/lib/weblogic_sp.jar:/u01/oracle/middleware/fmw1213/wlserver/server/lib/weblogic.jar:/u01/oracle/middleware/fmw1213/wlserver/../oracle_common/modules/net.sf.antcontrib_1.1.0.0_1-0b3/lib/ant-contrib.jar:/u01/oracle/middleware/fmw1213/wlserver/modules/features/oracle.wls.common.nodemanager_2.0.0.0.jar:/u01/oracle/middleware/fmw1213/soa/soa/modules/oracle.soa.common.adapters_11.1.1/oracle.soa.common.adapters.jar:/u01/oracle/middleware/fmw1213/soa/soa/modules/oracle.cloud.adapter_12.1.3/oracle.cloud.adapter.jar:/u01/oracle/middleware/fmw1213/osb/lib/servicebus-common.jar:/u01/oracle/middleware/fmw1213/oracle_common/communications/modules/config-12.1.3.jar:/u01/oracle/middleware/fmw1213/oracle_common/communications/modules/userprefs-config-12.1.3.jar:/u01/oracle/middleware/fmw1213/oracle_common/modules/internal/features/jrf_wlsFmw_oracle.jrf.wls.classpath_12.1.3.jar:/u01/oracle/middleware/fmw1213/osb/lib/version.jar:/u01/oracle/middleware/fmw1213/osb/lib/servicebus.jar:/u01/oracle/domains/OSBDomain/config/osb:/u01/oracle/middleware/fmw1213/wlserver/../oracle_common/modules/com.oracle.cie.config-wls-online_8.1.0.0.jar::/u01/oracle/middleware/fmw1213/wlserver/common/derby/lib/derbynet.jar:/u01/oracle/middleware/fmw1213/wlserver/common/derby/lib/derbyclient.jar:/u01/oracle/middleware/fmw1213/wlserver/common/derby/lib/derby.jar:/u01/oracle/middleware/fmw1213/wlserver/server/lib/xqrl.jar

.

PATH=/u01/oracle/middleware/fmw1213/wlserver/server/bin:/u01/oracle/middleware/fmw1213/wlserver/../oracle_common/modules/org.apache.ant_1.9.2/bin:/u01/oracle/jdk1.7.0_75/jre/bin:/u01/oracle/jdk1.7.0_75/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oracle/bin

.

***************************************************

* To start WebLogic Server, use a username and *

* password assigned to an admin-level user. For *

* server administration, use the WebLogic Server *

* console at http://hostname:port/console *

***************************************************

starting weblogic with Java version:

java version "1.7.0_75"

Java(TM) SE Runtime Environment (build 1.7.0_75-b13)

Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode)

Starting WLS with line:

/u01/oracle/jdk1.7.0_75/bin/java -server -Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m -Dweblogic.Name=AdminServer -Djava.security.policy=/u01/oracle/middleware/fmw1213/wlserver/server/lib/weblogic.policy -Dweblogic.ProductionModeEnabled=true -Djava.endorsed.dirs=/u01/oracle/jdk1.7.0_75/jre/lib/endorsed:/u01/oracle/middleware/fmw1213/wlserver/../oracle_common/modules/endorsed -Djava.protocol.handler.pkgs=oracle.mds.net.protocol -Dopss.version=12.1.3 -Digf.arisidbeans.carmlloc=/u01/oracle/domains/OSBDomain/config/fmwconfig/carml -Digf.arisidstack.home=/u01/oracle/domains/OSBDomain/config/fmwconfig/arisidprovider -Doracle.security.jps.config=/u01/oracle/domains/OSBDomain/config/fmwconfig/jps-config.xml -Doracle.deployed.app.dir=/u01/oracle/domains/OSBDomain/servers/AdminServer/tmp/_WL_user -Doracle.deployed.app.ext=/- -Dweblogic.alternateTypesDirectory=/u01/oracle/middleware/fmw1213/oracle_common/modules/oracle.ossoiap_12.1.3,/u01/oracle/middleware/fmw1213/oracle_common/modules/oracle.oamprovider_12.1.3,/u01/oracle/middleware/fmw1213/oracle_common/modules/oracle.jps_12.1.3 -Dweblogic.jdbc.remoteEnabled=true -Dcommon.components.home=/u01/oracle/middleware/fmw1213/oracle_common -Djrf.version=12.1.3 -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger -Ddomain.home=/u01/oracle/domains/OSBDomain -Doracle.server.config.dir=/u01/oracle/domains/OSBDomain/config/fmwconfig/servers/AdminServer -Doracle.domain.config.dir=/u01/oracle/domains/OSBDomain/config/fmwconfig -Doracle.mds.filestore.preferred= -Dadf.version=12.1.3 -Doracle.osb.home=/u01/oracle/middleware/fmw1213/osb -da -Dwls.home=/u01/oracle/middleware/fmw1213/wlserver/server -Dweblogic.home=/u01/oracle/middleware/fmw1213/wlserver/server -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder -Dem.oracle.home=/u01/oracle/middleware/fmw1213/em -DINSTANCE_HOME=/u01/oracle/domains/OSBDomain -Djava.awt.headless=true -Doracle.sysman.util.logging.mode=dual_mode -Dums.oracle.home=/u01/oracle/middleware/fmw1213/oracle_common -Djava.util.logging.manager=oracle.core.ojdl.logging.ODLLogManager -Dweblogic.utils.cmm.lowertier.ServiceDisabled=true weblogic.Server





clip_image045

Enter username to boot WebLogic server:weblogic

Enter password to boot WebLogic server:





Mar 28, 2015 1:00:45 AM oracle.security.jps.JpsStartup start

INFO: Jps initializing.

Mar 28, 2015 1:00:52 AM org.hibernate.validator.util.Version

INFO: Hibernate Validator 12.1.3.0.0

Mar 28, 2015 1:00:52 AM org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA

INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.

...



<Channel "Default" is now listening on 192.168.56.102:7001 for protocols iiop, t3, ldap, snmp, http.>

clip_image046


Note: If during the Admin startup you see the stack like below, it is because the Admin Server is trying to reach wsm-pm during startup. As wsm-pm is targeted only to Managed Servers which have not been started yet, this must fail.

The connection to wsm-pm will be retried, and will be established once wsm-pm is available in the domain. (more details see the MOS Note: 1948727.1)

oracle.wsm.policymanager.PolicyManagerException: WSM-02141 : Unable to connect to the policy access service.

at oracle.wsm.policymanager.BeanFactory.getInitialContext(BeanFactory.java:810)

at oracle.wsm.policymanager.BeanFactory.getJndiObj(BeanFactory.java:844)

at oracle.wsm.policymanager.BeanFactory.lookupJndiObj(BeanFactory.java:1175)

at oracle.wsm.policymanager.BeanFactory.getUsageTrackerBeanEJB(BeanFactory.java:1019)

at oracle.wsm.policymanager.BeanFactory.getBeanEJB(BeanFactory.java:544)

at oracle.wsm.policymanager.BeanFactory.getBean(BeanFactory.java:451)

at oracle.wsm.config.ConfigurationManager$2.run(ConfigurationManager.java:1589)

at java.security.AccessController.doPrivileged(Native Method)

at oracle.wsm.config.ConfigurationManager.getBean(ConfigurationManager.java:1585)

at oracle.wsm.config.ConfigurationManager.access$1400(ConfigurationManager.java:169)

at oracle.wsm.config.ConfigurationManager$ContextualAccessor.configureBean(ConfigurationManager.java:600)

at oracle.wsm.config.ConfigurationManager$ContextualAccessor.configure(ConfigurationManager.java:541)

at oracle.wsm.config.ConfigurationManager$ContextualAccessor.(ConfigurationManager.java:487)

at oracle.wsm.config.ConfigurationManager$ContextualAccessor.(ConfigurationManager.java:375)

at oracle.wsm.config.ConfigurationManager.initializeAccessors(ConfigurationManager.java:1902)

at oracle.wsm.config.ConfigurationManager.reset(ConfigurationManager.java:2251)

at oracle.wsm.config.ConfigurationManager.getRepositoryAccessor(ConfigurationManager.java:1803)

at oracle.wsm.policyaccess.PolicyAccessPoint$1.run(PolicyAccessPoint.java:333)

at oracle.wsm.policyaccess.PolicyAccessPoint$1.run(PolicyAccessPoint.java:330)

at java.security.AccessController.doPrivileged(Native Method)

...

at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98)

at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87)

at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.oneJob(CurrentTaskFuture.java:1162)

at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.run(CurrentTaskFuture.java:1147)

at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:548)

at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)

at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)

Caused By: javax.naming.CommunicationException: t3://owsm-node-01-vip:7020: Destination 192.168.56.102, 7020 unreachable; nested exception is:

java.net.ConnectException: Connection refused; No available router to destination]

at weblogic.jndi.internal.ExceptionTranslator.toNamingException(ExceptionTranslator.java:40)

at weblogic.jndi.WLInitialContextFactoryDelegate.toNamingException(WLInitialContextFactoryDelegate.java:808)

at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:365)

at weblogic.jndi.Environment.getContext(Environment.java:319)

Creating Coherence Managed Server

Now we need to create our WebLogic Cluster and WebLogic Managed Server to keep our Coherence data from OSB Resulting Cache, this process is very different than the configuration on OSB 11g, in order you need to follow this steps:

  1. Create a file named createAndDeployCoherence.py and paste the following text:

## Variables

username='weblogic'

password='welcome1'

domainURI='t3://admin-vip:7001'

ClusterWLSCoherence_Name='cluster_coherence'

ManagedWLSCoherence_Name='coherence_server1'

ListenAddressCoherence='coherence-node-01-vip'

PortCoherence=7030

ClusterCoherence='CoherenceCluster'

MachineCoherence='machine1'

OracleHome='/u01/oracle/middleware/fmw1213/osb'

## End Variables

connect(username,password,domainURI);

edit();

startEdit();

#Create Cluster

cd('/')

cmo.createCluster(ClusterWLSCoherence_Name)

cd('/Clusters/'+ClusterWLSCoherence_Name)

cmo.setClusterMessagingMode('unicast')

#Create Server

cd('/')

cmo.createServer(ManagedWLSCoherence_Name)

cd('/Servers/'+ManagedWLSCoherence_Name)

cmo.setListenAddress(ListenAddressCoherence)

cmo.setListenPort(PortCoherence)

cmo.setCluster(getMBean('/Clusters/'+ClusterWLSCoherence_Name))

cmo.setMachine(getMBean('/Machines/'+MachineCoherence))

#Disable SSL

cd('/Servers/'+ManagedWLSCoherence_Name+'/SSL/'+ManagedWLSCoherence_Name)

cmo.setEnabled(false)

#Add to Coherence Cluster

cd('/Servers/'+ManagedWLSCoherence_Name)

cmo.setCoherenceClusterSystemResource(getMBean('/CoherenceClusterSystemResources/'+ClusterCoherence))

cd('/CoherenceClusterSystemResources/'+ClusterCoherence)

cmo.addTarget(getMBean('/Servers/'+ManagedWLSCoherence_Name))

cd('/Clusters/'+ClusterWLSCoherence_Name)

cmo.setCoherenceClusterSystemResource(getMBean('/CoherenceClusterSystemResources/'+ClusterCoherence))

cd('/CoherenceClusterSystemResources/'+ClusterCoherence)

cmo.addTarget(getMBean('/Clusters/'+ClusterWLSCoherence_Name))

#Deploy resultcache

progress=deploy('resultcache',OracleHome+'/lib/apps/resultcache.gar',ClusterWLSCoherence_Name,block='true',upload='true')

progress.printStatus()

print

print

print 'Coherence Server has been configured'

print

print

save();

activate();

disconnect();

exit();

  1. Modify the script variables according to your installation settings. The variables are:

username – The Admin username created for the Domain

password – The Admin password created for the Domain

domainURI – The Url for your Admin Server

ClusterWLSCoherence_Name – The new name for WebLogic Cluster to create for the Coherence Managed Servers

ManagedWLSCoherence_Name – The new name for Coherence Managed Server

ListenAddressCoherence – The virtual host for the new Coherence Managed Server

PortCoherence – The port for the new Coherence Managed Server

ClusterCoherence – The Coherence created to the new Coherence Managed Servers

MachineCoherence – The Machine created to managed the new Coherence Managed Servers

OracleHome - Oracle Service Bus installation directory

  1. In another SSH session run wlst.sh shell script asking our createAndDeployCoherence.py script created previously, the wlst.sh in my case resides on /u01/oracle/middleware/fmw1213/oracle_common/common/bin/wlst.sh:

$ /u01/oracle/middleware/fmw1213/oracle_common/common/bin/wlst.sh createAndDeployCoherence.py

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

Connecting to t3://admin-vip:7001 with userid weblogic ...

Successfully connected to Admin Server "AdminServer" that belongs to domain "OSBDomain".

Warning: An insecure protocol was used to connect to the

server. To ensure on-the-wire security, the SSL port or

Admin port should be used instead.

Location changed to edit tree. This is a writable tree with

DomainMBean as the root. To make changes you will need to start

an edit session via startEdit().

For more help, use help('edit')

Starting an edit session ...

Started edit session, please be sure to save and activate your

changes once you are done.

Deploying application from /u01/oracle/middleware/fmw1213/osb/lib/apps/resultcache.gar to targets cluster_coherence (upload=true) ...


You have an edit session in progress, hence WLST will not

block for your deployment to complete.

Started the Deployment of Application. Please refer to the returned WLSTProgress object or variable LAST to track the status.

Current Status of your Deployment:

Deployment command type: deploy

Deployment State : failed

Deployment Message : weblogic.deploy.beans.factory.InvalidTargetException: cluster_coherence

Coherence Server has been configured

Saving all your changes ...

Saved all your changes successfully.

Activating all your changes, this may take a while ...

The edit lock associated with this edit session is released

once the activation is completed.

Activation completed

Disconnected from weblogic server: AdminServer

Exiting WebLogic Scripting Tool.

<WLContext.close() was called in a different thread than the one in which it was created.>

  1. Log into WebLogic console: http://admin-vip:7001/console

Expand Environment in the left menu and select Servers

i) Click on server osb_server1 and go to Server Start tab on Arguments, add the following parameters and Save your configuration:

-DOSB.coherence.cluster=CoherenceCluster -Dtangosol.coherence.distributed.localstorage=false

ii) Click on server owsm_server1 and go to Server Start tab on Arguments, add the following parameters and Save your configuration:

-DOSB.coherence.cluster=CoherenceCluster -Dtangosol.coherence.distributed.localstorage=false

iii) Click on server coherence_server1 and go to Server Start tab on Arguments, add the following parameters and Save your configuration:

-DOSB.coherence.cluster=CoherenceCluster

  1. Start All Managed Servers

Conclusion

Now we have an OSB domain configured using the best practices that EDG says and also we can use the best that Oracle Fusion Middleware 12c can deliver.

References

https://docs.oracle.com/middleware/1213/soasuite/SOEDG/toc.htm

https://docs.oracle.com/middleware/1213/osb/develop/osb-business-services.htm#OSBDV2232

http://www.oracle.com/technetwork/articles/soa/bus-coherence-caching-421276.html

https://blogs.oracle.com/MarkSmith/entry/osb_and_coherence_integration_1


SOA & BPM Partner Community

For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.

Blog Twitter LinkedIn image[7][2][2][2] Facebook clip_image002[8][4][2][2][2] Wiki

Friday Apr 24, 2015

Migrating Service Bus 11g to 12c (and the XQuery 1.0 upgrade) by Jan van Zoggel

clip_image001You can easily import an Oracle Service Bus 11g project archive (JAR) in your JDeveloper 12c SB application (File -> Import)

XQuery upgrade:

Howver, when you import your Oracle Service Bus 11g project you will most likely import XQuery transformations as well. When you look at the XQuery editor in JDeveloper 12c you will probably notice that you only have “source” mode and not a graphical editor. Besides that the XQuery files show a “04” icon.

Since the early days of AquaLogic Service Bus the company formerly known as BEA (TCFKAB) supported the W3C working draft of “XQuery 1.0 and XPath 2.0 Functions and Operators” dated 23 July 2004.
In addition TCFKAB supported a number of extension functions easy to recognize with their fn-bea prefix. Since then the world moved on and XQuery made it to version 1.0 in 2007. So now in 12c there is a way to upgrade your XQuery 2004 files to version 1.0. Read the complete article here.

SOA & BPM Partner Community

For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.

Blog Twitter LinkedIn image[7][2][2][2] Facebook clip_image002[8][4][2][2][2] Wiki

Sunday Mar 22, 2015

XSLT and DVMs – Design Time Execution in Oracle Service Bus 12c by Jennie DeRosa

clip_image002Within Oracle Service Bus 11g, there is not an easy way to reference Domain Value Maps (DVM), like there is in Oracle SOA Suite 11g Composites. Typically, a kluge solution is implemented as a workaround in a Service Bus 11g project. With Oracle Service Bus 12c, this has changed, DVMs are now accessible in XQuery and XSL maps.

While this is good news, the even better news is that XSL maps which contain references to DVMs can now be successfully executed at design time, allowing for testing within JDeveloper. Testing of XSL maps at design time is always a good practice, it allows for catching bugs early in the development process.

Within this article, I will provide an overview of the configurations required to enable testing an XSL map at design time, which references a DVM within an Oracle Service Bus 12c project.

Overview of creation of a DVM along with publishing to the MDS repository can be found here: http://technology.amis.nl/2014/06/27/soa-suite-12c-using-domain-value-map-dvm-in-service-bus-projects/

One prerequisite step necessary when referencing a DVM outside of the current Service Bus project is to import the resource from the Meta Data Storage (MDS).  OSB 12c cannot contain references to resources, like a DVM, within the MDS repository. Rather, the resource needs to be imported into the Service Bus project, as shown below.

Select the DVM within the MDS repository and select ‘Import Resource’: Read the complete article here.

SOA & BPM Partner Community

For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.

Blog Twitter LinkedIn image[7][2][2][2] Facebook clip_image002[8][4][2][2][2] Wiki

Friday Mar 20, 2015

Caching in OSB 12c without Out-Of-Process Coherence Servers by Ricardo Ferreira

clip_image002Introduction

One of the most popular use cases for Oracle Service Bus (OSB) is the mediation of synchronous service interactions. In this scenario, a client invokes the service through a proxy instead of the actual service endpoint, guaranteeing that the consumer is decoupled from the producer. This type of architecture allows producers to be changed without impacting the consumers, allowing greater agility for projects with volatile requirements.

Synchronous services that return results that do not change often are good candidates to have their results cached by OSB, through a feature called Result Caching. This improves performance by reducing network overhead to access the back-end service. Result caching can help to improve scalability by reducing the load on the back-end servers that host the service. Figure 1 illustrates a client invoking a synchronous service with Result Caching enabled.

Although using the Result Caching feature may seem to always be a good idea, it is important to evaluate its side effects. When this feature is activated, all results are cached in the JVM heap. That means that heap can rapidly become full after a number of service invocations occur. This could lead to serious garbage collection (GC) issues once the JVM starts to reclaim the used space when it hits the high water-mark of 80% of the heap size. Eventually, full GC pauses will start to occur and jeopardize OSB performance.

To avoid using too much heap space with Result Caching, out-of-process Coherence servers can be set up to run in their own JVMs to hold the cached results. They are termed “out-of-process” because they execute in a JVM different from the OSB JVM. The technique here is to allocate data off the OSB JVM letting the Coherence servers use their own heap space without affecting the heap space OSB uses to process messages. This technique is also called off-heap caching. Figure 2 shows an OSB domain using out-of-process Coherence servers to hold the cached results. Read the complete article here.

SOA & BPM Partner Community

For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.

Blog Twitter LinkedIn image[7][2][2][2] Facebook clip_image002[8][4][2][2][2] Wiki

Thursday Mar 19, 2015

Service Bus 12c – Exposing a Pipeline as a REST Service by Jennie DeRosa

clip_image002Within Oracle Service Bus 12c, there are several ways to implement a pipeline as a REST service.

One approach is to REST enable an existing SOAP service. In this scenario, a pipeline is supported by both SOAP and REST based interactions. A video that provides a good overview of the required steps to implement this can be found here.

Another way is to derive it from a pipeline WSDL (REST bindings in OSB 12c are based on a WSDL document). The steps below detail the configurations required to accomplish this.

The first step is to create a pipeline that is a WSDL-based service. If the WSDL does not exist, it can be generated from a schema. To do this, select the ‘Create a WSDL’ icon in the Pipeline Service creation wizard to open the Create WSDL dialog.  Before selecting ‘Finish’, be sure the ‘Expose as a Proxy Service’ is not checked, since we will be generating a REST based proxy in a later step. Read the complete article here.

SOA & BPM Partner Community

For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.

Blog Twitter LinkedIn image[7][2][2][2] Facebook clip_image002[8][4][2][2][2] Wiki

Friday Feb 20, 2015

OSB12c: Errorhandling in REST by Martien van den Akker

clip_image002Yesterday, I had an OSB consulting day at a customer. We looked into a REST service that was to be extended with update functionality. Since calling an update service of an EIS (Enterprise Information System) can go wrong with all sorts of errors, it is important to be able to return a fault-message with the errors, jason format.
Now in OSB12c it's very apparent how you define possible fault-messages and even how the should be formatted in JSON:

In this sample case we created a more or less simple xsd for faults (dutch: fouten). To test with different fault messages we simply duplicated the 'fouten' element in the xsd to 'fouten2'. You can assign different HTTP-status codes to the different fault.
So this is configuration is pretty simple and straight forward. But it is not quite clear in the documents how you would return a specific fault within your error-handlers in the pipeline.
Internally OSB works not only 'XML'-based but actually SOAP-based. So the trick in the end is to replace the body with a soap-fault message and the selection of the REST/JSON errormessage is done based on the structure of the document in the details-section of the SOAP-Fault. In the screen above, you would define for each fault message an xsd-element and apparently it validates the soap-fault-details content against each XSD defined, and the xsd against which the detail-content is valid points to the returned fault, with the corresponding HTTP Status.

Read the complete article here

SOA & BPM Partner Community

For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.

Blog Twitter LinkedIn image[7][2][2][2] Facebook clip_image002[8][4][2][2][2] Wiki

Thursday Feb 19, 2015

Patching the Service Bus 12.1.3 unknown protocol deployment error by rubix

clip_image002If you (already) created your first Oracle Service Bus 12c application/project with SOAP webservices and tried to deploy it to your IntegratedWeblogic server you might be familiar with this error.

Lucky for us Oracle quickly released a solution on their support website and also various blogs picked it up and posted a solution. The earliest reference I found was posted by Link. The solution to your problem was either:

  • Add felix.service.urlhandlers=false to the Init properties of OSGi frameworks bac-svnserver-osgi-framework factory implementation class
  • Remove the default server as a target for the framework

This worked like a charm and I was able to play around with my 12c Service Bus. However since it was stated that the solution could result into problems with BPM on your domain I reminded myself that I wanted to dive deeper into this when I had the time.

Google helped me out, and I discovered this information on the Apache Felix framework website.

Felix installs the URL Handlers service by default. If you do not want this service you can disable it, by setting the felix.service.urlhandlers property to false in the config.properties file. It is not recommended to disable this, but the main reason for doing so it because the URL Handlers implementation invokes methods to set the singleton factories for URL stream and content handler factories. Assuming that you want to use URL Handlers service, you must configure it if you aren’t running on the standard Sun JRE.

The URL Handlers service extends the standard Java URL stream and content handler mechanism to work in an OSGi environment. The way that built-in URL protocol and content handlers are discovered is by probing packages for the appropriate classes to handle the protocol/content. ……….. The value of these properties is a list of “|” delimited package names to be searched for protocol and content handlers, respectively. See the Java documentation for stream and content handlers for more information.

So disabling the URL handler service is not recommended and you should be able to extend the list of package names used for handling content and protocols. So after poking around the world wide web I finally discovered that Oracle already released a document on this with Doc ID 1903573.1. Read the complete article here.

SOA & BPM Partner Community

For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.

Blog Twitter LinkedIn image[7][2][2][2] Facebook clip_image002[8][4][2][2][2] Wiki

Service Bus 12c – Series of Articles by Siva

Published following series of articles related Service Bus 12c. Hopefully it helps the people who want to get hands dirty.

SOA & BPM Partner Community

For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.

Blog Twitter LinkedIn image[7][2][2][2] Facebook clip_image002[8][4][2][2][2] Wiki

Using OSB 12.1.3 Resequencer by Derek Kam

clip_image002Resequencer feature has been added to Oracle Service Bus 12c (12.1.3), it utilises the same resequencer engine as Oracle Mediator.  The objective of this feature is to provide you with the ability to resequence the incoming messages that arrive in random order and send them to the target services in an orderly manner.  In this blog, I will give you a bit more information about this new feature in OSB and how to debug if you encounter an issue.

As mentioned in the official doc, the resequencer doest not support any XML and any SOAP service type, you need to define a WSDL in order to use the resequencer feature in OSB, and this WSDL must be only one-way, and must not contain any response elements.

The OSB Resequencer Strategies work in the same manner as Oracle Mediator;  it supports Standard, FIFO and Best Effort.  The differences between the resequencer implementation in Oracle Mediator and OSB are the ways in which both dispatch the message.  In OSB, pipeline acts as a Resequencer component. User cannot configure resequencer at any other OSB component.  After resequencing, the ordered messages will be processed further in the pipeline.  As soon as the message is pushed to the resequencer, caller will get a successful response. Though resequencer is part of the pipeline configuration, it will be invoked just before the pipeline is invoked.

Just like the Oracle Mediator,  OSB Resequencer also relies on the database for processing messages.  The database tables are automatically created when you run the repository creation utility (RCU) while creating the OSB domain.  The JNDI name used by the OSB resequencer is jdbc/SOADataSource.  The tables used by the resequencer are shown below:

You can use the Enterprise Manager to configure the throughput for resequenced messages.  Following are the properties specific to OSB resequencer:

  • Resequencer Maximum Groups Locked : Maximum number of groups locked by Resequencer in each attempt it makes to obtain locks on the groups. Locks are obtained on the groups so that only one managed server node processes the group at a time.
  • Resequencer Locker Thread Sleep : The number of seconds the Resequencer would pause between each iteration to obtain locks on the groups.
  • Purge Completed Messages : Delete message after successful execution. The default value will be set as true.

Read the complete article here.

SOA & BPM Partner Community

For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.

Blog Twitter LinkedIn image[7][2][2][2] Facebook clip_image002[8][4][2][2][2] Wiki

Wednesday Feb 18, 2015

Service Bus: Obtaining a list of exposed SOAP HTTP endpoints by Maarten Smeets

The Oracle Service Bus is often used for service virtualization. Endpoints are exposed on the Service Bus which proxy other services. Using such an abstraction layer can provide benefits such as (among many other things) monitoring/logging, dealing with different versions of services, throttling/error handling and result caching. In this blog I will provide a small (Java) script, which works for SOA Suite 11g and 12c, which determines exposed endpoints on the Service Bus.

How to determine endpoints?

clip_image001In order to determine endpoints on the Service Bus, The Service Bus MBeans can be accessed. These MBeans can obtained from within a local context inside the Service Bus or remotely via JMX (when configured, see http://stackoverflow.com/questions/1013916/how-to-enable-jmx-on-weblogic-10-x). In this example I’ll use a remote connection to a Weblogic Server instance which runs on the same machine (JDeveloper IntegratedWeblogicServer). To browse MBeans, you can use jvisualvm (http://docs.oracle.com/javase/7/docs/technotes/guides/visualvm/) which is distributed as part of the Oracle JDK. JVisualVM has a plugin to browse MBeans.

When connected, the Service Bus MBeans are located under com.oracle.osb. The proxy services which define the exposed endpoints, can be recognized by the Proxy$ prefix. In order to determine the actual endpoint, you can look at the ResourceConfigurationMBean of the proxy service. Under configuration, transport-configuration you can find a property called url. The script also filters HTTP SOAP services since the url field is also used for other transports. A replace of // with / is done on the combination server:host/url since the url can start with a /. This causes no difference in functioning but provides better readable output. If you want WSDL’s, you can add ‘?wsdl’ to the obtained endpoint. Read the complete article here.

SOA & BPM Partner Community

For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.

Blog Twitter LinkedIn image[7][2][2][2] Facebook clip_image002[8][4][2][2][2] Wiki

About





Search

Archives
« May 2015
SunMonTueWedThuFriSat
     
13
23
24
25
26
27
28
29
30
31
      
Today