Tug’s Blog

Redis, NoSQL and more…

Oracle BPEL: Debugging ‘Internal’ SOAP Messages

| Comments

When you develop applications that use SOAP based Web Services you very often use an HTTP proxy to capture the request and response that are exchanged between the clients and servers. For this you can use the Oracle HTTP Analyzer that is part of the toolset of Oracle JDeveloper, Axis TCP Monitor, or a packaged version of it that you have with Oracle BPEL Process Manager.

BPELs are making extensive usage of SOAP messages, and it could be interesting to debug the different call to the partnerlinks. Oracle BPEL PM, to avoid HTTP calls and make optimized SOAP message when the partnerlink that you are invoking is deployed as a BPEL. So in the default configuration you do not see the different calls. In this article I explain how you can configure the server to be able to do it.

For this I will be using:

  • Oracle BPEL Process Manager developer install running in an OC4J 10g Stand Alone (10.1.2.0.2)
  • obtunnel, that is a package version of Axis TCP Monitor located in <BPEL_HOME>\bin\obtunnel.bat
  • LoanFlow demo that you can install in 2 steps:

Starting the Oralce BPEL Tunneling tool:

Just run the command <BPEL_HOME>\bin\obtunnel.bat You will see the following application:

By default the TCPMonitor launched from BPEL listens on the port 1234 and proxies for the default Oracle BPEL port 9700. So in this context you will capture all the requests is you access the server on the port 1234.

It is not sufficiant here since the different partnerlinks endpoint are not dynamique and are set to the port 9700. So in this case you wont’s see the request coming from the BPEL to a local partner link (and I am not talking about the SOAP Optimization yet).

One way that I use to work around this issue in development –may be we have more simple solutions, but this is the one that I use– is to change the port of the OC4J and make the proxy listening on the port 9700. In this case you will be able to capture the requests made from BPEL to its partnerlinks.

Changing the Port of OC4J and the TCP Monitor

I. Change the HTTP port of OC4J used by BPEL

  1. Open <BPEL_HOME>\system\appserver\oc4j\j2ee\home\config\http-web-site.xml
  2. Edit the port attribute of the root element web-site to enter a different value

eg: <web-site port="9701".... Stop your BPEL Process Manager

II. Start a new TCPMonitor on port 9700

  1. In the TCPMonitor sceen click on the Admin Tab
  2. Enter 9700 for the “Listen Port #” field (since we want to be sure the partnerlinks are called correctly)
  3. Enter 9701 (or the value you entered for the HTTP port) for “Target Port #”.
  4. Click Add
  5. Click on the new tab “Port 9700”. If you have an error message like “java.net.BindException: Address Already in use: JVM_Bind” this is simply because your BPEL process manager is not stopped. In this case stop the BPEL server, and start the TCPMonitor by clicking the Start button.

III. Restart you BPEL Server

Nothing special here you just need to start your server, and check that the BPEL PM is now listening on the HTTP port that you have entered, in my case 9701:

  • http://localhost:9701/BPELConsole

You can now go on the test page of the LoanFlow process (either on the port 9700 or 9701) and invoke the process. I am using 9701 since I want to capture the calls make by the Business Process to its partnerlinks.

You can see some HTTP activities in your TCPMonitor, but if you look in details you only see request to the different WSDLs used by the LoanFlow…

I was like you expecting to be able to see the different SOAP requests and response, but BPEL does some optimization around local SOAP calls. So to be able to capture these requests you just need to turn of this optimization.

Turning Off the SOAP Shortcut

  1. In the BPEL console, click on the “Manage BPEL Domain” link (topright)
  2. You arrive in the configuration tab, look for the optSoapShortcut property and set it to false.
  3. Click Apply You can now go on the test page of the LoanFlow process (either on the port 9700 or 9701) and invoke the process. I am using 9701 since I want to capture the calls make by the Business Process to its partnerlinks.

Now you can see all the SOAP requests and responses between the LoanFlow BPEL and its partnerlinks.

Update on 08/02/2007

For people that are currently using Oracle BPEL 10.1.3.1 the optSoapShortcut is not visible anymore in the console, but it is still possible to configure this by adding it manually in the domain configuration file available at:

$BPEL_HOME/domains/<domain>/config/domain.xml

Google Data APIs

| Comments

Google has published a new set of API (and format) to update and access data. It looks really interesting. These services are published using the REST paradigm and XML.

Based on this protocol Google is now exposing its Calendar. I am currently playing around with it, really fun. A good opportunity for portlets and widgets developments…

Note for Oracle JDeveloper 10g (10.1.3) users: I have define the GData and Calendar API as new library inside Oracle JDeveloper. But I had some issue compiling when I start to use any of the class coming from these library with the default configuration on Windows XP. I just switch from Oracle JVM to the standard JDK compiler in my project to avoid this “Error: Internal compilation error, terminated with a fatal exception”. To do this it is quite simple. Double click on your project, choose compiler in the left tree, and check the “Use Javac” option to force JDeveloper to use the standard javac command. (I will have to find where this issue come from…)

