SOA / Web Services / Java

A Technology Blog

Archive for the ‘oracle’ Category

Good Practices: Oracle BPEL

Posted by Vivek on January 26, 2009

–Do not import or add XSD files in a ZIP file into a BPEL project. Always  extract the XSD files from a ZIP file before importing them.

–Do not include any special characters in the project name (such as periods). If you do include special characters, errors appear when you attempt to compile your project

–The bpel.xml file content is only read into memory when the file is opened. Therefore, if you change the content of bpel.xml after the file is opened, the changes are not made in memory. After changing the content of the BPEL file, close and reopen the file for the changes to take effect.

–Do not edit the bpel.xml file through a combination of Oracle JDeveloper and a text editor such as Notepad or Wordpad. Use only a single editing environment such as Oracle JDeveloper.

–Do not edit the bpel.xml file, BPEL files, and WSDL files while changing the
design of the process. If you want to edit a file:
1. Ensure that the BPEL files are not being edited in Oracle JDeveloper. If they are being edited (that is, a tab for that file is visible), close it and save changes as needed.
2. Edit the required file and save the changes

–Oracle BPEL Process Manager does not support SOAP-encoded arrays.(soapenc:arrayType).
Use one of the following workarounds:
         * Apache Axis supports document-literal style services. This means you can change the service to not use soapenc:arrayType.
         * A wrapper can be placed around the service (also using Apache Axis) so that the BPEL process talks to the document literal wrapper service, which in turn calls the underlying service with soapenc:arrayType.
         * Call a service with soapenc:arrayType from BPEL, but construct the XML message more manually in the BPEL code. This enables you to avoid changing or wrapping the service. However, each time you want to call that service from BPEL, you must take extra steps

–If you use large binary attachment files in SOAP messages with Oracle Database Lite, your BPEL process may not complete processing, which can cause you to run out of system memory. Oracle Database Lite is largely for testing purposes. To use large binary attachment files in SOAP messages, use an Oracle Database as your dehydration store

–Use TCP tunneling to view SOAP messages exchanged between the BPEL process flow and the Web service (including those containing the
correlation ID). You can see the exact SOAP messages that are sent to, or received from, services with which a BPEL process flow communicates.

–Instead of manually entering an expression, you can press Ctrl and then the space bar in the Expression field. Scroll through the list of values that appears and double-click the value you want. Edit the value as necessary. As you enter information, a trailing slash can appear. This means you are being prompted for additional information. Either enter additional information, or press the Esc key and delete the trailing slash to complete the input of information.

–Do not copy and paste the expression syntax shown in this document into Oracle JDeveloper. This is because the single and double quotation marks are sometimes not compatible with Oracle JDeveloper. Instead, use the Expression Builder window or press Ctrl and then the space bar to use the XPath Building  Assistant.
–When you deploy a process with the same name and version, you are prompted to overwrite the currently-deployed BPEL process or deploy to a new version number. The best practice is to always deploy to a new version (as described in this tutorial). Redeploying a process with the same version can have consequences, such as instances being marked as stale.


I recommend reading the following article about Managing complexities within a BPEL Environment. It includes some of the best practices one can follow to ensure availability of BPEL Infrastructure.

Hope it helps.


Posted in jdeveloper, oracle | 1 Comment »

Oracle in Middleware

Posted by Vivek on September 21, 2008

Oracle has an array of products for building a strong middleware. Oracle has done everything it can to provide integration solutions to its customers. But not all are happy with these solutions. You can see some curt replies on forums or ask any oracle developer.

If you complain about deployment and usabilities of Oracle Enterprise software, you just know the tip of an iceberg.

When you are (God forbids) unlucky enough to get hired as a Senior Software Developer for Oracle, you will see the full horrible iceberg.

First of all, their enterprise software architecture is bad, and based on all the principles of “How to write slow and unreliable Java code”. They use EJB, RMI and all distributed technologies unnecessarily, for no particular reason, except to amuse themselves, and torture their customers.

Second of all, a lot of Oracle enterprise applications claim to be J2EE applications, but contain a lot of Active X and proprietary javascript code for Internet Explorer, so they run only with Internet Explorer.

Third of all, they have very bad intergration strategy between Oracle products, so some Oacle products run very well (well here means relatively less bugs) with every other Application Server, except Oracle Application Server 😉

Forth of all, they don’t have good practice about Refactoring, Code review, Test first Development, only have theory, so the quality of Oracle’s code is terrible.

Fifth of all, they have a very funny build process for J2EE application, which involves 10 different tools, from simple javac to Ant to Unix shell sh, m4 interepreter to Cruise Control, perl script, yapp and God know what else. But I swear that one day I really counted them, and there were 10 different things in all. Why the hell they cannot use Ant and Cruise Control, or if they must, use either Perl or Sh script? But they use 10 different things. Thanks God they don’t include C# and Visual Basic into the build process.

