Monday, June 19, 2017

Oracle BPM Suite 12.2.1.2 Quick Start: Installation, Configuration, BPMN 2.0 Business Process Deployment and Testing

Oracle BPM Suite - a solution from Oracle for Enterprise Business Processes modeling with leveraging the BPMN 2.0 notation. Integrated development environment - JDeveloper is used for the modeling process. Oracle provides a special distributive of the solution for developers - Quick Start - which contains the Oracle WebLogic application server, BPM Suite, and JDeveloper.


This article highlights how to download Oracle BPM Suite 12.2.1.2 Quick Start from the edelivery.oracle.com web-site, install that on a developer's PC, create the first business process using JDeveloper, configure the integrated WebLogic domain (BPM Suite, SOA Suite, and Oracle Service Bus are included, and Apache Derby is here for database management), deploy the business process on this domain and start a test instance of the process.


Friday, June 9, 2017

DVM Validation on a SOA Suite Domain Causes High CPU Utilization: Analysis and Solution


Problem statement


Once upon a time, my colleagues asked me an interesting question. After each update of the MDS on a large production environment, a significant performance degradation is observed. CPU load on the SOA Suite servers is increased, respectively.

The system automated leveraging Oracle SOA Suite makes extensive use of Domain Value Maps (DVM), which is intended to map from one vocabulary used in a given domain to another vocabulary used in a different domain. For example, one domain may represent Russian rubles as 'RUR', while another domain may represent those as '810' (see ISO 4217). Business users can edit DVMs at runtime using Oracle SOA Composer.

And while DVMs are not so large everything works fine, but if there are some large DVM files (> 200-300 KB), the above strange behaviour may be observed.

Let's have a look at the thread dump collected during the observation.

"[ACTIVE] ExecuteThread: '57' for queue: 'weblogic.kernel.Default (self-tuning)'" #159 daemon prio=9 os_prio=2 tid=0x0000000066bbd800 nid=0x28ac runnable [0x0000000079188000]
java.lang.Thread.State: RUNNABLE
at oracle.xml.xpath.XPathChildAxis.getNodeList(XPathAxis.java:600)
at oracle.xml.xpath.XPathStep.evaluate(XPathStep.java:1102)
at oracle.xml.xpath.PathExpr.evaluate(PathExpr.java:808)
at oracle.xml.xpath.ComparisonExpr.evaluate(XSLExpr.java:1743)
at oracle.xml.xpath.XSLExprBase.testBooleanExpr(XSLExprBase.java:514)
at oracle.xml.xpath.AndExpr.evaluate(XSLExpr.java:524)
at oracle.xml.xpath.XSLExprBase.testBooleanExpr(XSLExprBase.java:514)
at oracle.xml.xpath.AndExpr.evaluate(XSLExpr.java:524)
at oracle.xml.xpath.XSLExprBase.testBooleanExpr(XSLExprBase.java:514)
at oracle.xml.xpath.AndExpr.evaluate(XSLExpr.java:524)
at oracle.xml.xpath.XPathPredicate.filter(XPathPredicate.java:349)
at oracle.xml.xpath.XPathChildAxis.getNodeList(XPathAxis.java:627)
at oracle.xml.xpath.XPathStep.evaluate(XPathStep.java:1102)
at oracle.xml.xpath.PathExpr.evaluate(PathExpr.java:808)
at oracle.xml.parser.v2.XMLNode.selectNodes(XMLNode.java:2762)
at oracle.xml.parser.v2.XMLNode.selectNodes(XMLNode.java:2722)
at oracle.tip.dvm.sdk.util.XMLUtil.isDVMDocumentValid(XMLUtil.java:211)
at oracle.tip.dvm.entity.DVMRTObject.validateDVM(DVMRTObject.java:202)
at oracle.tip.dvm.entity.DVMRTObject.(DVMRTObject.java:130)
at oracle.tip.dvm.DVMManagerImpl.getDVMRTObject(DVMManagerImpl.java:217)
at oracle.tip.dvm.DVMManagerImpl.lookupValue(DVMManagerImpl.java:133)
at oracle.tip.dvm.LookupValue.lookupValue(LookupValue.java:95)
at oracle.tip.dvm.LookupValue.lookupValue(LookupValue.java:252)
at sun.reflect.GeneratedMethodAccessor1815.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at oracle.xml.xpath.XSLExtFunctions.callStaticMethod(XSLExtFunctions.java:115)
at oracle.xml.xpath.XPathExtFunction.evaluateMethod(XPathExtFunction.java:422)
at oracle.xml.xpath.XPathExtFunction.evaluate(XPathExtFunction.java:347)
at oracle.xml.xslt.XSLValueOf.processAction(XSLValueOf.java:152)
at oracle.xml.xslt.XSLNode.processChildren(XSLNode.java:559)
at oracle.xml.xslt.XSLTemplate.processAction(XSLTemplate.java:278)
at oracle.xml.xslt.XSLStylesheet.execute(XSLStylesheet.java:706)
at oracle.xml.xslt.XSLStylesheet.execute(XSLStylesheet.java:665)
at oracle.xml.xslt.XSLProcessor.processXSL(XSLProcessor.java:401)
at oracle.xml.jaxp.JXTransformer.transform(JXTransformer.java:578)
at ...

