Archive for August, 2007
Problem with HTTP Binding of BPEL Process
Aug 31st
BPEL processes are very Web Service centric, and a typical way to launch a BPEL process, or to communicate with a running BPEL process instance, is through SOAP web service calls. (That is, of course, unless the BPEL process uses File-, FTP-, Queue and/or Database Adapters to listen to and react on "external events" itself). But what if you need to invoke a BPEL process from a client that is not so Web Service savvy, and can only use HTTP requests to communicate with the outside world? An example of such a "client" would be an HTML page, but also many legacy systems offer limited or no support for web service calls but can issue HTTP requests.
A typical (and often used) solution is to create and deploy a Servlet that will receive the HTTP request from the client, construct a SOAP message based on the information in the HTTP Request parameters, and then invoke the BPEL process through a web service call. Such a servlet would therefore effectively "translate" the HTTP request to a SOAP call.
What not everyone might be aware of, is that the Oracle SOA Suite ships with a standard, generic Servlet that can perform just such a translation. By inspecting the request parameters, an XML SOAP message is created and passed on to the BPEL process. The way these request parameters are "mapped’ to the XML message has changed significantly from release 10.1.2 to 10.1.3.
In between AMIS consultancy jobs…
Aug 30th
This (for this site) is a strange post…
I am looking for a consultancy job. Nothing new here, but only a strange way to make this visible to the outside world.
This month is the end of my successful 3 year project for the dutch UWV as member of the project team, that converted almost all historical Dutch UVI Historical Unemployed Benefit data to a, on XMLDB functionality based, Oracle database.
During that time, because the technology used was based on Oracle XMLDB functionality, I became highly experienced with the XMLDB DBA / architecture problems and solutions of this new technology. I think, a great asset besides my being a DBA for almost 15 years. I guess, also based on this, my profile on the Oracle OTN XMLDB forum and probably also because of the AMIS Company profile, with great people like, among others Lucas, Sjoerd, Gerwin, etc.; We / AMIS were also allowed to enter the Oracle 11g Beta test program.
Knowledge is great, but even nicer is the opportunity to help people with their Oracle XMLDB challenges…and XMLDB challenges are hard to find…
Helping people on the XMLDB OTN forum is great but that doesn’t account for real XMLDB production problems. So if you need help and are looking for XMLDB DBA / architecture specialist, take me also into account and call or mail, for instance Emile Voogt (emile[dot]voogt[at]amis[dot]nl), one of my AMIS sales colleagues.
If you want to get in contact with me directly, regarding AMIS consultancy XMLDB opportunity job use marco[dot]gralike[at]amis[dot]nl, see my presentation about XMLDB on this years UKOUG or read up on XMLDB here.
So, all in all, I hope you forgive me, that this time, this post is not a technical one…
Hope to see you at UKOUG.
Thanks,
Marco
Enqueuing AQ JMS Text Message from PL/SQL on Oracle XE
Aug 30th
Today I was configuring a message driven bean to listen to an AQ queue. The tutorials and examples I found had me create the queue like this:
dbms_aqadm.create_queue_table( queue_table=>'MY_QUEUE_TABLE'
, queue_payload_type=>'SYS.AQ$_JMS_TEXT_MESSAGE'
, multiple_consumers=>false);
With this queue type, I managed to configure the Message Driven Bean successfully on an OC4J 10.1.2 without needing to use the JCA AQ Adapter, i.e. with just plain JMS. I also wrote a Java class to enqueue a test JMS message on this queue. But then, I needed to write PL/SQL code to put a message on this queue as well. Not being very fluent in PL/SQL programming, I tried googling for an example, but all the examples I found used code like this:
create or replace procedure testmessage AS
msg SYS.AQ$_JMS_TEXT_MESSAGE;
queue_options DBMS_AQ.ENQUEUE_OPTIONS_T;
msg_props DBMS_AQ.MESSAGE_PROPERTIES_T;
msg_id RAW(16);
begin
msg := SYS.AQ$_JMS_TEXT_MESSAGE.CONSTRUCT(); msg.set_text('Hello World from PL/SQL');
DBMS_AQ.ENQUEUE( queue_name => 'MyQueue'
, enqueue_options => queue_options
, message_properties => msg_props
, payload => msg
, msgid => msg_id);
end;
Unfortunately, this code does not compile on the Oracle XE database that I was using, resulting in a "PLS-00302: component ‘CONSTRUCT’ must be declared" error. Further examination taught me that the JMS types on the XE database are "crippled’ because there is no JVM present. The advice I repeatedly came across was to use a queue with an ADT payload rather than a JMS type payload, at the cost of more complex dequeuing logic in the middle tier.
Oracle SOA Suite: further Build and Deployment Automation for Enterprise Service Bus components
Aug 29th
Some time ago I wrote an article on SOA Suite Build, Deployment and Test Automation. A section of the article was devoted to automating builds and deployments for Oracle Enterprise Service Bus (ESB) components. Not covered was deployment of Services to multiple environments as is usually done throughout the development and test process of a system. This blog post starts where the article stopped: it describes build and deployment automation for an ESB System in a way that it can easily be deployed to multiple environments that support the system development life-cycle.
Support for build automation in SOA Suite
It seems that Oracle has not gone to extremes in providing support for build automation for SOA Suite. Sure, from within JDeveloper it is easy to compile and deploy BPEL and ESB components to diverse environments. But I would love to see Oracle move (further) away from the use of JDeveloper for this purpose as it stands in the way of automating the build, deployment and test process. Oracle should embrace Ant or Maven and make sure that the exact same scripts are used from within JDeveloper as well.
The importance of a streamlined and manageable build and test process is illustrated by the comments on the SOA Suite forum that is hosted on Oracle’s Technology Network. For example, see this thread for ESB deployment automation. And in some cases this even results in a heated debate
.
Setting up a streamlined build and deployment process is of vital importance for any system development effort. This is especially true for a SOA implementation in which you need to ensure that a robust system is constructed from various loosely coupled services. It may require some initial effort and getting used to, but in the end this approach will save you valuable time and help provide your customers with consistently high-quality systems.
Read the rest of this entry »
Agile software development, the principles. Principle 2: Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
Aug 24th
This is the second of 12 posts about the principles of agile software development. Purpose is to go back to the start of the agile manifesto (http://agilemanifesto.org/principles.html) and discuss the implementation of the 12 principles in real life software engineering. Goals of agility are to go deliver software of higher quality, faster, with a higher acceptance to end-users and able to follow the changing business requirements to strive for competitive advantage.
The question is: is this going to work in practice or is this only based on a nice marketing and sales story.
Principle 2: Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
This is one of the marketing / sales pitfalls of agile software development. What sales executive like to tell the customer is “Our agile process is designed in such a manner that we can incorporate changes during the whole development phase, even in the end”. This is nice customer expectation management (understatement). What the customer understands form this promise is that this project is able to incorporate all changes in requirements even up to a few day’s (or even hours) before going life.
A quick introduction to the jQuery tablesorter plugin
Aug 24th
A few days ago version 2.0 of the tablesorter plugin was released. Before 2.0 the tablesorter worked fine but I never did anything with it. Today I thought it was time to see whether this was a good solution for the table sorting we need. In this article I will show you how to enable sorting on any table (yes it’s that simple) and how to create custom sort functions.
How to fix your number-sorting problems in Javascript
Aug 24th
Did you ever wanted to sort [1, 10, null, 20] in Javascript and were the results unpredictable? It’s not a bug, but more something that’s not implemented. I came across this problem when testing some table sorting plugins for Dojo and jQuery. First I thought it were bugs, but the real problem lies in Javascript and the function you pass to the sort() method.
CTAS on a Table with Nested Tables
Aug 22nd
The other day one of my colleagues asked me if it is possible to create a copy of a table with all the content in it. He wanted to do some experiments with it and didn’t want to mess with the original table. A simple CTAS (Create Table As Select) didn’t work, because the table had a column which was a Nested Table.
I know you could do a CTAS with Index Organized Tables, but with Nested Tables…
Using Ant to inspect Connection Properties in WSDL Files that are generated by Oracle SOA Suite Adapters
Aug 17th
Oracle SOA Suite comes with a collection of adapters that allow you to easily tap into a number of technologies from BPEL Processes or from ESB Services. Want to connect to a database, hook up to a queue or access your E-Business Suite: create an adapter for it with a WSDL interface from within JDeveloper by simply running a wizard.
Logical Connection Names
All adapters, whether these are used to connect to an FTP server or access an MQ-Series queue, use logical connection names or JNDI names that must be specified at design time. At runtime, the adapter framework uses these JNDI names for looking up the physical connection data from configuration files. This mechanism works well. It ensures that the software remains unchanged when dragging it through the various stages of the software development life-cycle process: from QA to SIT, to UAT and finally Production only the environment-specific configuration files have different data. Obviously, developers are required to stick to the naming conventions for the logical connection names.
Risky business
Unfortunately, for ‘convenience’ Oracle decided to place physical connection data in the generated WSDL files at design time. When the system is not able to obtain the connection details from the configuration files using the JNDI name, it will use the so called ManagedConnectionFactory or MCF properties from the WSDL instead. Risky business that may cause undesirable behavior: if there is a misconfiguration the service may connect to an instance that was specified at design time without you knowing that. I prefer a clear error on which a system administrator can act appropriately by fixing the connection details in the proper configuration file. Hence, as a rule, the MCF properties need to be removed from the generated WSDL files afterwards. For inspection of the connection properties in the WSDL files I created a simple Ant script.
Read the rest of this entry »
Used port numbers by the Oracle OEM agent
Aug 16th
This is definitly a post worthy as one of the members of the BAAG. The work was extensive (setup, config, install, checking) and afterwards the outcome could have been predicted, but I definitly know now what portnumbers are allocated by the Oracle Enterprise Manager Agent version 10.2.0.3.0 for SUSE 9.2 ES Linux (I386, 32bit).
I was wondering what those portnumbers were. In a customer enviroment, which uses multiple segments between (V)LAN’s, firewall rules are being applied. So imagine multiple LAN’s within a company which are defined by different ranges and trafic between them are controlled by multiple firewall rules / settings.
My Oracle Enterprise Manager Grid control, version 10.2.0.3.0, must be able to contact it’s OEM agents on one off those different network segments. I could not get this working so I asked the responsible network administratorfor advise. He didn’t had the time for it, to setup and / or trace it properly; therefore left the problem for me to solve (‘it’s Oracle stuff anyway" – "aren’t you be able to read it somewhere in one of the Oracle manuals"). Long story short…
Which port numbers have to be defined in the firewall to enable traffic between the Oracle Management Server and the Oracle Enterprise Manager Agent?