Sixth of all, they don’t have incremental build for some enterprise applications, so each time a developer change some thing in one file, he has to build the whole thing, and deploy the whole J2EE app again.

Seventh of all, Oracle Application Server is the second worst J2EE application server in the whole industry. (The worst is IBM Websphere). Even some Oracle enterprise products cannot be deployed reliably on OAS, while they can be deployed fairly easy on Weblogic or any other things. The performance of OAS is terribly bad, although they advertise something else on Oracle Website. And the Management Console is a typical study case about “How to design bad User Interface”.

The last, but not least, that the team spririt in Oracle development team sucks. I don’t even want to go into the details.

Of all other things, Oracle Collaboration Suite, Oracle iProcurement and Oracle HR tools …, I think Oracle produces those kinds of software to take revenge on their customers, make their lives miserable. There is nothing that is more difficult and inconvenient to use than those Oracle hacky wacky products.

So except database which has been developed since Larry Ellison’s time, all other Oracle products suck.

Posted in Middleware, oracle | Tagged: , , , | 1 Comment »


Posted by Vivek on July 27, 2008

Came across a very good post on Oracle forum. Worth mentioning as there are lot of people experiencing problems with oracle products.

Oracle BPEL + Oc4j + Jdeveloper = brain damage

We have been using Oracle BPEL and now upgraded to (oc4j, bpel and jdeveloper) when I came into contact with it.

Since then, we ran into loads of bugs that didn’t accelerate our development as Oracle promises, but slows us down by a factor of 3 at least.

Just to name a few issues:
– is not 100% stable in cluster mode. Deployment of processes fails randomly, they have to be redeployed several times. Before deployment, you have to undeploy old version to minimize risk of this problem.
– XSDs, XSLTs in BPEL process are sometimes not refreshed after deployment, resulting in reporting bugs that shouldnt exist.
– Oracle parser V2 cannot parse XML correctly, in certain cases when elements are separated by line feeds, it reports “null” elements.
– the whole oc4j uses old JAXB, leading to insurmountable problems if you try to use anything that requires newer version
– if you hope that you can fix problems with Oracle support, forget it, they will want an Oracle web conference with you for every bug. The process takes several days, and in most cases you will solve the issue before them.
– oc4j/opmn binding to multiple IP addresses is not functional, although according to manual it should work
– JDeveloper randomly deletes source code from other projects when deleting web service proxies
– JDeveloper can’t refactor java if the code is in SVN, it leads to corrupt project
– JDeveloper cant delete web service proxies correctly, it leaves old files on disk
– JDeveloper sometimes cant import java code, java sources dont appear in JDeveloper
– JDeveloper generated deserializing code for web service proxies is buggy, cant deserialize null Double, Integer etc. Sometimes it generates code that first uses obejct, and then checks for null …
– if JDeveloper is run from directory containing a space, it doesnt work correctly, unexpected bugs can occur. For example after adding email activity to BPEL project it becomes uncompilable. According to Oracle support this is ok, its mentioned in installation guide and is fully standard nowadays.
– JDeveloper BPEL designer is known to give errors like “Error: null” or ‘Reason: “” ‘ during compilation, meaning its impossible to fix probleme easily.
– in BPEL designer, xpath expression checking is not done, if something is wrong, project compiles but then leads to weird exceptions when deployed.
– when using switch activity, and string xpath in it like xp20:ends-with(), the content must be explicitly converted to string() or you get FOTY001 type error during runtime.
– when using transform activity in bpel designer, if you do not assign certain output nodes, they are deleted from the XML, so no further assign activities work on it.
– as we use custom bpel security module, we found out the BPEL runtime incorrectly passes information about domains when calling process from other domain from another process – leading to weird error that called process doesnt exist.
– when using transformations, bpel designer often says transformation is ok, but then in runtime you get FOTY001 type error, with no hint where the problem might be…
– correlation sets are not working under certain circumstances
– no refactoring in bpel designer, you cant even copy certain activities and paste them elsewhere. So you have to click, click, click everything again or copy in source code
– assign and transform activies are particularly touchy on whether there is element with some data, whether there is no element, or nil element. If the element is missing in input and you use assign copy on it, you are in trouble.
– icons in bpel designer are too big, if zooming is used, activity editing dialogs cannot be used
– when using JDeveloper generated web service proxies to invoke bpel processes, virtually only strings can be passed, if you pass anything else back, you will get various deserialization errors due to badly generated jdeveloper code
– if Oracle support on metalink cant replicate the problem, the problem “doesnt exist”.
– if you tell Oracle support you are going to use another product, they ask whether you still want to continue working on fixing reported bug. Obviously if you dont use oc4j, bugs in it dont need to be fixed.

I can’t imagine any serious company using JDeveloper and oc4j as these 2 are a deadly combination resulting in brain damage.

If you are considering buying BPEL or using Oc4j, think carefully, better take my warning seriously and look for other solutions until Oracle gets its problems sorted out.

Posted in jdeveloper, oracle | Tagged: , , , , , , | Leave a Comment »