Darwin IT

Code Generation with XSLT

Tue, 2008-07-15 02:01

Last week I read a nice article of my con-colleague Lucas Jellema about “PL/SQL Table-to-Java Bean (and Data to Java Bean Manager) generator - useful for data driven demos without database ” at the AMIS-blog on:http://technology.amis.nl/blog/?p=3272.

In this blog Lucas writes how he generated java-code from Pl/Sql. It drew me back to a little project I did for myself and my former employer as a BusinessDevelopment-job. I wanted to make a simple method to enable a convential custom development application, like a Designer/Developer Forms application, like we build a million times in the past. Since it is primarly aimed for the hundreds of Forms applications at our customers that are primarly build with Designer and Headstart, I could do it in pl/sql also or even create a Headstart utility for it. But for the latter option I would learn myself Headstart-utility principals again, that did not look to useful for me. Pl/Sql would do. But I would have it flexible having the ability to generate several pieces of code from one source.

The problem with the code of Lucas, that is when you see it as a problem, is that all the code generation is in pl/sql. To change the outcome would mean that you should change your pl/sql code. I would like to have a more template-based solution.

A few years ago I wrote an article on “XML using Sql” for our monthly consulting paper at Oracle. See my post: http://darwin-it.blogspot.com/2008/07/xml-using-sql.html. With this knowledge it is easy to generate XML out of the datadictionary of the database. Then based on this xml you can generate all you want using ... XSLT.

Read further (pdf).

XSLT in Java with Oracle Parser part 2

Wed, 2008-07-09 23:02
Earlier I explained how to do an XSLT transformation using the Oracle Parser: http://darwin-it.blogspot.com/2008/06/xslt-in-java-with-oracle-parser.html.
I also created a Java Swing application to do transformations. I unfortunately found that my transformations did not went as expected. I'm busy with doing an XML to HTML transformation and my HTML tags did not get transformed. It works fine when the result of the transformation is just plain text.

The problem lies in the use of a XMLDocumentFragment as a result type of the xslProcessor.processXSL XSL processing. It took me a while to find a solution, since I have the requirement that the result gets into a String.

The xslProcessor has some processXSL methods that output to for example a URL or a PrintWriter. But how to get that into a String again?

Luckily today I found the solution. You have to wrap a StringWriter into a PrintWriter. Then give the PrintWriter to processXSL. Then after closing both, you can simply do a toString of the StringWriter. It looks like this:

public String transform(XMLDocument xslDoc, XMLDocument xmlDoc) {
XSLProcessor xslProcessor = new XSLProcessor();
XSLStylesheet xslt;
String result = "";
try {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
xslt = xslProcessor.newXSLStylesheet(xslDoc);
xslProcessor.setXSLTVersion(xslProcessor.XSLT20);
xslProcessor.showWarnings(true);
xslProcessor.setErrorStream(System.err);
xslProcessor.processXSL(xslt, xmlDoc, pw);
pw.flush();
pw.close();
sw.close();
result = sw.toString();
} catch (XSLException e) {
pl(e.toString());
} catch (IOException e) {
pl(e.toString());
}
return result;
}

I adapted it to my XMLTester tool that I just uploaded here.

Object Oriented Pl/Sql

Wed, 2008-07-09 19:34
Another article that I wrote a few years ago is about Object Oriented Pl/Sql. It's also in Dutch and downloadable here.

XML using SQL

Wed, 2008-07-09 19:01
A few years ago already I created an article that explained how to generate XML using Oracle SQL. It works from Oracle 9iR2,10g onwards. It's in Dutch, but it contains step-by-step examples so maybe also usefull for non-Dutch.
You can download the article here.

Total Commander, Irfanview, Notepad++ and Open Workbench in Wine

Tue, 2008-07-08 21:16
A few weeks ago I installed Wine Doors, that helps you with installing Windows applications under Wine. I found that it should install Total Commander, my favorite File management tool under Windows. I work with it for years, even bought a license for it. Unfortunately there is a bug in Wine-doors so that Total Commander and also Irfanview do not install correctly.
Luckily it is not to hard to install those tools by hand.

First Totalcommander. Download it from: http://www.ghisler.com/. Then start the installer by typing 'wine tcmdr703.exe' in the terminal. Or start tcmdr703.exe with wine.
This installs Total commander in the default wine-bottle. By default Total Commander installs in the c:\totalcmd folder. I don't like that, so I always change it to c:\Program Files\totalcmd.
The installer then turns out have difficulties in creating the menu-items. So you have to take care with that yourself. The command that you should provide in the menu-item is: 'wine ~/.wine/drive_c/Program\ Files/totalcmd/TOTALCMD.EXE'.

Irfanview was my favorite Graphics viewer under windows. It's nice to have it under Linux too.
To install irfanview is also easy. You could install it the same way you did with TotalCommander. But I found it easier to start TotalCommander and then just doubleclick on the irfanview installer. Easy does it.

The same counts for Open Workbench. Besides Microsoft Project (that is licensed) Open workbench is the only serious project managers tool that I know. I tried a few Linux tools (Ganttproject, KPlato) but they lack some basic functionalities. Like give in how much a task costs in terms of hours and doing baselining, scheduling etc. Ganttproject however does have an export to Microsoft Project, but I did not try that. It's in java so it should work in Linux aswell as under Windows (a bat file is provided).
To install Open workbench is also very simple. Double click on it from Total Commander. It appears neatly in your menu. You should also install a Java Runtime Engine. I just installed JRE 6 update 7 from http://java.sun.com/javase/downloads/index.jsp. For me there is no need to install the complete jdk. That I have available under Linux. After installing that one under Wine Open Workbench starts fine.

Now I tried to install Notepad++. A fine ascii-editor that is much more usefull then Notepad and a real advantage to have it the default editor of Total Commander.
I first tried the new 5.0 version but that aborts with an exception. But the previous version 4.9.2 works fine.

Total Commander, Irfanview and Open Workbench in Wine

Tue, 2008-07-08 21:16
A few weeks ago I installed Wine Doors, that helps you with installing Windows applications under Wine. I found that it should install Total Commander, my favorite File management tool under Windows. I work with it for years, even bought a license for it. Unfortunately there is a bug in Wine-doors so that Total Commander and also Irfanview do not install correctly.
Luckily it is not to hard to install those tools by hand.

First Totalcommander. Download it from: http://www.ghisler.com/. Then start the installer by typing 'wine tcmdr703.exe' in the terminal. Or start tcmdr703.exe with wine.
This installs Total commander in the default wine-bottle. By default Total Commander installs in the c:\totalcmd folder. I don't like that, so I always change it to c:\Program Files\totalcmd.
The installer then turns out have difficulties in creating the menu-items. So you have to take care with that yourself. The command that you should provide in the menu-item is: 'wine ~/.wine/drive_c/Program\ Files/totalcmd/TOTALCMD.EXE'.

Irfanview was my favorite Graphics viewer under windows. It's nice to have it under Linux too.
To install irfanview is also easy. You could install it the same way you did with TotalCommander. But I found it easier to start TotalCommander and then just doubleclick on the irfanview installer. Easy does it.

