Review at amazon: Business Process Driven SOA Using BPMN and BPEL

Oracle released its BPA Suite, which is based on ARIS.
Now there is the first book on the market, talking about the round trip from BPMN to BPEL and back:

Its cover states:

This book is for CIOs, executives, SOA project managers, business
process analysts, BPM and SOA architects, who are responsible for
improving the efficiency of business processes through IT, or for
designing SOA. It provides a high-level coverage of business process
modeling, but it also gives practical development examples on how to
move from model to execution. We expect the readers to be familiar with
the basics of SOA.

The examples provided are not detailed enough for really start developing but this book was not written for developers..
For more details read my review at amazon.de (in german ;-)


Comparison: BPEL 1.1 vs BPEL 2.0

The BPEL 2.0 specification was released in April 2007. Now 1.5 years later only a few BPEL engines have implemented this standard. Oracle had released a white paper about BPEL 2.0 and future SOA Suite releases in October 2006. Now we have still to wait for 11g to get BPEL 2.0, but is this really a problem?
What is the difference between BPEL 1.1 and 2.0 or what is the difference between Oracle's BPEL PM and BPEL 2.0?

Here the new feature of BPEL 2.0 (from wikipedia):
  • Improved data access (XPath)
  • Improved dta manipulation (XSL transformations)
  • New activities (forEach, repeatUntil)
  • Enriched fault handling (rethrow,termination handler)
  • Advaned message operations (join-style correlation set)
  • Syntax makeovers (switch to if-else, terminate to exit)
In Oracle's BPEL PM there is already the new XPath extension built in and XSLTs can be used via <transform>. The Syntax makeovers are not really new functionality.
Rewriting forEach and repeatUntil into while is possible, but sometimes painful and the enriched fault handling will make some workflows more readable.
So it will be nice to get BPEL 2.0 but it is no major problem to stay with BPEL 1.1 and the Oracle specific enhancements....


Installing Oracle JDeveloper 11g

I just installed an Oracle JDeveloper 11g . It was very easy, but i was suprised by the new installer, which replaced the simple unzip. Here some screenshots of the installation process:

Only one detail after all these nice pictures:
The connections tab supports only Oracle (BEA) Weblogic 10g R3. Deployments to OC4J is not supported but will be incorporated later. BPEL is missing, too..


The lost (collaxa) BPEL-tutorials: Tutorial 3: Manipulating XML Documents in BPEL

There is a nice tutorial for all xml beginners. You can download this document here.
I just copied some headlines from the table of contents, which should be known by every BPEL developer:

  • Manipulating Arrays
  • Statically Indexing into an Array
  • Determining Array Size
  • Dynamically Indexing into an Array
  • Dynamically indexing by Constructing an XPath at Run Time
  • Dynamically Indexing with the BPEL getElement Function
  • Merging Arrays
  • Appending New Items to an Array
  • Converting From a String to an XML Element
  • Differences for RPC-style WSDL Files

Initializing a Variable with Literal XML was shown in 103.XMLDocuments.
To start with arrays you can try the tutorial 112.Arrays.

The size of an array can be evaluated with this expression:

<from expression="ora:countNodes('output', 'payload','/invoice/lineItems/item')"/>
<to variable="lineItemSize"/>

To convert excaped XML to a variable the following snippet is very useful:

<from expression="ora:parseEscapedXML('
<item xmlns="http://samples.otn.com"sku="006">
<description>sun ultra sparc VI server</description>
<to variable="escapedLineItem"/>

The opposite can be done with ora:getContentAsString().


The lost (collaxa) BPEL-tutorials: 112.Arrays

If you do not know how to iterate over an array, you should read this tutorial:

To model an array with XML you have to create the following XSD:

The element line-item is modelled like this:

<element name="line-item" type="tns:line-itemType" maxOccurs="unbounded"/>

Here the BPEL of this collaxa-tutorial:

If you take a look at the sample code, it works like this:

  1. create a xpath-expression via concat
  2. use this xpath-expression inside another expression
  3. increment the iterator-variable
That's all:

is evaluated at runtime to:
and inserted

Another way is to write just
which is much easier...

