OSB and Coherence Integration

Posted by mark.ms.smith on Oracle Blogs See other posts from Oracle Blogs or by mark.ms.smith
Published on Fri, 11 Mar 2011 14:18:36 +1000 Indexed on 2011/03/11 8:15 UTC
Read the original article Hit count: 556

Filed under:

Anyone who has tried to manage Coherence nodes or tried to cache results in OSB, will appreciate the new functionality now available. As of WebLogic Server 10.3.4, you can use the WebLogic Administration Server, via the Administration Console or WLST, and java-based Node Manager to manage and monitor the life cycle of stand-alone Coherence cache servers. This is a great step forward as the previous options mainly involved writing your own scripts to do this. You can find an excellent description of how this works at James Bayer’s blog. You can also find the WebLogic documentation here.

As of Oracle Service Bus 11gR1 (11.1.1.3.0), OSB now supports service result caching for Business Bervices with Coherence. If you use Business Services that return somewhat static results that do not change often, you can configure those Business Services to cache results. For Business Services that use result caching, you can control the time to live for the cached result. After the cached result expires, the next Business Service call results in invoking the back-end service to get the result. This result is then stored in the cache for future requests to access. I’m thinking that this caching functionality would be perfect for some sort of cross reference data that was refreshed nightly by batch. You can find the OSB Business Service documentation here.

Result Caching in a dedicated JVM

cache_sampleThis example demonstrates these new features by configuring a OSB Business Service to cache results in a separate Coherence JVM managed by WebLogic.
The reason why you may want to use a separate, dedicated JVM is that the result cache data could potentially be quite large and you may want to protect your OSB java heap.

In this example, the client will call an OSB Proxy Service to get Employee data based on an Employee Id. Using a Business Service, OSB calls an external system. The results are automatically cached and when called again, the respective results are retrieved from the cache rather than the external system.

Step 1 – Set up your Coherence Server
Via the OSB Administration Server Console, create your Coherence Server to be used as the results cache.

coherence_config

Here are the configured Coherence Server arguments from the Server Start tab. Note that I’m using the default Cache Config and Override files in the domain.

-Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -Dtangosol.coherence.override=/app/middleware/jdev_11.1.1.4/user_projects/domains/osb_domain2/config/osb/coherence/osb-coherence-override.xml -Dtangosol.coherence.cluster=OSB-cluster -Dtangosol.coherence.cacheconfig=/app/middleware/jdev_11.1.1.4/user_projects/domains/osb_domain2/config/osb/coherence/osb-coherence-cache-config.xml -Dtangosol.coherence.distributed.localstorage=true -Dtangosol.coherence.management=all -Dtangosol.coherence.management.remote=true -Dcom.sun.management.jmxremote

Just incase you need it, here is my Coherence Server classpath:

/app/middleware/jdev_11.1.1.4/oracle_common/modules/oracle.coherence_3.6/coherence.jar:
/app/middleware/jdev_11.1.1.4/modules/features/weblogic.server.modules.coherence.server_10.3.4.0.jar:
/app/middleware/jdev_11.1.1.4/oracle_osb/lib/osb-coherence-client.jar

By default, OSB will try and create a local result cache instance. You need to disable this by adding the following JVM parameters to each of the OSB Managed Servers:

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

If you need more information on configuring a remote result cache, have a look at the configuration documentration under the heading Using an Out-of-Process Coherence Cache Server.

Step 2 – Configure your Business Service
Under the respective Business Service Message Handling Configuration (Advanced Properties), you need to enable “Result Caching”. Additionally, you need to determine what the cache data will be keyed on. In the example below, I’m keying it on the unique Employee Id.

bs_config

The Results
As this test was on my laptop, the actual timings are just an indication that there is a benefit to caching results. Winking smile

Using my test harness, I sent 10,000 requests to OSB, all with the same Employee Id. In this case, I had result caching disabled.

no_caching

You can see that this caused the back end Business Service (BS_GetEmployeeData) to be called for each request. Thumbs down

Then after enabling result caching, I sent the same number of identical requests.

caching_on

You can now see the Business Service was only invoked once on the first request. All subsequent requests used the Results Cache. Thumbs up

© Oracle Blogs or respective owner

Related posts about Add category