The same counts for Open Workbench. Besides Microsoft Project (that is licensed) Open workbench is the only serious project managers tool that I know. I tried a few Linux tools (Ganttproject, KPlato) but they lack some basic functionalities. Like give in how much a task costs in terms of hours and doing baselining, scheduling etc. Ganttproject however does have an export to Microsoft Project, but I did not try that. It's in java so it should work in Linux aswell as under Windows (a bat file is provided).
To install Open workbench is also very simple. Double click on it from Total Commander. It appears neatly in your menu. You should also install a Java Runtime Engine. I just installed JRE 6 update 7 from http://java.sun.com/javase/downloads/index.jsp. For me there is no need to install the complete jdk. That I have available under Linux. After installing that one under Wine Open Workbench starts fine.

Now I should try to install Notepad++. A fine ascii-editor that is much more usefull then Notepad and a real advantage to have it the default editor of Total Commander.

New: the POPoToPi!

Mon, 2008-07-07 23:23
The very main reason for me to write this blog-entry is to introduce a new word: Popotopi. I would love to see this home-made word pop-up in upcoming discussions over the world. To be honest, I used another word for it: PoJo: Plain Old Java Object. The word PoPoTopI means Plain Old Point To Point Interface. I like the word, because of its cadens, how it rolls over your lips.

Ok, another reason then: to explain one of the questions I'm currently involved in. My current customer has just celebrated the first aniversary of their EAI department. That means they have been busy with integration for quite some years. Mainly on Tibco. But now they have some projects going around introducing two other ESB/Soa platforms, one of them being Oracle SoaSuite. This drives them to think about integrating the integration platforms. How to exchange services, what is the scope of one integration environment, how to define bridges etc.

Looking into this I also discovered that they have several environments of their current Tibco Platform, because of having several domains. One of the colleagues I have in this department is catagolizing the services of one of the domains. His impression is that about 80 percent is just point to point. Although most of them are neatly defined using a so-called Canonical Data Model.

Having a Canonical Data Model is nice. It's just like the Hub-and-Spoke architecture of Oracle's Industrial Archeology Artefact: InterConnect. InterConnect was technical not a very sophisticated product. But the whole idea behind InterConnect I do like still. The Common View in InterConnect, that is the Canonical Data Model, is the abstraction on message level between end-points. It is based on Logical Entities on which you map the physical entities of your Enterrpise Information Systems (EIS).

But if you conclude that 80% of your integrations is point to point then you should think about how successfull you were in implementing EAI (Enterprise Application Integration).
A coupling is point-to-point if the two end-points are not re-used anywhere. Although the coupling uses a Canonical Data Model, the business event that is based on the CDM is not re-used. The reuse and thus the advantage of this approach only pays-off when you subscribe another end-point to the business event in the hub, if you have another application publish the business event or when you decide to replace one of the end-points without modifying the CDM.

Although the couplings are based on a CDM it is very interesting to compare the different CDM's (the message definitions) of the different integrations. As said: a CDM should be based on logical entities. This Logical Entities should also be reused over the different integrations. For example: an order in the "CreateOrder" integration should be the same in the "UpdateOrder" integration.

Drilling down in to the Logical Entities, it should also be interesting to reuse parts of the Logical Entities. For example: the address of a person, a customer, a supplier or an organization, be it a home, billing or shipping address, should be allways the same in structure. Actually a person being a customer or a supplier or a TradingPartner's contactperson is allways the same in structure.

It would be very interesting to see to what extent the standardization on CDM's is put through. Honestly, it would surprise me if there are not more then one definition of whatever Logical Entity in the different interfaces.
Every coupling, integration is defined and implemented in different projects. Only if a project-member does know of the existance of a reusable artefact and/or if there is budget to make artefacts generic enough, a project might leverage the advantage of EAI or feed the potential of it.

If every Logical Entity is neatly defined only once ever, especially when it is describe in a central library of artefacts, that would be great. Then you could say that you were quite succesfull in implementing a sufficient EAI.

If not, I you can't speak of a succesfull, efficient EAI. Then, to me, you have implemented Popotopi's on a modern platform, where so-called services are not much more then simple building blocks (not services). But ask yourself and decide for yourself if it was worth the investment.

It is too bad, because a good EAI with uniquely, accurately, correctly and completely described buildingblocks, triggers, CDMs and message-object-mappings could be a very good base for the implementation of a SOA. Where a buildingblock could really be a service, a trigger could really be a Business Event in your Event Driven Architecture and the CDM's and mappings a base for your Enterprise Business Objects with their transformations.

I used to do Quick Scans on the performance of Custom Development Applications. It would be nice to do such a scan on EAI implementation to see what the impact on the implementation of SOA is in such a case. Or at least to think about it along with a customer.

Testing XSL and Xpath with Java Swing

Wed, 2008-06-25 23:45
This week I finished a first version of a little java application that I created to build and test xpath expressions and xslt stylesheets.