One nice thing with this 112.Arrays example is, that after deployment you find the BPELConsole already filled with parameters:

How can this be achieved? After deployment you can use the checkbox "Save Test" for the first invoke and after that you get this parameters each time filled in.
In this example just take a look at the bpel.xml:

Inside the bpel.xml you can put the default data for the BPELConsole inside this CDATA:
<property name="defaultInput"><![CDATA[


Truecrypt with ext3 on Linux

Yes, first i thougth this would be easy, too.
But after launching the truecrypt application

i got quickly to this page:

This pull-down menu has only the choices for FAT or NONE filesystem... So let's move to the command line:

hades:/home/schroff/packages# truecrypt -t --create
Volume type:
1) Normal
2) Hidden
Select [1]:

Enter volume path: /dev/sda3

Encryption algorithm:
1) AES
2) Serpent
3) Twofish
4) AES-Twofish
5) AES-Twofish-Serpent
6) Serpent-AES
7) Serpent-Twofish-AES
8) Twofish-Serpent
Select [1]:

Hash algorithm:
1) RIPEMD-160
2) SHA-512
3) Whirlpool
Select [1]:

1) FAT
2) None
Select [1]: 2

Enter password:
Re-enter password:

Enter keyfile path [none]:

se type at least 320 randomly chosen characters and then press Enter:

Done: 0.370% Speed: 10.7 MB/s Left: 15 minutes

Done: 100.000% Speed: 4.1 MB/s Left: 0 s
The TrueCrypt volume has been successfully created.

hades:/home/schroff/packages# truecrypt -t /dev/sda3

But then i got this kernel error:

Oct 28 22:02:26 hades kernel: Modules linked in: loop af_packet fglrx(PF) iphone(F) binfmt_misc ipw2200 tun vboxdrv ppdev parport_pc lp parport ipv6 button
ac battery vfat fat dm_snapshot dm_mirror dm_mod sr_mod sd_mod snd_intel8x0m sbp2 scsi_mod eth1394 joydev mousedev tsdev snd_seq_dummy snd_seq_oss snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq snd_intel8x0 snd_ac97_codec rtc ac97_bus snd_pcm_oss snd_mixer_oss ohci1394 snd_seq_device snd_pcm snd_timer i2c_i801 psmouse snd soundcore snd_page_alloc firmware_class pcspkr ieee1394 ehci_hcd uhci_hcd usbcore intel_agp shpchp pci_hotplug agpgart evdev unix lzf
Oct 28 22:02:26 hades kernel: CPU: 0
Oct 28 22:02:26 hades kernel: EIP: 0060:[<f8fff99c>] Tainted: PF VLI
Oct 28 22:02:26 hades kernel: EFLAGS: 00010202 (2.6.21 #3)
Oct 28 22:02:26 hades kernel: EIP is at transfer_none+0x70/0xc4 [loop]
Oct 28 22:02:26 hades kernel: eax: d0fd9000 ebx: 3a748000 ecx: 00000080 edx: cc210000
Oct 28 22:02:26 hades kernel: esi: 3a748000 edi: d0fd9000 ebp: 00000200 esp: cc211e5c
Oct 28 22:02:26 hades kernel: ds: 007b es: 007b fs: 00d8 gs: 0000 ss: 0068
Oct 28 22:02:26 hades kernel: Process loop0 (pid: 11324, ti=cc210000 task=e5e3b030 task.ti=cc210000)
Oct 28 22:02:26 hades kernel: Stack: 00000000 1ee4eecd c7569c05 00000000 00000200 cc211f50 cc211fa0 f8ffe2e6
Oct 28 22:02:26 hades kernel: 00000000 c121fb20 00000000 00000200 01411f00 00000000 00000000 c1f4e900
Oct 28 22:02:26 hades kernel: 00000200 c0fa9000 f8fff92c 00000000 c121fb20 00000002 c1f4e900 823e0000
Oct 28 22:02:26 hades kernel: Call Trace:
Oct 28 22:02:26 hades kernel: [<f8ffe2e6>] lo_read_actor+0x9e/0xdc [loop]
Oct 28 22:02:26 hades kernel: [<f8fff92c>] transfer_none+0x0/0xc4 [loop]
Oct 28 22:02:26 hades kernel: [<c0146131>] do_generic_mapping_read+0x19f/0x46b
Oct 28 22:02:26 hades kernel: [<c014644b>] generic_file_sendfile+0x4e/0x60
Oct 28 22:02:26 hades kernel: [<f8ffe248>] lo_read_actor+0x0/0xdc [loop]
Oct 28 22:02:26 hades kernel: [<f8fff583>] loop_thread+0x38b/0x404 [loop]
Oct 28 22:02:26 hades kernel: [<f8ffe248>] lo_read_actor+0x0/0xdc [loop]
Oct 28 22:02:26 hades kernel: [<c0323712>] __sched_text_start+0x52a/0x5e2
Oct 28 22:02:26 hades kernel: [<c01463fd>] generic_file_sendfile+0x0/0x60
Oct 28 22:02:26 hades kernel: [<f8fff1f8>] loop_thread+0x0/0x404 [loop]
Oct 28 22:02:26 hades kernel: [<c0128c8b>] kthread+0xa0/0xc9
Oct 28 22:02:26 hades kernel: [<c0128beb>] kthread+0x0/0xc9
Oct 28 22:02:26 hades kernel: [<c010486f>] kernel_thread_helper+0x7/0x10
Oct 28 22:02:26 hades kernel: =======================

After some reading i found, that this i due to a bug in 2.6.21... So i had to download a new kernel, do my patches (like tuxonice), compile and get my fglrx driver for my ATI X600...
But after one evening, the next attempt:

hades:/home/schroff/packages# truecrypt -t /dev/sda3 --filesystem=none

hades:/home/schroff/packages# truecrypt -t --volume-properties
Slot: 1
Volume: /dev/sda3
Virtual Device: /dev/loop0
Mount Directory:
Size: 10.0 GB
Type: Normal
Read-Only: No
Hidden Volume Protected: No
Encryption Algorithm: AES
Key Size: 256 bits
Block Size: 128 bits
Mode of Operation: XTS
PKCS-5 Iteration Count: 2000
Volume Created: Tue Oct 28 20:11:48 2008
Header Last Modified: Tue Oct 28 20:11:48 2008
Data Read since Mount: 4 KB
Data Written since Mount: 0 B

hades:/home/schroff/packages# mkfs.ext3 /dev/loop0

and after that i was able to mount the volume with

hades:/home/schroff/packages# truecrypt -t /dev/sda3


The lost (collaxa) BPEL-tutorials: 102.InvokingProcesses

After some non-BPEL related blog entries, the next BPEL tutorial. I started with the tutorials 101 (setting up your environment), 103 (XML fragments), 104 (sync BPEL), 105 (async BPEL). Now i think it is time to look how BPEL processes can be invoked.
Let's start with invoking via Perl:

To get this perl script running the helloWorld (101) has to be deployed. It very easy, just type

and just check, that the process was really invoked in the BPELConsole

That's all. You only have to import

use LWP::UserAgent;
inside the Perl script and create a SOAP request.

This example was only the invocation of the asynchronous HelloWorld without waiting for the response. In the same directory you can find the
invokeCreditRatingService.pl. This scripts waits for the response of the BPEL process, but you have to deploy the CreditRatingService:

You can find it in $ORACLE_HOME/bpel/samples/utils/CreditRatingService (There is a CreditRatingService.jpr inside, so you can open it in your JDeveloper).
Invoking this BPEL via perl will show the following output:

And as you can see the perl script gets the result (560) of the BPEL...


Comparison: Pausing/Resuming VM with VMWare and VirtualBox

This comparison was done on a Samsung X20 laptop. (So on bigger machines the numbers will look different!).
Some words to the different concepts of VMWare and VirtualBox:

  • Pausing: Freezing all processes & hibernating the VM
  • Resuming: -
  • Pausing: Freezing all processes
  • Save machine state: Hibernating the VM
  • Restoring: Reverse function of Save machine state
  • Resuming: Reverse function of Pausing
These differences show, that with VirtualBox, you are able to only freeze all processes and resume them without any I/O for persistency of this state. This is done immediately.
The other transitions last about 9s on VMWare and 5s on VirtualBox (Linux VM with 256MB RAM and no workload).


Using VMWare Images with Virtualbox

After installing VMWare 2.0 and VirtualBox 2.0.2 i wanted to make a comparison of both virtualization engines. I thought about installing the same guest in both software stacks. But this seemed like too much work ;-). So i started to google about migrating a guest from VMWare to Virtualbox.
I found this helpful blog.
So it is very easy. I created a new Virtual Machine like shown in my posting about VirtualBox and at the step Virtual Hard Disk

