The Aquarium posted some lately stats about the usage of the Glassfish application server.
Nice to see it’s coming close at some points to the JBoss application server (i think the one which is his closest competitor).
At the 10th of february a nice heap when Sun announces his “Sun GlassFish Portfolio”.
If we take the stats of some other big competitors in the charts we’ll notice a few differences.
When we take oracle as and ibm websphere together with glassfish and jboss i guess the last 2 still got a long way to go, but they are growing!
comparing all 4
trend1
trend2
trend3
comparing glassfish and jboss
trend4
trend5
trend6
At this moment IBM and Oracle are still the big players on this market, let’s see what GlassFish will do in the near future since it’s getting more popularity lately.
Resources
my blog
Posted February 17th, 2009 by Eric Elzinga | 2 Comments »
From the Oracle forum and from the comments on my article about Oracle BPEL Fault Policy Management i get a lot of questions about how to let the framework handle my own custom defined ‘business faults’.
In certain situations the default set of faults defined by Oracle aren’t suited enough and you need to define your own faults.
If we look into the examples which got supplied by Oracle we can see an example over here. In this example they defined their own NegativeCredit-fault.
The Oracle BPEL Fault Policy Framework by default only handles the faults which are getting returned on an invoke-activity.
So we have our own custom fault and the knowledge we can only let this fault getting catched by the framework by use of an invoke.
So we need atleast for this testscenario 2 bpel processes. One mainprocess which calls a subprocess, and this subprocess will throw the custom business fault.
This fault will get propogated back to the mainprocess and in here we will be able to let the framework handle the fault.

BPEL Processes
Mainprocess

Subprocess

Just a simple invoke of the subprocess from the mainprocess. The subprocess with throw a fault, and this fault will be catched in the mainprocess.
The fault to be thrown
From the console start the mainprocess and wait till it comes back with a fault message

Click the activity to see the thrown fault
[2009/02/13 16:24:41]
"{http://nl.iteye/integration/faults/business}BusinessFault" has been thrown.
<businessfault xmlns="http://nl.iteye/integration/faults/business">
<part name="payload">
<businessfault xmlns="http://nl.iteye/integration/faults/business">
<faultcode>999</faultcode>
<faultmessage>Something went wrong!</faultmessage>
</businessfault>
</part>
</businessfault>
Ok nice!
So the custom fault we defined in the subprocess reaches the mainprocess.
Now we need to config the fault policy framework so it will get active on our custom business fault.
From the fault we pasted above we need the faultname (BusinessFault) and the namespace (http://nl.iteye/integration/faults/business).
Edit /bpel/domains/default/config/fault-policies/DefaultPolicy.xml and add the next fault :
<faultname xmlns:flt="http://nl.iteye/integration/faults/business" name="flt:BusinessFault">
<condition>
<action ref="ora-human-intervention"/>
</condition>
</faultname>
For testing we will just let this fault getting handled by human-intervention.
Now restart the components
opmnctl stopall
opmnctl startall
Now start the mainprocess again and wait till it fails.

It looks like the framework got active (activity yellow marked) on our custom business fault.

Go to the activities-tab

And click the activity which faulted.

Now we can edit some of the values and let the subprocess get re-invoked.
So, at this moment we’re able to throw our custom business faults and let them getting catched by the framework.
Since the fault is only getting catched on the invoke of a partnerlink, we aren’t able to let our custom business fault getting throwned to the process in which we maybe want do something with the data for which we actually throwed the custom business fault.
So maybe we want to stay in the subprocess and somehow get the custome business fault thrown inhere, let the framework catch it and update the values of this subprocess with new values an re-execute the subprocess.
The next solution will get this done.
The mainprocess won’t get changed but in the subprocess we will invoke a new process called AllBusinessFaults.
New subprocess 2

AllBusinessFaults

The AllBusinessFaults will throw the custom business fault we ‘request’ back on the invoke in this subprocess. Now it wil get catched by the framework and we will be able to change the values of the subprocess instead of the mainprocess.

By using the AllBusinessFaults bpel service like a sort of composite service, we can add the custom business faults in it and throw the one we would like to get thrown.
This will work if the collection of custom business faults isn’t that big.
I’m sure there will be better solutions for this, but for the scenario i wanted to describe in here it was good enough for me.
Question
In the examples i provided i don’t use the fault-part of a synchronous invoke to propegate the soap-fault back to the caller, i just throw the fault. The bpel engine itself throws the fault back to the first-level. Whats best practice on this one ?
Sources
BPEL Sources (First part of article with mainprocess/subprocess)
BPEL Sources (Second part of article with mainprocess/subprocess/allbusinessfaults)
Resources
Oracle BPEL 10.1.3.3 Fault Policy Management
my blog
Posted February 14th, 2009 by Eric Elzinga | 3 Comments »
I’m currently working on a proof of concept for testing the mule esb for a local goverment.
It’s a nice case to become familiar with a new esb since i mostly did my development on the Oracle ESB/ALSB.
Good too see some differences in concepts/techniques and connectivity and what the open source world has to offer for service busses.
Though the mule-source.org gives me some nice documentation/examples, i couldn’t find any updated information about development in some ide.
I already noticed Mule-IDE, but this version wasnt really actively updated, till i noticed a new update on this blog today. Though you can get most work done by running some mule maven archetype and eclipse for the editting of the xml/java, i’m still curious if the ide gives some extra functionality.
Information
Download
Screencast
Will check it out to see if it’s usefull for my mule development.
I will mirror a few of my posts from my own blog which can be found overhere.
Posted February 12th, 2009 by Eric Elzinga | No Comments »
Forgetting to store your changes in version control can get developers into nasty problems when they don’t have a backup of their work and someone has replaced their changes. When the changes are not to long ago you can try to recover them by using flashback query.
set head off
spool /tmp/lost_package_pck.pck
SELECT text
FROM all_source AS OF TIMESTAMP TO_TIMESTAMP('15-JAN-2009 10.55.10.000000')
WHERE name = 'LOST_PACKAGE_PCK'
ORDER BY line
/
spool off
This prevents time spend searching a backup (if there is one there) or even worse re thinking/writing the changes.
Posted February 9th, 2009 by Theo van Arem | No Comments »
This post is about a small project I wrote when working on a web application. I called it ‘insight’ as that is basically what it does. When used it ‘captures’ requests when you navigate your web application and on a later time you can watch into these requests to find out about your parameters/request/session/application scope. It’s useful to see how especially session (size) changes over time. It is meant for development and can be integrated into any web application. So in summary its a simple helper application for us developers. As I found it useful in certain circumstances, I think it might be useful for others too. Insight can be downloaded from the JaValid site
Below are a few screen shots of what it looks like.


Configuring is easy as the following web.xml snippet shows:
<?xml version = '1.0' encoding = 'UTF-8'?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee">
<description>Empty web.xml file for Web Application</description>
<filter>
<filter-name>InsightFilter</filter-name>
<filter-class>org.javalid.insight.filter.InsightFilter</filter-class>
<!-- Optional parameters (values are defaults) -->
<init-param>
<param-name>insightStoreRequestBefore</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>insightStoreRequestsCount</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>InsightFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>InsightServletOutput</servlet-name>
<servlet-class>org.javalid.insight.servlet.InsightServletOutput</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InsightServletOutput</servlet-name>
<url-pattern>/insightservlet</url-pattern>
</servlet-mapping>
</web-app>
That’s it, the filter now ‘logs’ anything ending in *.do requests. And the results you can find on the url /yourwebapp/insightservlet. Have fun!
Posted February 2nd, 2009 by Martijn Reuvers | 2 Comments »