Friday, September 28, 2012

Oracle BPEL Engine (SOA Suite) Diagnostics - Parsing low level request stats

Parsing Low-Level Request Stats



This blog entry is in continuation to Francis blog entry http://thesoaman.blogspot.com/2012/06/using-bpel-performance-statistics-to.html which talks in detail about the use of low-level statistics provided by BPEL Engine of Oracle SOA Suite for diagnosing performance-related issues for projects involving BPEL processes. As promised to Francis, here are some details that might be useful while parsing the low-level request stats. Sorry took some time to put this out – better late than never!

As the request enters BPEL engine it is first handled by delivery service. This layer persists all incoming asynchronous requests are in the database. The request is then passed on to BPEL Engine (or generic name Cube Engine) for further processing.
Low-level request stats can provide insight into average taken by various engine layers (latency) as it flows through the delivery service and engine. The actual execution of request happens in invoke-method and the individual activity execution can be found by looking for stat with key actual-perform.

Wednesday, July 25, 2012

Golf Tournament - 5th SS Bajwa

Couple of years back (Aug, 2010) played my first Golf Tournament and playing with a partner we finished 3rd. It was 5th SS Bajwa Golf Tournament organized by Kang Brothers in memory of their late uncle. The tournament format was two man Scramble. Playing back tee and Flight A (handicap 12 or under), we shot 3 under 69. Tournament home page - http://www.ssbajwa.com/index.html
 



Monday, July 23, 2012

Good Magazine


A few years back I got introduced to Good Magazine during one of the Consumer Marketing class I took. Ever since I'm hooked on to this great magazine. In this blog entry, I'll review this magazine and outline what I like about it.

Good Magazine, henceforth referred to as GOOD (as they like to call them as), sets up their mission in their ‘about’ section on their website. It says and I quote “GOOD is a collaboration of individuals, businesses, and nonprofits pushing the world forward. Since 2006 we've been making a magazine, videos, and events for people who give a damn."
Further their website defines their magazine as following in a very powerful and no-nonsense manner:

In a world where things too often don’t work, GOOD seeks a path that does. Left, right. In, out. Greed, altruism. Us, them. These are the defaults and they are broken. We are an alternative model. We are the reasonable people who give a damn. No dogma. No party lines. No borders. We care about what works--what is sustainable, prosperous, productive, creative, and just--for all of us and each of us. This isn’t easy, but we are not afraid to fail. We’ll figure it out as we go.

BPEL SE (Java CAPS) Monitoring Console

The last major task I did during Sun days was the building of a new Monitoring console for the BPEL Service engine. It was a complete rewrite from scratch of the console to provide insight about running BPEL SE. Note that this product was not released as open-source as part of the project open-ESB. Anyway, was wanting to write a blog about it for a very long time, just did not sit down to do it. Working with the documentation group we prepared a user guide but was not able to found any online link to share (old Sun docs links have moved). Anyway, this blog would capture some of that.