i chose Existing...

and added the vmdk-file from the debian-guest, which i used with VMWare Server 2.0.
So i thought, everything was ready but after pressing start the system stopped with:

Waiting for root file system

After a short search, i found out, that VMWare prefers guest systems with SCSI hdd controllers and VirtualBox can only mount IDE hard disks. But this was not really a problem. I started the guest on VMWare and changed the following lines:
in /boot/grub/menu.lst
from kernel /boot/vmlinuz-2.6.18-4-686 root=/dev/sda1 ro
to root=/dev/hda1
and i changed in /etc/fstab all entries with sda to hda. After these changes, the guest bootet without a problem in my VirtualBox.
But it is clear, that with this configuration, it will not run on VMWare. So i changed in the .vmx file all entries form scsi0:0 to ide0:0 and in the .vmdk file the parameter adapterType=lsilogic to ide. Now the guest os is able to start in both virtualization servers.
So everything is ready for a comparison and there is an easy way for migrating from VMWare to VirtualBox, if i want to move...
If you to know how to configure networking via GUI, read this posting.


Virtual Box 2.0.2: first contact...

After my last posing about VMWare Server 2.0 i decided to try an additional virtualization machine. The first solution, which i found was virtual box, which is freely available as Open Source Software under the terms of the GNU General Public License (GPL).