Oracle Industrial Telnet Server (ITS): The OracleAS Hidden Treasure..

| Comments

When I was working in Oracle Consulting I was surprised to see how many customers are using character mode applications, base on Oracle Forms. Lot of applications in wharehouses, harbour, … are using telnet terminal, usually remote/mobile using RF networks.

Moving to Java on the server was very hard for them because of the lack of support for easy character mode development based solutions.

OracleAS 10_g/ADFprovides such support with the Industrial Telnet Server (ITS)_. ITS is the telnet server running in a J2EE container as a J2CA adaptor, and uses JavaServer Faces to render the user interface. The advantage of using JSF for the UI, it allows developer to leverage automatically different renderers (HTML, Mobile and telnet) without changing the application.

Here an example of the different renderer provided by Oracle ADF Faces (Instant Messaging, PDA, HTML and Telnet) jsf-renderer.PNG

If you are looking for more information around Oracle ITS:

Oracle Fusion Middleware and Microsoft Interoperability - Developer’s Guide

| Comments

Download the Beta version of the Oracle Application Server Developer’s Guide for Microsoft Office Interoperability along with sample code (and other technical resources) from this new OTN page.

  • Windows Platform: Fusion Middleware is concurrently tested and delivered on Windows.
  • .NET/Windows Server System Integration: Fusion Middleware offers broad integration with Microsoft .NET and Windows Server System at multiple levels.
  • Office Interoperability: Fusion Middleware enables use of Office as the front-end for enterprise applications, as well as many ways to interact with enterprise information that can be read, parsed, and generated in Office-formatted documents.

SourceLabs SASH Certified on Oracle Fusion Middleware

| Comments

Oracle Fusion Middleware is now a certified platform for the SourceLabs “SASH” stack: Apache Struts, Apache Axis, the Spring Framework, and Hibernate. Visit this page to download free SASH software!

SASH is a distribution from SourceLabs that:

  1. Reconciles library versions and dependencies across the entire stack.
  2. Includes dependability fixes for the baseline open source projects
  3. Is rigorously tested according to the CERT7 method.
  4. Is commercially supported.

Oracle 10g: Oracle Open World Top 10 Presentations

| Comments

You can find online the top 10 presentations of Oracle Open World 2005:

  1. Optimizing the Optimizer: Essential SQL Tuning Tips and Techniques
  2. 10 Things We Like About Oracle Database 10g Release 2
  3. PeopleSoft Enterprise, JD Edwards, and Oracle E-Business Suite Integration with Oracle Fusion Middleware
  4. The Future of Database and Information Technology
  5. Understanding Shared Pool Memory Structures: Tips on How to Optimize Usage and Avoid Errors
  6. Take the Guesswork Out of Database I/O Tuning
  7. Tuning Oracle SQL in the Real World
  8. What They Didn’t Print in the Doc: High-Availability Best Practices from Oracle Maximum Availability
  9. Performance Diagnostics Demystified: Best Practices for Oracle Database 10g
  10. Best Practices for Oracle Database 10g Backup and Recovery

Enjoy!

Using Eclipse WTP and OracleAS/OC4J

| Comments

You have probably heard about Web Tools Platform (WTP), this project extends Eclipse with various tools for developping J2EE applications. It contains editors for HTML, JSP, XML and so more… In addition to various wizards to create Web Services, EJB, Connector and more… WTP allows developers to package the application using J2EE standard packagind: EAR,WAR,RAR,JAR and deploy and run the application from the IDE.

The challenge here is not how you build J2EE components using an IDE, but more how do you package, deploy and run your application easily from the IDE. Eclipse WTP allows you like Oracle JDeveloper does, to package the various J2EE components in standard archives (JAR, WAR, EAR, RAR, …) and deploy them to a J2EE container. WTP project has a very nice list of containers you can deploy to: Oracle, IBM, BEA, JBoss, Tomcat, …

With the latest build of Eclipse WTP (Release 1.0M8), Oracle Application Server 10g is now part of the default server list. So if your are an OracleAS user you can now use WTP and start to run and debut your application running in OracleAS from Eclipse.

What do you need to start using WTP and OracleAS:

  1. Download and install Eclipse WTP 1.0M8 from Eclipse site.
  2. Download and install OracleAS 10g (OC4J 10.1.3 Developer Preview 4) from OTN
  3. You must set a administrator password for OC4J using the start command
  4. Done! You can now use OC4J and Eclipse. I have a viewlet that shows the basic steps to create and run your first Web application.

OC4J configuration

Update (Nov,18) : I forgot to mention the Oracle Application Server Adapter tutorial from the Web Tools project.