The new monitor console is an independent web application that was developed using open JSF framework Icefaces (http://www.icesoft.org/) which provides rich ajax enabled components. It runs on Glassfish server in a Glassfish ESB environment. Here are some excerpts from the user guide:

The BPELMonitoring Console monitors your BPEL Service Engine's applications and business
processes, allowing you to quickly discern the health of your system. The console is designed to provide a comprehensive view of your current applications. It provides a real-time representation of your business processes throughout the life cycle of each instance. The console also enables you to drill down to see what is happening with any specific application or process. It allows you to track down a business process based on customer information and to suspend and resume an instance for system maintenance.
The BPEL Monitoring Console runs as an independent web application and can run from a
remote computer. The console runs on the Glassfish server in a GlassFish ESB environment.

Sunday, July 22, 2012

BPEL SE (Open-ESB) Scalability Support


Scalability Support for BPEL Service Engine

The complete solution for the scalability of system is co-coordinated work of all the constituent parts; service engines, binding components and NMR. When the system starts maxing out heap space, the full GC kicks in and ‘pauses’ the JVM. This has a debilitating effect on system performance. A properly designed system is expected to know the expected usage and provide enough resources for capacity utilization.

The specific problem in the context of business process orchestration involving interactions with external systems is the in-determinism in terms of responses for the outbound requests. When that happens the business process instances continue to hog memory and new requests for such processes would only aggravate the memory situation.

Since BPEL SE is the only component currently in the open-esb that can be configured to be used with a database, we can leverage this to provide scalability for long-running processes. Also, the BPEL SE scalability solution needs to be thought in conjunction with its recovery and monitor capabilities. In my opinion, the best solution is to have a very large heap space and nothing else would be required. But, if that cannot happen, at least with 32-bit boxes, and also for other reason s scalability solution as outlined here for BPELSE can help.

The scalability solution can be called in phases based on early detection and also following some patterns of business process behavior. The complete solution may be complex, but taking a trivial approach may not solve most (if not all) the use cases. Since the primary mechanism for the scalability solution of the BPEL Service Engine is passivation, there will be some overhead associated with that happens. Also, in order to minimize the overhead and not be overly aggressive about it, an attempt will be made to do the passivation in phases with each phase providing incremental relief.


BPEL SE (Open-ESB) Clustering Design


Architecture and Design Document of BPEL Service Engine Support for clustering & Failover


Clustering:

To achieve Scalability and High Availability for BPEL Service Engine running in JBI environment. A cluster is defined as a set of engines running in multiple JBI Environments running in Application Server Cluster. When a business process needs to be scaled to meet heavier processing needs, you can deploy Service Assemblies to BPEL Service Engine running on the application server cluster to increase throughput.

Failover:

To achieve transparent failover of running instances of the failed engine in cluster over to any live engine for continued processing.


BPEL Service Engine (Open-ESB)

Post oracle acquisition of Sun Microsystems, open source project Open-ESB has been end-of-lifed. There is no active development happening on Open-ESB core or components (the service engines or binding components). The project pages are also being moved around. To facilitate continued access to these pages, in next series of posts I will reproduce some pages or some of the features that I actively worked on, including but not limited to Clustering and Failover, Scalability and new monitoring console for BPEL Service Engine.

Wednesday, July 18, 2012

Two-Phase Memory Management/Scalability Solution for Stateful Business Processes

Reproducing article I first published on dzone on Nov 11, 2010


Introduction


The popularity of web services and large scale adoption of SOA by industry has led to increasing use of business processes for integration/orchestration. Such processes in the context of Work-flows, B2B, B2C or EAI involve complex, stateful interactions that can span organizational and functional boundaries. A slow or non responsive interaction can cause the instances to pile up and such runaway process can potentially max out the available heap space. This can have adverse impact on performance and can have very debilitating effect on system and may lead to out of memory and system crashes.


Scalability Challenges


Is your business process running out of memory/not scaling well? Memory requirements depend upon concurrent sessions, process variables, complexity of flow, timers, and so on. This coupled with fact that for loosely coupled stateful long running interaction with business partners, processes cannot make any assumptions regarding responses time from interacting partners. So, how do you determine memory resources for your production loads in advance? How do you scale when you are limited by your memory resources? How do you design a scalability solution for processes that does not require many configurations and is self-managing? If you are confronted with these questions, you are not alone. While working on BPEL Service engine part of open source project Open-ESB (https://open-esb.dev.java.net/), managed by Sun Microsystems (now Oracle), we set out to provide built-in support as best-effort approach to help our customers to overcome some of these challenges.


Funny world of Improv


Completed my first ever improv class yesterday at Westside Comedy and wanted to share my experience. First off, I had general idea about improv, but had no clue about the dynamics and other details. Improv is more than just telling jokes on the fly. Wikipedia defines Improvisation as “the practice of acting, singing, talking and reacting, of making and creating, in the moment and in response to the stimulus of one's immediate environment and inner feelings. This can result in the invention of new thought patterns, new practices, new structures or symbols, and/or new ways to act.” My primary motivation in joining this class was to practice improv speaking on any topic and do it in a manner that is funny and engaging. The skills learned can be applied in any field ranging from public speaking to general every day conversation in formal or informal setting.
It was fun and enriching experience. Through the course of 6 weeks, we went though many activities and games to learn the tools and structure of improv. It is not just about cracking jokes; to be successful in this, you need to be constantly aware of what is going on - be active listener, and work as team and support each other. It was fascinating to see how playing a mundane act with varied emotions can bring so much laughs. What you learn here can be so contrary to how we normally think, such as - if you feel weird, do it more - if you are stuck, say the truth. You learn to avoid arguments and go with the flow. It’s all about relationships filled with emotions. Sounds like valuable life lessons!!
All in all, while this class might not have made me any funnier, it definitely taught me bits and pieces about how to keep a conversation engaging and entertaining. Also, confidence to face audience and not be conscious whether I might be sounding puerile or preposterous - as it might not be a bad thing after all. Finally, confidence to crack jokes, even if no one is laughing!

Finding Missing Value


Often times it is required to find a missing number in large set, say of 32-bit integers (n), in random order. For example, integer numbers used as keys for some records and the missing key(s) could be reused for new allocations or to find missing data/holes in the data-set. 
So, what is optimal way to find the missing value. Well, it depends. We have to further define the constraints. What is the size of data-set, how much virtual memory do we have - can the numbers be loaded into memory? What if we are constrained by the amount of memory but we have plenty of disk space. How about the case where we have some (limited) memory to partially fit in the input in memory. The optimal solution, as you might have guessed, depends on these constraints and this blog present various techniques that can be used to find the missing value for each of these cases. Mainly, following solutions for following three cases will be discussed. Also, we will note the running time for each.
  1. Plenty of virtual memory
  2. Very little virtual memory but plenty of disk space
  3. Some memory

Kth Order Statistics/Partial ordering – Using Tournament Algorithm (optimized)


This blog entry is in continuation to my previous entries about finding 2nd Minimum and more generic Kth Order statistic in linear time (asymptotic) using dynamic programming principles and tournament algorithm in particular. Here I talk about slight variation to the tournament algorithm implementation that results in better runtime performance. Using modification to our earlier logic we can find Kth min without any need for back-tracking. We still need to build the tournament tree, but the new mechanism results in better runtime efficiency and is also simpler to implement (compared to what we did earlier).

The Idea

The idea is that if keep track of nodes a given node is compared at each level as the node progress in tournament method, we have sufficient information to deduct Kth minimum without ever back tracking the tournament tree. To find second minimum, we inspect the root node’s defeated-node-list for the minimum value. Once we have second minimum; for finding third min we combine second min node’s defeated-node-list to minimum (root) node's defeated node-list and find the third minimum from the resulting set. This method may need some additional processing while constructing tournament tree (and perhaps little more memory), but it is worth the effort as it saves us from backtracking tournament tree to find Kth min.

Finding Kth Minimum (partial ordering) – Using Tournament Algorithm


Ok, so far in my previous blog entries about finding 2nd minimum (and for repeating elements) I wrote about efficient algorithm for finding second minimum element of an array. This optimized algorithm takes O(n + log(n)) time (worst case) to find the second minimum element.
So, the next obvious question is - how can we find Kth minimum element efficiently in an unsorted array where k ranges from 1 – n. How about partial sorting - efficiently returning first K minimum values from unsorted array. As you might have guessed it, we can achieve this by extending the logic used before and tweaking our implementation little bit. We can find Kth min (or return partially sorted list of K min elements) in O(n + klog(n)) time.

Finding Second Minimum with REPEATING elements in array


I posed few questions at the end of my earlier blog entry about finding 2nd minimum element. Let’s tackle the first question – how to efficiently find second minimum when we have repeating elements in the array. 
Let’s say we have following scenario. Notice that the minimum element, 1 appears twice in the list.
As before, we will use tournament method to first find the minimum value. Also note that while progressing through successive levels, the root elements, if repeating, will be compared against each other at some point. 
Using tournament method we obtain the minimum as below. 

Finding Second Minimum element in an Array


How would you find minimum element in an array (non-repeating random numbers) ? Well, the solution is obvious, you pick first element and compare with the next and keep the lower of the two. Do this again by comparing result of first comparison with the third element. Repeat this process for the complete array and you got the answer. So, in all for n elements you would need to do n-1 comparisons to find the minimum element (Figure 1).

Ok, the solution for finding smallest element was obvious. What if we need to find the next smallest element in an array? Well, one simple solution would be to compare the first two to select minimum and second minimum. Then pick the next element, compare with the minimum (selected in previous step) and replace it if the next element if lower. If not, compare with the second min and replace if necessary. Repeat this over the array and we have the second minimum. This algorithm would require 2n -3 comparisons (one comparison for first two elements + 2 comparisons for remaining elements of array. So 1 + 2 (n -2) = 2n -3.
What about finding 3rd minimum? The above logic would require 3 + 3(n-3) or 3n -6 comparisons.
The next question is can we do better than 2n -3 for finding second element (likewise for 3rd element and so forth). Can we not just sort the array and then just pick the 2nd value off the sorted array? Well, unfortunately that would not help either as best sorting algorithm will take nlog(n) time which is definitely more than what it would take for finding first log(n) elements using above method anyway. Well, the good news is that, yes there is a way to do better than 2n comparisons, and that is what this article is about - finding 2nd minimum in an array in efficient manner.

Oracle SOA Suite - BPEL to JMS JDeveloper Project


Sharing my quick notes on steps to create and test a JMS Project. Thought it might be useful for someone who is starting on Oracle SOA Product, part of Fusion Middle-ware. We will create a synchronous bpel process that exposes soap endpoint and then writes (invoke) the input message to a queue in the middle of business process and echoes the input message back the client using reply activity.
We will use Oracle JDeveloper and Weblogic server for the runtime. Before we create the process in jdeveloper, we will first configure the JMS Queue in Weblogic server. Here are the steps.


Euler Problem 18 and 67


Recently, I found this article on Java Lobby - Best Interview Question I've seen. This article was referring to a question posted by one recruiting agency.
While we can argue that it really is the best question, but you have to give credit to the ingenuity in-terms of creating very simple but automated means of finding out if you got the correct answer for the puzzle. The recruiting agency created one email account with id equal to the correct answer. So, if you got the correct answer, you will not have your email bounced back.
Anyway, the problem sounded interesting to me so thought of giving it a shot. After a few bounced emails, I finally got the correct answer as confirmed by the successful delivery of my mail (no bounce back).
Reading through the comments for the posting, I found out about Euler Project which is hosting a lot of similar puzzles. The puzzle number 18 and 67 happen to be similar to the one posted by the recruiting agency. If you dig the Internet you will find a lot of explanations and solutions to the puzzle.
The problem defined here is also called the Critical Path Method (CPM), used in project management for project duration estimation for the execution of a number of dependent tasks.
One way to solve such a problem is brute force. But that would not scale beyond a certain depth of the tree. For example, noting the following comment from Euler Problem 67 (a tree with a depth of 100 rows):

My First Scratch (Golf)


Today, I went out for quick round of golf  with one of my colleague (after work) at nearby 9-hole Rancho Duarte Golf Course. It is nice little executive course (par 31), with par-3 and par-4 holes and fast greens. It was bit overcast, but nice breeze made the playing all the more enjoyable.
I played at this and other courses many times before and came close to shooting par, but could never actually do it. Since I started paying golf around 3 and half years back, it was my dream to do a scratch round (for those not familiar with golf, scratch is term used to define a round under par; for more info refer this page). Well, today was that day. I shot total of 30 for one under par (-1). I hit 8 of 9 greens in regulation and finished the round with back to back birdies.


BTW, I was lucky to score hole-in-one once at Los Feliz Golf Course around 2 years back.  
My next goal - Scratch for a regulation course. It is not going to be easy..













Crazy week of Hikes - 8 Days, 5 hikes, 44 miles, 13,000 feet elevation gain


It was crazy the last 8 days for me. Spent a lot of hours in the high country hiking San Gabriel Mountains. In all did 6 peaks ranging from 1,625 ft to 8,985 ft. It all started with a strenuous hike last Sunday with Triple T hikes and ended with a somewhat easier hike to Sturtevant Falls. Here are some details about my last 8 days of hikes:


Bear Canyon Hike (California)

This Saturday, I participated in a very scenic hike in a group of 16 hikers. This was about 9 miles and mostly downhill hike. Using carpooling and splitting cars at the start and endpoint, this hike was done as one-way. After parking our cars at Switzer’s Falls Starting Point (exit on 210 and drive approx 9 miles on Angeles Crest Hwy), we packed into few cars and moved up to the start point of the hike at Eton Saddle fire road gate (approx 6.5 Miles - keep going north on Angles Crest and take Mt. Wilson Red Box Road at approx 4.1 miles and drive 2.4 miles on Mt Wilson Red Box road) to hike back down to Switzer’s Falls Starting Point car parking.

Mt. Wlison Hike (California)


Though famous for its observatory, Mt. Wilson houses number of radio and television antennas and is famous landmark and conspicuously visible to anyone driving in San Gabriel valley and beyond. At around 5,700 ft, this is one of the highest peaks in San Gabriel Mountains. You can in-fact drive up to Mt. Wilson following Angeles Crest Highway (around one hour drive from LA downtown).
Day after thanksgiving, along with 4 other very experienced hikers; we started this hike from City of Sierra Madre at intersection of E. Mira Monte and Mt. Wilson Trail. It is long and strenuous hike through wilderness with steep elevations and passing through some shade and lot of sun. Make sure that you carry plenty of water (at lest 2 liters) and food as there is no source of drinking water on this long hike. We were maintaining quite brisk pace. Having never experienced a long hike this one, it was really tough for me and was getting slower and slower progressing through the hike and had virtually no energy left at around 3/4 of the onward hike. I had to stop and break away from the group. Fortunately, making slow and continued progress, I was able to join the group at Manzanita Ridge point. It took us approx 4 1/2 hours to reach the top. After resting for approx 30 - 40 mins at Mt. Wilson we made our way back and with few short stops made down in approx 3 hours. The total hike was around 15 miles (round trip) with approx 4500 ft. of total elevation gain.
Here is the hike log:
8:25 am      Start (89 E. Mira Monte Ave., Sierra Madre, CA)
9 am          First Water - 1.5 Mile (break 10 mins)
10 am        Orchard Camp (2,960') - 3.5 Mile (stopped for lunch approx 15 mins)
11:30 am    Manzanita Ridge - 5 miles (break 10 mins)
                  Mt. Wilson Toll Road (5.5 Miles)
1 pm          Mt. Wilson Summit (5,710') - 7.5 Miles
4:30 pm     Return -  15 Miles

3 New Date/Time Comparison Extension Funtions for Netbeans BPEL 2.0 Editor



Originally posted on: 
Checkout 3 new BPEL Extension functions for date/time comparisons. These functions are implemented as extension functions as BPEL 2.0 (which uses XPath 1.0) standard function list does not include these. The syntax and definition for these is derived from XPath 2.0 spec (http://www.w3.org/TR/xquery-operators/). These new functions being -

sxxf:dateTime-less-than  (Less-than comparison on xs:dateTime values)
sxxf:date-less-than      (Less-than comparison on xs:date values)
sxxf:time-less-than      (Less-than comparison on xs:time values)
Where the namespace prefix sxxf stands for "http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/XPathFunctions" which need to be defined in the process definition.

Two New BPEL Extension funtions - getBPId() and getGUID()

Originally posted on:

BPEL Service Engine, part of Open ESB Project recently added two new Extension functions to return the Process Instance Id and a New GUID respectively. These functions are available in BPEL Mapper Pallet in Netbean's BPEL Editor.  So, what might be good use of these functions. Of top of my head, I can think of the following:
- For creating unique Correlation Keys: Often times state-ful interactions are required between interacting partners exchange asynchronous messages. BPEL describes correlation mechanism to make such interaction possible. These correlation tokens are embedded in the messages that are passed around in such interactions. Any of these newly added getGUID() or getBPID() extension functions can easily be used to create such correlation tokens.
- For Auditing and Debugging purposes: getBPID() that returns the process instance id can be used for these purposes.
Following is the usage of these funtions, as shown in the example below:
      <assign name="Assign1">
         <copy>
            <from>concat('BPID = [', sxxf:getBPId(), '] GUID = [', sxxf:getGUID(), ']')</from>
            <to variable="NewWSDLOperationOut" part="part1"/>
         </copy>
      </assign>
where the namespace prefix sxxf stands for xmlns:sxxf="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/XPathFunctions" which need to be imported into your BPEL Definition file. Of course, Netbean's BPEL Editor comes with powerful mapper (screenshot below), that makes usage of these funtions like a breeze.

Santa Anita Loop Hike


Originally posted on Aug 21, 2008

This Tuesday, I did another scenic hike through small portion of Santa Anita Canyon in San Gabriel Mountains. This is excellent hike for summer with plenty of forest cover all through the trail. We were group of 9 and started off around 6 pm and finished the loop in less than two hours with few minutes stop at Hodgees camp site. It was pretty dark when we reached the tail end of the hike.

With easy access from San Gabriel valley, this trail is a loop starting from Chantry Flats (exit Santa Anita on I-210 and drive around 6 miles towards mountain to parking structure), with plenty of shade, passing through several creek crossings and few campsites. The hike actually starts up the hill with steady gain and then goes down (around 400' feet lower then tail-head) before finally going up. About two miles into this trail you pass through Upper Winter Creek Junction Signpost for trails to Mt. Wilson (another 4 1/2 miles) and Mt Zion (1/8 Miles). Further down around 1/3 of a mile you reach Hodgees Campground. This limited facility small campground under dense forest cover has restroom and water. Interestingly, I was told that this campsite has highest recorded rainfall (26 inches in one day) in whole of California (could not confirm this fact though). Another two miles you reach Roberts Campground and the lowest point in the hike. Overall, the hike has moderate elevation gain rate throughout except at the end when you hit paved road of about half a mile with steep elevation of around 400 ft.

Here are quick facts about this trail.

Distance: 5 Miles
Altitude: Trailhead 2200', Minimum-1800 , Maximum 2900', Total Gain/Loss -1100'
Difficulty: Beginner
Trail Condition: Good
What should you carry (at minimum): One bottle of water

Configuring BPEL SE Clustering on Non-Clustered Glassfish

Originally posted on:


[Updated July 1, 09: Note: The following solution is not supported in Glassfish ESB and is merely suggested as workaround for testing/verification purposes only. Please check release notes for Glassfish ESB for support of cluster profile. This workaround may not work in future releases.]

Glassfish comes with Cluster Support (Refer this page for instructions for installing Glassfish Cluster).

Multiple BPEL SE's running on standalone or clustered Glassfish can be configured to behave as if participating in cluster by configuring some system properties. All the cluster related support of BPEL SE, such as Fail-over, and correlation support will be available in this mode.

Following two System properties need to be configured:
com.sun.jbi.bpelse.isClustered=true
om.sun.jbi.bpelse.isClustered.engineId=<engineid>
NOTE: The engine id need to be unique to each BPEL SE.


How to Enable Java Debugger for Glassfish Cluster Profile


Originally posted on

Monday Jul 07, 2008



Often times things work fine for Single Instance App Server, but when the same application is put on cluster mode, the results are not as expected. For glassfish, the steps I use for enabling the debugger for cluster mode is slightly from non-cluster mode. Also, there is one extra manual step involved to make the debugger work.

First for Clustered Glassfish, you can easily enable the debugger using the Admin Web GUI. Here are the steps involved. (for the purposes of illustration cluster name and instance name  is assumed to be cluster1 and instance-ONE)

Log on to Admin GUI (http://<server>:4848/index.jsf).

  1. Navigate to Configurations -> cluster1-config -> JVM Settings
  2. On the General Tab, Enable the Debug Check Box and for the Debug Options Text Box remove the port number. Leave it blank (Figure 1).
  3. Shutdown node agent (asadmin stop-node-agent)
  4. Go to domain.xml for the cluster instance (\\openesb\\glassfish\\nodeagents\\cluster1-nodeagent\\instance-ONE\\config) and enable the debug-enabled flag to true for the cluster1-config (Figure 2). 
  5. Start the node agent (asadmin start-node-agent) and look for the debug port in the server log (Figure 3). The server log will print the port to use.

Echo Mountain Hike


Originally posted on

Sunday Jul 06, 2008


Living in the San Gabriel Valley (foothills of San Gabriel Mountain Ranges) for over three years now, I almost had feeling of guilt for not exploring the nearby mountains. San Gabriel mountains form barrier between Greater Los Angeles Area and Mohave Desert. At 3,067 m (10,064 ft), the highest peak in the range is Mount San Antonio, aka Mt. Baldy.

Wednesday, July 04, 2012

Invoking Synchronous Services Dynamically (In-Parallel) using BPEL (forEach Parallel)


Moving contents over from https://blogs.oracle.com/malkit/entry/dynamic_services_composition_in_bpel
FIRST PUBLISHED: Jun 06, 2008

Background

Before delving into the details of Dynamic Service Composition, a quick background is appropriate to introduce some of the terms and concepts. Please jump to next section if you are familiar with Web Services - WSDL/BPEL and Netbeans SOA Pack.
A web service is defined using a WSDL. WSDL makes important distinction between port (concrete communication endpoints) and PortTypes (definition of operations and messages structures thereof). This sort of description allows reuse and cleaner implementations. 

In BPEL, PartnerLinks are used to model partner relationships. Each Partner Link is characterized with a single or two roles (in case both partners are interacting with each other, especially asynchronously). A role is linked to the PortType as defined in the service WSDL. The key to understanding is that from the perspective of business process, PortType(s) forms the interface that defines the operations (with the associated message structures) that this service (BPEL Process) exposes or how the partner service is viewed (from BPEL Process). Each PortType, in turn can be exposed as one or many services each bound to same of different communication protocols (using binding definition of WSDL).

Netbeans SOA Pack contains modules that can be used to create business process for orchestrating your web services. SOA pack with Glassfish Bundle comes with very powerful BPEL Editor and runtime support. The runtime for BPEL Engine is based on JBI - Java Business Integration Specification. This specification defines a framework to support two major functions in the world of integration – Service Engines (such as BPEL Engine) and Binding Component (such as HTTP, for communication protocol specific handling). Large number of SE's and BC's are being developed under project Open-ESB. Also check out the developer wiki resource page.




Currently I am working in Fusion middle-ware division of Oracle. I came to Oracle through Sun Microsystems acquisition where I was part of Web Services division and worked on BPEL Engine which was part of their supported product Sun JAVA Caps and open source project Open-ESB - ESB implemenation based on JBI Specification. Prior to Sun, I was working in small company named Seebeyond developing eInsight Business Process Manager, part of ICAN Suite. Sun acquired Seebeyond in 2005.
So why blog? Well many reasons but mostly to share insights about products and technologies I am working on. Also a place for me to think, reflect and connect. I love playing and watching sports in general and Golf in particular. Being a consummate learner I am always learning new skills, subjects and refreshing the ones I already know about. Also, plan to use this blog to share my passions, new found knowledge, skills and ideas. Hope you will find some of it interesting and informative. 
While I had this blog account for many years now, I never really used it. Was mainly blogging on site hosted by my employer Oracle. You can find it here - https://blogs.oracle.com/malkit/.
For better search and accessibility, in next series of blog entries I plan to reproduce the contents from my oracle blog to this site. Also, while working on open source project - Open ESB at Sun, we were maintaining bunch of public wikis. After Oracle's acquisition these wikis have been moved so it might be hard to find those pages. I also plan to copy those project pages that I created or projects I directly worked on while working on project Open-ESB to this blog site.

Understanding JavaScript Prototypal Inheritance for Java developers

Inheritance is a fundamental concept in programming languages. However, it is implemented differently in Object-Oriented Languages such as J...