Friday, April 21, 2017

About Service Oriented Architecture on an Enterprise

In my opinion, one of the main, if not most important, goals of SOA deployment on an Enterprise is to let to the Enterprise's information systems the ability to make continues improvement and to align technology and business via the application of service-orientation. Ideally, the systems have to be maintained by the IT division of the Enterprise, not by the developers, it's not a normal situation when a new application can be connected to the Enterprise's IT landscape only by a set of consultants who work for the developer of the deployed SOA solution.

The following four conditions may ensure the achievement of stated goals:

  1. Changing the integration strategy from point-to-point to enterprise service bus (ESB).
  2. Ensuring the independence from message formats.
  3. Writing documentation well enough.
  4. Technical and business monitoring of every message lifecycle.

Tuesday, March 28, 2017

Asynchronous Web Services with Oracle SOA Suite

The top web services based approaches for asynchronous interactions among enterprise applications are described in the article. The common used during Oracle SOA Suite leveraging method that based on a callback service and the WS-Addressing specification is shown. A number of examples of asynchronous web service creation and client generation using the JDeveloper IDE are considered.


Introduction


Time to time, when we as architects integrate some enterprise applications, asynchronous communication has to be taken into account. Asynchronous communication means a service consumer isn't blocked for a response from a service provider, it just gets an acknowledge and continue doing its work. There are two popular approaches to implementing asynchronous communication among web services:

  • polling refers to actively sampling the status of a being processed request by a service consumer as a synchronous activity.

  • callback refers to a method provided by a service consumer. When the service provider have accomplished the operation processing, it calls the consumer. In this approach, the service consumer simultaneously works like a callback methods service provider as well.

Oracle SOA Suite supports the second approach. An implemented leveraging the suite service, returns a 202 Accepted HTTP response on each request from a consumer. This response means the request is accepted and the service is going to handle it. A new instance of the composite application is created. The instance can be in the Running state during a very long time, it is usual even some human reactions are involved in the process. A callback method provided by the service consumer is invoked at the end of the process.

Monday, October 17, 2016

Message transformation in Oracle Service Bus using XSLT and XQuery

You can only feel the main power of Oracle Service Bus by leveraging its message transformation capability. Today we will have a look at this capability and how to configure an XML-to-XML mapping based on XSLT or XQuery. Let's upgrade the example described within the previous entry.

Wednesday, September 14, 2016

Using Dynamic Routing in Oracle Service Bus

Oracle's flagship Enteprise Service Bus - Oracle Service Bus (OSB) - is based on the following conceptions:
  • Business Service wires a service provider to the bus

  • Proxy Service wires a service consumer to the bus

  • Message Flow connects a ProxyService to a single or multiple business services. Some message flows may be very complicated and contain routing, transformation, parallel execution and other actions. Physically a message flow is specified inside a proxy service.



Let's learn how to configure the Dynamic Routing action. Dynamic routing is a kind of the Content-based Routing pattern, which is used when the BusinessService endpoint is required to be determined at run time, an alternative to Static Routing, which is used when the BusinessService endpoint is established during design time.

Thursday, August 18, 2016

Why Co-location Does Matter to Gain High-Performance Java EE

Introduction


Various types of JDBC drivers are implemented by various coders, it means the JDBC specification designed by the JCP team only defines the various interfaces, referenced as JDBC API, but each coder/implementer can implement these interfaces in their own ways.

Based on the ways, we can classify the implementations into four types.
  1. JDBC Driver - Type 1 (JDBC ODBC Bridge)

    This is an approach wherein the implemented class in Java makes calls to the code written in Microsoft languages (native), which speaks directly to the database.

  2. JDBC Driver - Type 2 (Part Native Driver)

    This is an approach wherein the implemented class in Java makes calls to the code written by the database provider (native), which speaks directly to the database.

  3. JDBC Driver - Type 3

    This is an approach wherein the implemented class in Java makes calls to the code written from application server providers, which speaks directly to the database. More exploration on the way the Java Driver interacts with the Middleware is required here. This kind of driver is extremely flexible since it requires no code installed on the client and a single driver can actually provide access to multiple databases.

  4. JDBC Driver - Type 4 (Thin Driver)

    This is an approach wherein the implemented by the database provider class in Java speaks directly to the database. In other words, it is a pure Java library that translates a JDBC request directly to a Database specific protocol.

The most used in the distributed world is the JDBC Type 4 driver, but in the z Systems world - the different point is. The purpose of the article is to show how significant the performance of a Java EE application can be improved just by enabling the right JDBC driver.