For my debian notebook i fist downloaded the provided package (http://www.virtualbox.org/wiki/Linux_Downloads) and the installation is straight forward:
dpkg -i virtualbox-2.0_2.0.2-36488_Debian_lenny_i386.deb
and the output is:
Setting up virtualbox-2.0 (2.0.2-36488_Debian_lenny) ...
Adding group `vboxusers' (GID 127) ...
Messages emitted during module compilation will be logged to /var/log/vbox-install.log.
Starting VirtualBox kernel module: done.
Starting VirtualBox host networking: done.

After that you just have to type VirualBox and here we go:

Just some screenshots from my first created virtual machine:

When i started i thought that i had an old win95 cdrom...

The RAM size is RAM + swap (which is exactly 3584 MB on my laptop)

After these configurations the Console shows the first virtual machine and i powered it on.

And first a little bit advertising for the main contributor of VirtualBox:

And after this, i noticed, that there is only a win98 cdrom left... But for a first test - insert and:

And one hour later i was able to login:

One very nice thing is the user manual, which you can download here, which is excellent.
After testing this, it is now really difficult for me to decide, if i stay with VMWare Server or if i should use VirtualBox... Let's run both some days and then - time will tell...


WMWare Server 2.0: at first glance

Last week i downloaded the new VMWare Server 2.0 to see what has changed from 1.0.x to 2.0. I installed it on Debian Linux on my laptop and the installation process was like in version 1 the same text based procedure.

The major upgrades for my pattern of usage are:
  • 8 GB RAM usable for a guest operating system
  • 64-bit operating system support
  • Web based VMWare console
  • USB 2.0 support
If you want to know, what are the complete features take a look here.

So let's start with some screenshots. You can access the VMWare console via http://localhost:8222 or https://localhost:8333.

Under commands (right tab) you can click create virtual machine or add virtual machine to inventory.
I added a virtual machine and to this file browser:

In the middle tab of the WMWare Console you can see this virtual machine and in the commands window, you can click Power on.

If you choose the virtual machine in the inventory tab and not in the middle window, you can see many details for this virtual machine like performance graphs and the hardware:

So let's go ahead and start the machine. But this was suprise! In the console window you get this message:

And now? If you installed VMWare Server 2 you can find at
a online help. This will tell you that clicking on Install plug-in installs a plugin in your firefox, which enables you to use your browser as console to the virtual machine:

And voila after restarting your firefox, you will see this message

It is a little bit confusing that the console opens in a new window, but after a short wait:

There are some other blogs about VMWare Server 2 beta like "VMWare Server 2.0 is a step back" or "VMware Server 2.0 beta 2: Erfahrungsbericht unter Vista-..." which can show some other aspects of the new version, like size of the software, memory consumption, etc...

Yes, there are some things which could be better, but if you really want this in production quality, you have to move the other (non-free) VMWare products ;-).


Oracle BPEL PM New features

Some days ago i made my first tests with BPEL PM If you are interested for a full list of the new features you should read the official release notes. Here the summary from Oracle:

  • Improved Visibility of Engine Threading Model
  • Improved Statistics Collection
  • Minimize XML Coding Errors
  • Rescuing Lost Instances
  • Automated Recovery Agent
  • Collection of Support Information
  • Deployment Plan
I will show a few screenshots to the first three topics, but for an impression of, this should be enough:

In there is a graphical representation to monitor the threading model of the BPEL PM. In the old one, you only got the numbers without a history:

This gui should be very helpful for performance tuning and finding bottle necks.

Another enhancement is the analytics tab placed in the processes view. There you can investigate for each activity of the BPEL process the times for
  • count
  • avg-cpu
  • min-cpu
  • max-cpu
  • avg-wall (this number is always the same like avg-cpu)

And you can investigate the sources for the activities by clicking on the + symbol.

At processes view Oracle added another tab "Validate XML". This is nothing special, just a validation of the XML against the XSD of the BPEL process, but it is nice to have it inside the BPEL Console, so you can stay at the BPEL Console and debug what is wrong with you entrance message.

At the BPEL Console these three enhancements have been introduced from Oracle. In the release notes you can find:
Goal is to make BPEL Console the only place you'll need to go

There are some other enhancements (not at GUI level), maybe i will write about them in another posting...


Oracle Configuration Support Manager: "next generation MetaLink expirience"

In a posting two months ago i wrote about a new tab in Oracle's MetaLink. Now Oracle changed the login behaviour of https://metalink.oracle.com.
Now you get a new login page where the default is now the "My Oracle Support".

The login is a little bit slow (>10s) but it shows this nice animated picture ;-)

But you can step back to the "Classic MetaLink" if something is not working. For viewing one Service Request i had to step back to the classic metalink, because of some encoding problems:

In addition cut & paste with firefox 3.0 and Linux does not work with this web based application, so i will use the classic one. But hopefully Oracle can fix all these errors in the next weeks...


Oracle Forums: New Feature(s)

The new forums.oracle.com site is now online and running. Since the first preview (see this entry) they changed some functionality:

Now there is not only the discrimination between member and active member. Now you can achieve 5 levels from Newbie to Guru. As you can see, you have to answer 20 questions correct to get to the second level called Journeyman.
At the thread overview a new column was added which shows, if you can get points for answering the thread and if this thread was already answered correct. The green star indicates a right answered thread:

Inside the thread there is the green star at the beginning:

and the correct answer is marked, too:

Last but not least the person, who gave the answer, gets the points:

Here the official statement from Oracle about this points:

What are "rewards points"?
It is possible for you to reward an answerer 5 points for a "helpful" answer or 10 points for a "correct" one (or none at all). Users who accumulate certain amounts of points reach different levels of recognition (see legend). In this manner, users who offer consistently helpful or correct answers raise their standing in the community. (Note: in order to award points, you must identify your post as a "question" first - which is set as default.)

One feature was removed from the forum:
The first column of the thread overview indicated "New content since your last visit" or "updated content since your last visit". I think this feature broke the forum the last time, because you have to save for each visitor all states of the threads he visited...

This "correctly answered" feature is very helpful for all forum users. And the race for the top users in the forums is now open again and we all have to start from zero again ;-(


Oracle forums: Relaunch....

This week the forums.oracle.com was relaunched. The first launch failed after a few hours (read here). But after a few days with the new feature now there is again:

Let's see, if the will step back to the old design again or if they can fix it....