I was very charmed with the little tool XTrans( http://www.simxtech.com/users/zc2/xtrans/). This smart tool is extreemly small (only a few KB) and enables you to edit xslt's, load xml files and transform them with the created xslt. Unfortunately for me is that it is a windows application, based on the MSXML parser. And I've not found a counterpart on Linux yet. Oh, of course you could do a lot of that with jDeveloper or XMLSpy. Maybe even better. But XTrans is so small and if you're working with xslt's, sometimes the only thing you need is a good ascii-editor and an xmlparser. And a little driver application that helps you with driving your xml and xslt trough the xmlparser.

So I found it usefull to create my own Xsl and xpath tester application.

Besides the arguments above it was also a nice excersise to play a little with the xmlparser (I used the Oracle parser shipped with jDeveloper). Although I have experience with xml, xslt and xpath, I mainly used it from Xtrans, jDeveloper or the Oracle Database (from Pl/Sql). Not directly in Java. And it is very usefull to be able do that. For example when you need to create a custom method within an ADF application, embedded Java or Java WSIF binding in BPEL.

Last year I created two little applications to test-drive messages into Integration B2b and into Axway Cyclone (another B2B product). These little applications help you to send messages with these products based on their configuration (repository or cpa). For these applications I had to parse a CPA (Collaboration Protocol Agreement) to populate the different pop-lists. Back then I did it just by browsing through the NodeLists. I created a few wrapper classes to help me with that. But I couldn't find the proper method to execute a xpath-expression. Also that turns out to be simple, when you know how:

...
private XMLDocument xmlDoc;
...
public NodeList selectNodes(String xpath) throws XSLException {
NodeList nl = this.xmlDoc.selectNodes(xpath);
return nl;
}


Another nice side effect of these little apps is that I got me to play a little with Java Swing. Nowadays people create enterprise applications using frameworks like Oracle Java ADF, JSF, JSP, ADF Components for Java, etc. But for lots of things you don't need and thus don't want the large footprint of a Application Server. And then Java Swing is very nice. It brought me back memories of Oracle Forms, with it's triggers and so on. Also it looked very familiar, thinking back, to Borland Delphi. But that's not strange: jDeveloper originated years ago from Borland jBuilder. Back then Borland used to create smart IDE's for Turbo Pascal/Delphi, C/C++ and Java. And they were in fact all the same. Oh, how much fun I had with Turbo Pascal 5.5. You could build the world with an IDE that fitted on a single floppy.

jDeveloper enables you to 'paint' your frames and panels. And double clicking on a button creates an ActionListener that you only have to fill with a call to an appropriate method.

The two B2B-applications I created last year were my first Swing apps after years. I had to re-invent how to build up an application using Swing-components and containers. When you create a Swing project in jDeveloper it gives you an application and a class that is an extension of JFrame. That's fine if you're building a one-screen application. But if you want a multi-screen application with the different screens changeable from a menu from the same main-frame, that turns out to be unhandy.

What I did was to abstract the menu and the toolbar to separate classes to maintain. In Oracle Forms the menu is also a separate module. It's a pity that there is no graphical method to build up the menu.

Also the panels became separate classes that are extensions of JPanel. I created a little method in the main-frame, that replaces the central-content-pane with one of these panels. This method I can call from the menu.

Then I created a "resize sub-components" method in the main frame class:
private void resizeSubComponents() {
int width = this.getWidth();
int height = this.getHeight();
xmlFilePanel.resizeComponents(width, height);
xpathTestPanel.resizeComponents(width, height);
xsltTestPanel.resizeComponents(width, height);
}
that is called from the Frame's component-listener:
this.addComponentListener(new ComponentListener() {
public void componentResized(ComponentEvent componentEvent) {
resizeSubComponents();
}

public void componentMoved(ComponentEvent componentEvent) {
}

public void componentShown(ComponentEvent componentEvent) {
}

public void componentHidden(ComponentEvent componentEvent) {
}
});
This method calls the resize methods in the different panels. When the mainframe is resized or maximized the different panels get resized also. Since I have several textareas with the xml-files in it, it is handy that they grow and shrink with the main frame, maximizing the available screen area.

What I have to check out is the use of inner-frames. I read about it. I want to give each panel it's own frame within the mainframe. then you have an application that is like Oracle forms, with it's different modules within the main-window. Something like a wordprocessor that can have multiple documents open.

So Swing is very nice and very powerfull to create small applications that run everywhere. But you have to find yourself a way to split up your application in smart components that are separatly maintainable. jDeveloper does not help you much with that.

I uploaded my tool on http://www.darwin-it.nl/downloads/xmltester_v0.1.zip. Just unzip it, and then change the xmltester.sh or xmltester.bat file. In the file you see a parameter "JAVA_BASE". You should change the file path to the proper location of jour Java JRE or SDK.

OpenSuse 10.3 Kernel Update

Wed, 2008-06-25 23:35
Today the wonderfull OpenSuse Updater came with a kernel update. It's now running 2.6.22.18-0.2-default (dermined with uname -r).
Allthough that is probably great (I have no clue yet what this brings me) it got me two problems:
  • My wifi did not work any more
  • VMWare Console would not start any more
Luckily these problems turn out to have simple solutions.

Wifi
This can besolved with my former OpenSuse 10.3 post: http://darwin-it.blogspot.com/2008/05/yes-opensuse-103-on-my-laptop.html. Go to the software management in Yast. Look for the ipw???? drivers and uncheck them. Make sure that you have the corresponding iwl???? drivers checked.

VMWare
This is just as simple. Vmware is "woven" with your kernel. The command to start the console is "vmware". If you run it in the konsole, you get the message that the vmware is not configured with the current running kernel. So you have to run /usr/bin/vmware-config.pl as root.

Reverse Engineering BPEL to BPMN

Mon, 2008-06-09 05:07
As I wrote in my previous posting, I attended the Oracle BPA Suite Workshop last week in Brussels. As it goes with my thoughts, attending such a course will get my head spinning and generating all new ideas on how to use the tool, get it into propositions and where to position it in the whole IT landscape.

The last three years or so, we got into building many BPEL processes. These are mostly designed using a highly sophisticated and modern tool. It's called Microsoft Word... In about the same period a rather good alternative is developed into a great alternative: Open Office/Writer.

But what about Oracle BPA Suite. We want to use that one to do our Business Process modelling. And of course we want to have a relationship between the BPMN model and our BPEL Process. This should be great when doing impact analysis. Hey, wait a minute, this is something I missed. I hope some Oracle Product Manager reads this and puts this high on the wish-list of near-future-improvements.

To get thus far, you probably want to have your bpel-processes reverse engineered to the BPA Suite. And if possible a simple migration would be great. Well, to get the expectations right in the beginning: you can't. That is: as far as I have seen the tool. But given the current "State of the Union" I'm pretty sure I'm right.

So that's the bad side of the story. Now I probably wouldn't write this post if I have not tried it or thought further and maybe you're interested in my findings. I think it is quite possible to outline a step-approach that gives at least a connection between a BPMN model and your BPEL project. It is at leas a starting point for your reverse engineering.

I found that the step-approach consist of two phases. The bottom up-phase and then the top-down phase.

The Bottom-up phase

The bottom-up phase is, simply stated, that you create a simple BPMN model consisting of one-automated-activity surrounded by a start and an end-event. That one you'll hand over to the IT-Department and the IT-Department will merge the current bpel-process into that one. Having done that you'll end up with a BPMN-model that is of course not very usefull for modelling and documentation purposes. But it is a necessary start for the reverse-engineering process.

The phase consist of the following steps:

  1. Backup the BPEL-project, by renaming the project directory and the jDeveloper-project file to another name. For example suffix the project with "_bck". Before doing that, make sure you committed the latest changes into your version control system.
  2. In BPA Architect create a BPMN-model with the same name as the BPEL project. Also it is wise to create a proper folder structure in which you put your processes, your datagrams (Technical Terms), Application system definitions, etc.
  3. In BPMN model create a Pool with a Lane and within that a Start- and an End-event . Also an Automated Task. This Task should be of type "Abstract BPEL" (not an invoke of a service). Give the Automated Activity an input document as input and a response document as output. Of course create the proper connnections
  4. Publish it to IT (using the SOA menu).
  5. Create a new BPEL-project in jDeveloper using the BPA Server connection (I assume you know how to do that) and choose the newly created BPMN-model for it.
  6. From the source of the backuped BPEL, copy the namespaces. Replace the tns and target-namespace with the one that is in the client. Also deduplicate the namespaces.
  7. Copy the partnerlinks. Make sure there is only one client partnerlink based on the one in the backuped BPEL.
  8. Copy the rest of the project including the variables to the scope of the automated activity.
  9. Place the variables to out the sequence of the scope, the rest of the BPEL code should be within the sequence. There's probably an empty activity named the same as the Automated Activity. You can remove that one.
  10. Comment out the receive client and invoke callback-client statements. In a later step we use them to replace the generated ones in the Start and End scope.
  11. Move the input and output variables to the global scope.
  12. Move the commented receive activity to the scope belonging to the BPMN-start event and move the commented invoke/callback activyt to the scope of the BPMN-end-event.
  13. Replace the generated receive/invokes by the moved/commented ones. Mark the namespaces: they should correspond to the namespaces of the original BPEL-source. The bpel generated by the BPA-Suite connection have "tns" as a namespace. The BPEL originally created by jDeveloper have "client" as a namespace. Make sure they're both equal to the original BPEL source. They should also match with the WSDL.
    Also mark that the original ones are probably empty activities and the newly generated ones have annotations. Take care that the annotations are adapted into the resulting receive/invoke activities.
  14. Probably it is convenient to just replace the WSDL files of the new BPEL project with the original one of the backuped BPEL. Also copy al the other artefacts (WSDL's of other partnerlinks/adapters, XSD's, XSL's of transformations, etc.) to the new BPEL project. Maybe this should be done upfront.
  15. Save the project in jDeveloper.
  16. Save project to the bpa server (make sure that in BPA Architect the model is not opened).
  17. Go to the naar Architect and accept the changes from IT. For that you should deselect any detail-activity by clicking somewhere on the background of the model and the Accept and Refuse changes buttons light up.
  18. Of course try to deploy your project to the development SoaSuite and adapt possible mistakes and save the correct/deployable and correctly runnable project to both BPA Suite and your Version Control System.
The Top-Down phase
As said this will deliver you a simple BPMN model but it does consist all your technical BPEL details. In jDeveloper you could add some Abstracts in the sequence of BPMN activities and move the appropriate BPEL details to the corresponding scopes. It is however not possible to add business logic on BPMN level. You could try to rename a "locked" BPMN activity by renaming the scope. But the BPA-Suite connection will notice and refresh your BPEL source. You can only do that in the BPA suite. And that is in fact what you're going to do in the Top-Down phase. There you'll add the necessary business logic.

For each Partnerlink Invocation you'll have to add Automated Tasks with the appropriate naming, Technical Terms, Input and Output documents (resembling the input and output variables of your partnerlink-invocation) and Human Workflow activities. Of course you'll provide the necessary Business Logic.

I would suggest to do this in small steps:
  1. Add one or two Automated Tasks for appropriate Partnerlink invocation
  2. Add the necessary Business Logic Plumbing
  3. Save the model and publish it to IT
  4. In jDeveloper move the appropriate logic to the corresponding scopes and get it to work in your Development SoaSuite.
  5. Save the project in jDeveloper and in your Version Control System.
  6. Save it to BPA Suite.
Repeat these steps as often as needed to get the right granularity in your BPMN-model.
Don't change your BPMN project with all the Business Logic right away. Then it is to hard to get all the technical details moved properly ending up with a BPEL process that won't work anymore and is hardly possible to get it work ever. So add one or two Automated Activities


Conclusion
Unfortunatly at this time we don't have a smart one-click approach. Especially for big models it can be a monks-job. But I think it might be worth it. It'll get you to a neatly documented Business Process that can grow with your organization.
It might turn out that some of your BPEL is just to complicated. That your technical detailing is based on some technical choices that does not resemble the thoughts of the Business Analyst. That is not necessarily wrong from functional-perspective. But then it is not possible to get the whole out of it.
Also I'm not sure yet how to handle the invoke and receive of Asynchronous Services. But that gets sorted out.
And if you need help: just contact us through www.darwin-it.nl.

BPA Suite Workshop Brussels 04-05 june 2008

Sun, 2008-06-08 21:16
Last week I was in Belgium to attend the BPA Suite Workshop, organized by Oracle Product development. My former colleague Hugo Brandt did a nice job in introducing us into the Business Process Architect, the BP Repository and the BPA Publisher.

I must say that I was pretty tiered because of a few busy days before and the long drive from home (Amersfoort the Netherlands) to the Oracle BeLux (Belgium Luxembourg) headquarters near Brussels Airport. Which is an extra compliment for both Hugo and the BPA Suite, keeping mee interested for two days.

First after an introduction we had to install the bunch of software. I downloaded the lot from edelivery.oracle.com and found that the zips are not as straight forward as you would expect. Zip 1 contained CD1 + part of CD2, Zip 2 part of CD2 and part of CD3 and Zip3, as you might expect by now, the remaining of CD3. So you had to unzip the whole into one directory and so combining the cd-parts.

For the installation you had 3 possible topologies:
1. Business Process Architect with a local repository in Oracle Lite
2. Business Process Architect with a local repository in Oracle XE
3. A "Remote" repository in a "real" database (Oracle XE/10g/11g or SQL Server) and BP Architect.

Since I'm no enthousiastic Oracle Lite user and I had the downloads in a VM with allready SoaSuite against a proper 10g database, I choose topology 3. The installation went straight forward. Just start OracleBPA.exe from the second cd and follow the arrows (Like Asterix and Obelix in "The Odyssey of Asterix" ). Then you can install the BPArchitect from cd1.
BPA Suite needs a UTF-8 database. So if you want to use Oracle XE do use the "universal" version of XE (not the standard one). If you, just like me, want to use an 10g/11g Enterprise Edition database, it have to be a database with a UTF-8 characterset.

At the end of the course I had some difficulties in getting the BPA Publisher installed and configured correctly. It turns out that it had to be installed in the same directory as the repository and the architect. And also it was "self-wise" to install against Oracle Lite (while there is no OLite service installed). So we had to reconfigure it with note 556414.1 from metalink to get Publisher configured against a standard Oracle Database.

I was quite enthusiastic about BPA Suite. It is really a great product to capture your BPMN models and also the upper levels of the ARIS House. Since Im no Business Analyst (and at the moment I've no ambitions to become one) I've no real comparison to other tools, exept for Oracle Designer perhaps. But besides that Oracle is doing a nice job in filling in the gap between BPMN and BPEL with the BPEL Blueprinting additions.

With BPA Suite it is possible to "publish the bpmn to the IT-Department". This means that you create a BPEL Blue print from the BPA suite. This blue print can be picked up by jDeveloper with the BPA Suite plugin found at the Add-on folder on the BPA Suite cd's. With that you create a BPA repository Server connection that enables you to browse through the repository for Processes that are handed over to the IT Department. Each activity in the BPMN model will become a scope in BPEL that can be detailed by the BPEL Developer. The right XSD's have to be imported, the wsdl's/services have to be detailed and the correct assignments and/or transformation between the variables have to be added.

Then after technically detailing the bpel-blueprint to a real working bpel process the BPEL specialist can upload the project again to the BPA Suite. By doing so the process may be subject to change by the Business Analyst without loosing the technical detailing. Unless ofcourse the Business Analyst removes some activities and replaces them by others. Then the detailing of the removed activities are lost and the new ones have to be detailed again. So keep in mind that the BPA Suite is by no means a replacement for a version-control system.

Publisher is by the way a nice tool that enables the rest of your enterprise browse to the published copy of the repository. In Oracle Designer we had a Repository Object Browser which enabled you to browse with a regular internet browser to the definitions in the Designer repository (it probably still works in the latest Designer). BPA Business Process Publisher however works on an own workset that is a publishment of a part of the BPA Repository.
So you have to regularly publish the latest state of your work.

I'm now philosophizing how one could migrate existing BPEL Processes to BPA suite. It should not be too hard I think. I'm thinking of the next step plan:
  1. In BPA Suite create a new model with a start and an end activity and one automated activity in between. Give it a name that resembles the name of your bpel process.
  2. Publish it to the IT Department/Create a BPEL Blueprint of it.
  3. In jDeveloper pick-up the blueprint
  4. Merge the two projects, this probably means smart copy and pasting your exisiting bpel project and additional artefacts to the new BPA Suite BPEL Project. Leave the generated scopes of the BPEL Blueprint in tact.
  5. In the BPMN View of your process add Abstracts according to the scopes and structure of your bpel project.
  6. Distribute your bpel code over the scopes that are added during step 5. Also take care of the logic between the scopes.
  7. Upload the bpel process to the BPA Repository.
  8. In BPA Architect you'll find that the BPMN proces is locked/read only and there is a copy of it with "(1)" at the end. Architect will notify you of the fact that "IT updated your model". In the new model you have to accept the changed by IT (you can do that with the accept-changes-button in the upper right corner in the toolbar).
  9. Then you could refine the model, get the conditional logic right etc. Publish again and possibly refine the technical details.
I'ts probably a tedious job when it's about a large BPEL Process. Also I don't know yet how to cater for the Data-grams (the so-called Technical Terms) that Architect keeps as input and output for each automated activity. But I probably am going to try in the near future.

By the way, I just stated I've no ambitions to become a Business Analyst. My ambitions are more in the line of being a Technical/Integration Architect. And since February (2008) I'm certified TOGAF consultant. Until now I lacked (is that the correct English saying?) in making that known.

On Firefox, Windows-Linux migration and open all in tabs

Sun, 2008-06-08 19:36
Everyone that know me know that I'm a fervent Firefox-user. I organized my bookmarks neatly in subfolders in my bookmarks-toolbar. I also regularly backup my firefox profile and it turns out that it it is highly transportable between Windows and Linux. It's a great manner to migrate someone from Windows to Linux: let him/her install thunderbird and firefox and let these packages migrate all the mail settings and favorites from Outlook and Internet Exploder (ehm, sorry, I mean Internet Explorer). Then backup the profiles (somewhere in c:\Documents and Settings\\Local Settings\Application Data if I recollect correctly) by zipping these folders. After the installation of your prefered taste of Linux and (if not pre installed) the installation of Thunderbird and Firefox you simply unzip your Firefox and Thunderbrid profiles in the respective .mozilla-firefox and .thunderbird folders in your home folder. Start the applications and all the settings are there!

I had one small annoyance in Firefox though. And that is that in Firefox I have a subfolder for my webmail-links and one for my news-links. When I right-click on my webmail-links I choose "open all in tabs" and I get all my webmail sites opened. Really time saving. When I do the same with my news-links my webmail-pages tabs get replaced!
It turns out after a little googling that there is a setting in about:config (type "about:config" in your address-field) that solves this.
It's the parameter: browser.tabs.loadFolderAndReplace that needs to be set to false. You can do this by simply double-clicking on the parameter.
See for example (amongst others): http://mozillalinks.org/wp/2007/03/prevent-firefox-from-overwriting-your-tabs/

On Firefox:, Windows Linux migration and open all in tabs

Sun, 2008-06-08 19:36
Everyone that know me know that I'm a fervent Firefox-user. I organized my bookmarks neatly in subfolders in my bookmarks-toolbar. I also regularly backup my firefox profile and it turns out that it it is highly transportable between Windows and Linux. It's a great manner to migrate someone from Windows to Linux: let him/her install thunderbird and firefox and let these packages migrate all the mail settings and favorites from Outlook and Internet Exploder (ehm, sorry, I mean Internet Explorer). Then backup the profiles (somewhere in c:\Documents and Settings\\Local Settings\Application Data if I recollect correctly) by zipping these folders. After the installation of your prefered taste of Linux and (if not pre installed) the installation of Thunderbird and Firefox you simply unzip your Firefox and Thunderbrid profiles in the respective .mozilla-firefox and .thunderbird folders in your home folder. Start the applications and all the settings are there!

I had one small annoyance in Firefox though. And that is that in Firefox I have a subfolder for my webmail-links and one for my news-links. When I right-click on my webmail-links I choose "open all in tabs" and I get all my webmail sites opened. Really time saving. When I do the same with my news-links my webmail-pages tabs get replaced!
It turns out after a little googling that there is a setting in about:config (type "about:config" in your address-field) that solves this.
It's the parameter: browser.tabs.loadFolderAndReplace that needs to be set to false. You can do this by simply double-clicking on the parameter.
See for example (amongst others): http://mozillalinks.org/wp/2007/03/prevent-firefox-from-overwriting-your-tabs/

Soap over JMS

Mon, 2008-06-02 01:09
Last week an enterprise architect of my current customer asked me about Soap over JMS. Although I had always my questions about Soap over HTTP, I never had a talk about Soap over JMS.

To answer your curiousity (I presume) about my questions about Soap over HTTP: well HTTP is an inherently unreliable protocol. It is layered in the OSI network model on the application level. Your internet-browser that brought you my article might have to wait for a long time, and even time-out, when requesting for a page. In fact this is why I started to edit this article in a text-editor, because the blog-server and my browser did not connect properly at the moment.

But puting your soap message on a queue that is also connectable by your receiving system might give you a very welcome abstraction. Your message providing application does not have to wait until your message consuming application consumes it. Your message provider can fire and forget it (unless you choose for a request-reply topology). If the remote application is unavailible for a time-being then it can pick up the messages when it comes up again.

A few years ago I had to integrate with a BSCS billing system. Back in 2002 I think it was, they builded a new Customer Access System and by then I was surprised that they used a kind of propietry command protocol with comma delimited parameters. It was not XML what was pretty much was a standard already. Also you had to connect to this CAS server using tcp. Since our integration server was in The Hague in Holland and the BSCS System and the CAS Server in Munich in Germany I stated that I wanted to have an Oracle database in Munich in the same cabinet as the CAS Server. Then I could create an AQ (nowadays called Oracle Streams - Advanced Queueing) queuing and propagation mechanism between our Oracle Hub Database in The Hague and the Oracle Adapter Database in Munich. Between this Oracle Adapter Database I used a simple external procedure that we could call from the database and that connected over a short tcp connection with the CAS server. Since it was an internal Datacenter gigabit tcp connection it was reliable enough.
But the main distance I bridged with AQ that had all the reliability and monitoring tools that you expect from a standard Queueing mechanism.

The same applies comparing Soap over HTTP and Soap over JMS, partly. The only thing is that you have to keep in mind that HTTP is a network protocol and JMS is an API on a queueing implementation. The propagation mechanism that provided my bridge between The Hague and Munich like I sketched above is not provided by JMS but the Oracle AQ implementation. Also JMS is a Java api, so it is not as technology independend as HTTP is. For example I assume it is a little hard to natively post on a JMS Queue or Topic using .Net.
Also keep in mind that although you have a wsdl (webservice description language) in a standard form that can be consumed by your development tool, the system that is "consuming" the service in runtime has to call the jms-api's to connect to the queue and publish on or consume a message from it. Because the address is not a transparent network address but a local jms-queue. If your consuming system is far-far-away from your producing system, then you have to create a local queue on both systems and implement a propagating technology between these queues (like in my AQ-story).

For more critical notes on Soap over JMS see:
There are many productivity boosters, for example in jDeveloper, to create webservices on jms queues. It is very easy to generate a webservice on a jms Queue or an existing wsdl, as it is on a pl/sql procedure. And although most of the code, if not all, is generated, the code have to be maintained, versioned and archived in a configuration management tool, like SVN. It has to be deployed to an Application Server, tested and managed independently/seperately.
For a description on how to do it on the Oracle Application Server 10.1.3 platform see the Oracle documentation on: http://download-uk.oracle.com/docs/cd/B25221_03/web.1013/b25603/transportjms.htm

Soap Over JMS is not an industry standard as Soap over HTTP is. Maybe that is the reason that it is not as natively supported by the different tools. If I'm in the BPEL or ESB Designer in jDeveloper I would expect that I could create a Partnerlink (bpel) or Adapter Service (ESB) and simply say: here is a wsdl, there is the queue, have fun with it: create me a Soap over JMS service consumer or provider.

I'm very pro-queueing. I'm very fond of AQ because of it's simplicity, reliability and maybe most of all the simple api's I have in Pl/Sql for it. But I probably would not use Soap over JMS except when the Customer has good reasons to ask for it. For example because they do not have a Integrating tool that has an adapter to post messages on a jms-queue.

Since both provider and consumer has to be able to post on or consume from the same local queue I expect that you probably be easier of using the Oracle JMS adapter. At my customer they also have Tibco and also Tibco is capable of queueing on a JMS queue. So I would suggest creating serveral queues on both Application Servers and have the Oracle JMS adapter using it. If I must I could have an jms-adapter service in Esb and create a Routing Service based on a predesigned wsdl. This provides me a service that is invocable as a "native" webservice but puts the message on a jms queue.

And if reliability is a heavy requirement I could base the jms-queue in the Oracle Application Server on a AQ queue in an Oracle 10g Database. Then each message is reliably stored in the database until it is consumed.

But if your heterogeneous platform servers are in the same datacenter and can rely on a profound network architecture then why not use the simplicity of Soap over HTTP?

Conclusion
Soap over JMS is a very good idea, I think. But there need to be some work done on the productivity and connectivity, to be really usefull. I would not dare to say that there is no future for Soap over JMS. But I think in most cases I would need the reliability over a very long distance (like my The Hague/Munich example). If you do indeed have the same requirement (reliable messaging over a long distance) I would suggest you to take a look into the ebXML/ebMS standards. Oracle Integration B2B for example could help you with that.

XSLT in Java with Oracle Parser

Sun, 2008-06-01 22:18
Last week I was struggling with the Oracle XML Parser to get it transforming XML documents with XSL. The thing is that I want to read in my own files into a String and get the results in a String too. In fact the resulting document is not XML since I'm trying to generate Pl/Sql code from an XML document.

As always everything is hard if you don't know how to do it, but if you know then it turns out to be very simple.

First you have to read in your file. For the convenience I assume you know how to do that. In my case: I read in my XML document after I have generated it by parsing an Pl/Sql package from file. But maybe in a later phase I'm going to read it from the database.

Then you have to parse it. That's done as follows:

XMLDocument xmlDoc;
String myXmlString = "Not a valid xml";

DOMParser parser = new DOMParser();
InputSource inputStream = new InputSource();
inputStream.setCharacterStream(new StringReader(myXmlString);
parser.parse(inputStream);
xmlDoc = parser.getDocument();

Not to hard, is it? You have to do this for both your XML-Document and your XSL-Document.
The code is simply:
  1. Instantiate a parser
  2. Create an inputStream from the input XML String (an xsl-stylesheet is in fact also an xml-document).
  3. Execute the parser
  4. Get a DOM Document (Document Object Model) from the parser.
Then to do the transform I have the following method:

String transform(XMLDocument xslDoc, XMLDocument xmlDoc) {
XSLProcessor xslProcessor = new XSLProcessor();
XSLStylesheet xslt;
String result = "";
try {

xslt = xslProcessor.newXSLStylesheet(xslDoc);

XMLDocumentFragment fragment;
xslProcessor.setXSLTVersion(xslProcessor.XSLT20);
xslProcessor.showWarnings(true);
xslProcessor.setErrorStream(System.err);
fragment = xslProcessor.processXSL(xslt, xmlDoc);
result = fragment.getText();

} catch (XSLException e) {
pl(e.toString());
} catch (IOException e) {
pl(e.toString());
}
return result;
}

This piece of code does the following:
  1. instantiates a XSL Processor;
  2. create a xslstylesheet from the stylesheet in the xmldocument (that you parsed with the previous piece of code);
  3. set some parameters of the processor: XSL-version, warnings, error-stream to output errors;
  4. process the xslstylesheet, which delivers an xmlfragment (the Oracle XML parser can also output to a URI, but I want to have a string)
  5. at the end get the String document from the xml-fragment
Maybe you'll find that the Xerces parser have more native built-in functionality. I found that although I put in the XSLT2.0 version, most XSLT2.0 functionality does not seem to work in jDeveloper. But I stick with the Oracle parser simply be cause nearly all Oracle product (including jDeveloper and the database) has it. And I might want to run my code in the database. I think I saw Xerces libraries in the SoaSuite as well, but it at this moment the Oracle parser will suffice for me.

To use the Oracle XML parser you need the following imports:
import oracle.xml.parser.v2.XMLDocument;
import oracle.xml.parser.v2.XMLDocumentFragment;
import oracle.xml.parser.v2.XSLException;
import oracle.xml.parser.v2.XSLProcessor;
import oracle.xml.parser.v2.XSLStylesheet;

And of course add the "Oracle XML Parser v2" to your jDeveloper project or add the xmlparserv2.jar and xml.jar files to your class path.

Typo3 on Oracle

Thu, 2008-05-22 18:51
Yesterday I succeeded in installing Typo3 on Oracle. That is: I used Oracle Enterprise Linux and Oracle XE Database.

You might think: "Why is this so special?" And "what is Typo3 anyway?"

Typo3
Typo3 is an open source Content Management System (CMS). You can find al about it at: http://www.typo3.org/. A few years ago I was looking for a CMS for some sites I was maintaining. I found a site that listed all the different ones. Some were merly blogs but there were few "real" CMS. Actually I came on to two: Joomla (formerly Mambo) and Typo3. Joomla is a real nice CMS for smaller organizations that want a website that is simple, free and easy to maintain. It is written in PhP and mySql and that is what most ISP provide. But I wouldn't use it for large websites. Sites that have multiple front-ends/channels, for example when you want to distinguish between a demand and a delivery part with a different layout. Or when you need fine-grained acces control: several different roles that have to access different parts of the site with different access rights.

Typo3, however, supports all this and more. It can support multiple sites and recognize with what url you request a page and deliver that part of the site that belongs to that url. You can have multiple domains or sub-domains and all have different parts with different layouts from the same installation. It supports fine-grained access control in both the front-end as well as the back-end (administrator pages).

Also Joomla organizes the articles in Sections and Perspectives. And a crossreference between those determine more or less how and where they are shown from the menu. Typo3 uses an hierarchical view and builds the menu from that hierarchy. This is more intuitive, I think.
And also Typo3 has loads of extensions, in fact it installs with a lot of base extensions. And it serves extremely well an Intranet, because of the fine-grained-access-control features.

But why on Oracle?
I have learned to know Oracle Portal, one of the CMS's of Oracle. I even learned Webdb the ancestor of Oracle Portal. I don't know Stellent or Sharepoint of Microsoft of other products. But I think that for many features Typo3 can meet the commercial products.
The only thing might be that it is in PhP (well that's not a big point) but it runs by default on mySql. For most purposes this is fine, but larger organisations that want to host their website by themselves and even use it for an intranet, might want to have it run on an Oracle database. It has to scale, be high available so it should also run with an Oracle Application Server. Such organizations often allready have Oracle expertise on Database and Application Server. They have implemented backup-and-recovery policies on Oracle. They might even use the integration products in SoaSuite and want to integrate the intranet with other Oracle technology based Applications.

Some of those organizations are the Dutch local counties. A few weeks ago I read an article that 15 of them (not the smallest ones) joined eachother in a Typo3 User group:
Typo3-gemeenten maken vuist.

Ok then, How to?
Well, what I did is first create a virtual machine with Oracle Enterprise Linux 5. As you might have noticed in other articles on this blog: I use VMWare Server ... a lot. In fact all my installations I work with I do in VMWare. That makes it easy to share this with colleagues and I can quite simply reinstall my laptop. But this is not a VMWare article...

I assume that you have allready an OS installed. I also assume for my convenience that you use a Linux based one, but this should easily translate to Windows. I'll give some reference articles that also counter for Windows.
I used the following products:
I used the latest Apache 2.0 since that one is also available with Oracle Application Server. Actually the OAS by default installs the 1.3 HTTP server, but there is also a 2.0 on the companion cd's. I used the latest version available for PhP. But I used the 4.1.6 version of Typo3 since I could not get the installer-pages started of the 4.2.0 version. But that is probably due to something I did wrong myself. But 4.2.0 is basically 4.1.6 with a nicer/newer UI.

Install Apache, Php and Oracle on Linux
I used this article to install the basics: http://www.oracle.com/technology/tech/php/htdocs/inst_php_apache_linux.html. There is also a windows variant. Look for more info on the php-developer-center of Oracle: http://www.oracle.com/technology/tech/php/index.html.
Be very precise in following the instructions. It is important to compile the packages correctly. And do test the installation with the php-scripts listed.

Install Typo3
First you have to unpack the typo3 packages. You need two: the dummy and the source. If you use windows you have to get the zip-files of the two and unzip them in one directory. If you use Linux/Unix then you're better of since Linux/Unix support symbolic links. Get then the .tar.gz packages and unpack them side by side. If you have the dummy of the same version as the source (that is pretty much advisable) then unpacking them side by side will give you the proper symbolic links in the dummy-directory to the source directory. The dummy directory will in fact be your site. What I did was unpacking the two in a sub-directory cms under htdocs (/usr/local/apache/htdocs/cms). I named the dummy typo3_416 and had the directory of the source directory defaulted (typo3_src-4.1.6.tar.gz => typo3_src-4.1.6).
So the Typo3 system is then reachable with the browser using /cms/typo3_416.
Then I used the following document to do the install: http://wiki.typo3.org/index.php/Oracle.
When you then go to /cms/typo3_416 the 1-2-3 installer will start. But that one gives some problems with the database/host settings. You'd better go the basic-installer with the link at the bottom-right corner of the screen. Then do the basic checks to see if all the necessary directories are writable and then compare database.

One strange thing is that I started apache as root. That is necessary when you run it at port 80 (port below 1024). But when I do ps -ef|grep apache I see that the apache listeners are running as "nobody". So I had to make the necessary typo3 folders writable to all instead of only to owner or group.

Since I do not like an url as /cms/typo3_416 I moved the typo3 folders a level higer afterwards, removed the folder cms and named the folder typo3_416 (formally known as dummy-4.1.6) to cms.

Don't forget to make the datamodel changes to implement the named triggers and index.

Conclusions
Hopefully this will pull you and your company over the line to use Typo3 and Oracle. Typo3 is a good choice if you want to implement an intranet and find the commercial ones too expensive but mySql is not in your strategic choice of products. Also this will open up the integration of your Typo3 based intranet/internet site and your other Applications using custom-build interfaces in Pl/Sql or SoaSuite. Many extensions will put their info in the database, you might have an Form-extension that puts the information of filled-in forms in the database. On submitting a form you can have events picked up by Oracle ESB or simply a trigger in the database.

It's also quite possible to build exctensions based on pl/sql procedures you have in your Oracle Applications to show for example the current sales revenue or the number of calls in your call-center directly from your Oracle Database.

I myself have two things on my list:
  • Have Typo3 running on a Oracle 10g AS and an Oracle 10g/11g Database Enterprise Edition. Most organizations have the database on an other server then the AS/Http Server. So this will have other connect strings to use in Typo3.
  • Integrate Oracle Application Express with Typo3.

Multicast DNS in Linux

Wed, 2008-05-21 21:03
Last week I happily succeeded in finishing my OpenSuse 10.3 installation on my laptop. One of the things I had to solve was the problem that at my current customer where I work, I had problems with connecting to servers and intranet sites.

I had this same problem with Ubuntu 7.10, when I was working at another site of the same customer. I was then mentioned that it had to do with Multicast DNS that the customer's infrastructure did not support. In Ubuntu it was simply solved by disabling the system service that handled this service. I can't remember exactly where to find it (my memory is not created in the way that I photographically remember steps, but just the global procedures and how-to find's. That saves organic-memory-space I presume). But look for system services in the adminstration menu and then look for Multicast DNS and disable that.

In OpenSuse it was a little harder to find. But since I'm posting this blog you probably expect me having find it. And you're right.
  1. Go to YaST2 (Green Chameleon/Computer/Administrator Settings)
  2. Choose System/System Services (RunLevel)
  3. Find Avahi-deamon and Avahi-dnsconfd and disable them (buttons below the screen)
In the description of the deamons you'll find a remark that these services handle mDNS and service registration. I figured that mDNS probably stands for multicast-dns. And indeed googling on mDNS brought me here: http://www.multicastdns.org/.

Suspend to disk works

Sun, 2008-05-18 21:34
In my ealier post about my OpenSuse installation I mentioned that I still had an issue with suspend to disk. With help of Dean on the OpenSuse Forums I solved it.

For some reason the partitioner in the OpenSuse installer named my partitions sdb1, sdb2 to sdb5. I would expect it to name them sda*. This is maybe because I had an usb-drive attached to my dockingstation. Anyway in the file /boot/grub/menu.lst where all the menu-options are listed a the resume parameter contained a reference to sda5: resume=/dev/sda5. I changed this to resume=/dev/sdb5 and now my systems happily suspends!

My Vision on SOA, part 2.

Thu, 2008-05-15 19:02
I just realize that maybe I have to explain my earlier post on my vision on SOA. I stated that it is all about: "Don't postpone to tomorrow what you can do today".

A few years ago I had a discussion with a colleague that resulted in an article in our consulting-magazine. He asked me if I would use InterConnect for an interface that processes 1000000 records in batch every night, were the receiving application is not interested in the records real-time.
But then your only argument to use an EAI-tool like InterConnect, Tibco or ESB that the receiving application needs the application realtime.

But it results in a costly batch that has to be maintained. The batch has to fit in the batch-window. There is no reuse of the code (transformations and data-enrichments in the batch). And also the providing application is pressurized because of requirements of the remote application. When you're able to get the change-events in the source application in real-time then you have all the information at hand at the moment the event occurs. Then you can do the transformations and enrichments at that very moment. You could do that asynchronously when these actions would cause the End-user-session to be less responsive.
Doing so you can subscribe multiple applications/services to the events. Also after processing the event the publishing application got rid of the responsibility.

If your receiving application is not able to get the mutations real-time, you can collect the mutations in a staging table. And then you only need a very light batch that just processes each mutation from the staging table in the receiving application. Since all the transformations and enrichments are done at real-time the mutations are in a processable state for the batch.

When you are to soa-enable an enterprise that uses packaged apps like Oracle E-business suite or conventional (Designer/Developer) custom-apps than you may have to break up the conventional way of working with batches. Possibly you can copy and paste transformation and data-enrichment code from the batches. But big chance that you have to rebuild it with technologies as XSLT.

When you have to build or maintain a custom-app or you work as a developer at a packaged-app-provider then also keep this in mind. Try to work event-driven. See that on every mutation event you're able to put a message on a queue (for example AQ) or publish an event to an ESB-product (Oracle SoaSuite).

Oracle Workflow had the Business Event System, which is a really nice system for publishing and subscribing to events. It is AQ based and available with every main product of Oracle (database, AS). It mainly executes in the database so for custom Forms applications, especially when they're based on Designer/Headstart/CDM Ruleframe, the ideal way to expose change-events asynchronously.
Very unfortunately Oracle decided to de-support Workflow (and thus BES). It is supported as long as the product that it's shipped with is supported. So as long as Oracle DB 10g or Oracle AS 10g is supported you can use Workflow/BES.

Actually it is quite remarkable that they de-support it. Because BES used to be written in Pl/Sql but in the very latest release (2.6.3 or 2.6.4 that shipped with 10gR2) they re-build it into a J2EE container! I wonder why they did that, because soon after that the Statement of Directoy noticed the de-support. I have two possible explanations:
  1. E-Business Suite still ships with embedded workflow. Release 12 is OC4J based (R11 is still based on the formally for customers desupported old Oracle 9i Application Server version 1.0.2.2). In R12 the Oracle embedded Workflow will still be available and so the BES can be J2EE based. Also it makes it simpler to have Java-calls on events. In 2.6.2 it used some kind of D-tour-solution from Pl/Sql to java.
  2. Did you ever took a glance at the datamodel of Oracle SoaSuite ESB 10.1.3? You will see some tables of ... indeed: Oracle Workflow/BES!

Yes! OpenSuse 10.3 on my laptop

Thu, 2008-05-15 18:02
Yes! Finally I succeeded in getting OpenSuse 10.3 86_64 on my laptop. I think it sounds silly since it's one of those Linux distro's that should install simply and just work. And actually it did but there were some issues that kept me struggling for two weeks and several re-installs (I think I re-installed linux about 5 times the last two weeks). Apparently my Dell Latitude D830 is a very special one ;-).

Since I have this laptop I worked with Ubuntu 7.10 Gutsy Gibbon. And really enjoyed it. However there were also some things that I found not so obvious as expected in Ubuntu:
  1. My soundcard did not work natively. I had to re-install the alsa-drivers and change the mixer settings to get the Front-part of the volume controls under the volume buttons on my laptop.
  2. My Nvidia-card is a Quadro NVS 135M. And apparently due some license-issues the native-propietry driver is not shipped with the distribution. (This also counts for OpenSuse 10.3). So I had to install the propietry driver. Luckily this is very simple in Ubuntu. Just enable it in the propietry driver screen. But changing resulution settings is not so simple. Actually it seems simple with the Screen Resolution in the administration menu. But when I wanted to have another external screen attached to my laptop it is a crime to get the correctl resolution and also get it back to the native resolution of my laptop.
  3. I work extensively with VMWare Server. Ubuntu works with a Debian-based packagemanger for which often no package exist for many commercial software like VMWare. Nowadays it is in the repository but that was the 1.04 version, while the current version 1.0.5 is not yet (that is: two weeks ago it was not). Having it installed it works fine, except for suspend and resume. It is terribly, unworkable, slow. So under Ubuntu: just startup and shutdown your guest, then it works fine.
  4. Ubuntu uses Gnome. And that is a fine windows-manager. But I got a glance at KDE and that has many more shortcuts, richer pop-up menus (right-click), and just looks and feels "opener". Also I missed the "windows active desktop" in Gnome that seems to exist in KDE (I've seem something that suggest those capabilities but did not have it working).
  5. I had the 32 bit version of Gnome. I tried the 64 bit versions of both Ubuntu 7.10 (Gnome) and Kubuntu 8.04 (KDE). But the 7.10 version I could not get started normally (you had to remove the splash screen in the startup otherwise you did not get a "visual"). The Kubuntu 8.0.4 had some other issues. Mainly I could not get the Nvidia propietry driver and VMware Server working properly. I wanted to have the 64 bit because I have a 4 GB laptop and a 32-bit OS just addresses 3.5 GB of it, because of some address-lines that have to be reserved for peripherals.
An (ex-)colleague of mine uses OpenSuse 10.3 86_64 for a while on his D630 laptop with great sattisfaction. He uses OpenSuse for ages, so I figured: then it should be easy to get it working on my laptop. And actually it comes with a nice graphical installer (like Ubuntu 7.10, but unlike Kubuntu 8.04 amd64 which has a character-based one) and all my laptop-hardware is recognised. So Happy? Well then begins the configuration-issues.

Nvidia driver
Like Ubuntu also OpenSuse lacks the propietry driver for Nvidia due to License Issues. To me it seems that they could have put the Nvidia-software repository to the repository list and give the choice to install it for you. Then they could have presented the EULA and let you agree to it. The opensource driver nv works but is very slow. Scrolling with it in a large document or Web-page is not convenient. Luckily on the net are a few sources that explain how to replace the driver.
There is a nice one-click install on http://en.opensuse.org/NVIDIA. Unfortunately I found this one just the second try. The first try I had another source (which I can't remember and see no need to give here). It looked well (just a little less easy: near-one-click install). But something went terribly wrong during a reboot that I did a short while after that. My complete file system messed up unrepairably.

VMWare Server 1.0.5
Works very good. It is fast, also in suspend and resume. Just like I was used to under Windows.
I would like to get my windows-partition booted under VMWare Server. That should be possible, but when I tried I hit some access-right restrictions on the partition.

Wireless
The wireless drivers that get installed were the ipw3945 drivers. (I have an Intel Pro/Wireless 3945 ABG card). These drivers don't work that good. I just get a connection once in a while and it is then very unstable. There are also iwl drivers (iwlwifi, iwl3945-ucode). Just search on 'iwl' in YaST2. What I had to do was to uncheck/uninstall the ipw3945 modules and make sure that iwlwifi and iwl3945-ucode are installed. Now my wireless work just fine with the iwl-driver. I did not have to couple my wireless to the drivers. It just worked.

NTFS partitions
I have a dual boot machine. There are some things that just only work with windows (my Nokia N73, my Nikon D40+, and Netsupport a remote-desktop tool that they use at Oracle University). Ubuntu natively give read-write-support on ntfs-partions and usb-disks.
But OpenSuse does not. I had to made sure that the ntfs-3g drivers and mount tools were installed. Then I had to change the mount rule in /etc/fstab:
/dev/disk/by-id/scsi-SATA_ST9160823AS_5NK0BXV1-part1 /windows/C ntfs-3g user,users,gid=users 0 0
Also check that /windows/c has the users group and read/write on group level:
chown root:users /windows/C
chmod g+w /windows/C

Suspend to disk
Well this is the only main-thing I have left. It just does not work. I got this error in /var/log/pm-suspend.log:
ERROR: resume partition '/dev/sda5' not active, can not suspend
WARNING: /var/run/pm-utils.inhibit will be created to prevent suspending!
I searched and searched on Google but could not find a proper solution. It seems that I'm the only one in the Linux world that has this...

Conclusion
Well in the end I'm very happy with my OpenSuse install. Although I still would also recommend Ubuntu to others. Both are really fine systems. I think Ubuntu is especially strong for less experienced Linux users, people that just want to have a very stable system or have less up-to-date hardware. It's very easy to install and have in use.
OpenSuse also works very good with some refinements like explained above. KDE is really a pleasure to me.
If you have a good solution for my Suspend problem or know how to have a windows-partion booted under VMWare Server then please give me a comment. Thanks in advance.