« January 2008 | Main | July 2008 »

March 2008 Archives

March 4, 2008

Compelling argument for SOAP over JMS

I have to say that when it comes to integration using SOAP my default position is that using JMS is overkill.  I take that default position for a number of reasons:

  • The Siebel limitations associated with generating/reading WSDL when a JMS binding is used.
  • I don't like breaking open standard rules like using SOAP with a binding not in the standard.  (Yes, I do realize there is extensive non-standard support for using SOAP with a JMS binding. )
  • Usually there is a misconception that JMS as a transport allows more web service volume than HTTP.  (It is the same Siebel internal dispatching method!)
  • other items I wish I could think of at time of writing...

Recently I started working with a customer (using Siebel 8) who felt that JMS was just the answer to their need for guaranteed message delivery.  (That premise can be challenged but is a whole other topic.)  With that belief, there came the need to find a way to implement the strategy within Siebel.  Since we would use SOAP for messages, the simplest choice was just to use SOAP over JMS which Siebel supports.  Naturally, there was a challenge to this implementation in the form of the JMS adapter for both inbound and outbound messages.  This makes sense since you can then bypass the inbound web service dispatcher giving you finer grain control.  However, this brought up the following issues:

  • When using the JMS adapter directly, you lose the ability to publish or consume a WSDL defining your web service operations along with supporting message and fault structures.
  • Inbound SOAP formatted messages need to be parsed.  When you pick up a message from the JMS queue for processing, you need to parse the SOAP message.  While this is possible in eScript, (done it) it is not trivial or likely to be robust. 
  • Like it or not, the inbound web service dispatcher validates message format for inbound web services.  This eliminates the need to write custom code to validate the format of inbound messages.
  • Outbound SOAP messages need to be constructed.  Once you convert an integration object into XML you still need to wrap it within a properly formatted SOAP message.  You can do this a variety of ways (XSLT, eScript) but it is work that needs to be done.
  • Since we are using SOAP over JMS we can't use the popular document literal format.  Why?  Simply because there is no SOAPAction HTTP header field that can be set.  Thus you must use the less popular RPC literal format.  This has a significant impact on the WSDL you must generate by hand. (see earlier point)

As you can determine from the list above, there are some real challenges associated with SOAP over JMS if you use the JMS adapter directly.  However, the more daunting issues "go away" when you take advantage of the Siebel SOAP over JMS feature

  • Inbound SOAP messages are parsed and format validated without custom code
  • Outbound SOAP messages are properly formatted within a SOAP envelope.
  • WSDL can be generated and consumed if you take the manual step to convert between HTTP and JMS transport via the web service administration views.

We still have to deal with the SOAP RPC literal issue but that seems trivial to the other problems addressed.  Thus to be objective, even though I still don't like or recommend using SOAP over JMS, I admit that it can provide some advantages. 

However, I retain the position that the entire need to use JMS directly with Siebel can be eliminated by placing Fusion Middleware (FMW) in front of Siebel.  Doing so allows the FMW part of the solution to take responsibility to interact with JMS as required.  Required interactions between FMW and Siebel still take place using SOAP over HTTP with the FMW code responsible for handling error recovery/retry.  But that is the topic for a whole other post and article.

March 5, 2008

Oracle DB 11g on same box as 10g with Siebel

If you are familiar with the Siebel System Requirements and
Supported Platforms document you know that Oracle Database 11g is not
supported.  That is fine, since 10g can
be used instead.  On my laptop I have Siebel
8 installed with Oracle 10g for the database.

Recently I have been fooling around with Oracle APEX to
create some simple user interfaces to front some custom schemas.  It makes it real easy to build some simple
applications to maintain data and then get fancy printouts using BI
Publisher.  Part of my learning has led
me to understand that Oracle DB 11g has a built in HTTP server that I can use
to access APEX.  This is great since it
means one less software install (Oracle HTTP Server) to get APEX working.  I also discovered that APEX can work with the
Express Edition which is free to develop, deploy, and distribute.  Perfect! 
I want to distribute some of my utility applications for others to use.

Now the problem I thought might come up was having two
different versions of the Oracle DB running on the same laptop.  As documented there is no problem provided
you take a little care with how your environment is setup.  In my case, the first decision was to decide
which database version I wanted to have running as my default. Making that
decision allows me to set up my environment variables correctly.  For me, 10g is the  default to allow Siebel 8.0.x, SOA Suite and
AIA Foundation Pack 2.1 to be installed and run without any special steps.  The critical environment variables I have set
are ORACLE_HOME, ORACLE_SID, TNS_ADMIN, and adding %ORACLE_HOME%bin to the
start of my path.  I want to call special
attention to TNS_ADMIN since without it the DataDirect ODBC drivers for Siebel
did not work!  You end up getting a TNS
names error despite the ODBC utilities working. 
However, once those variables are setup, I can run the 10g database directly
from the Windows services dialog.  This also
allows my existing Siebel 8, SOA Suite, AIA, and other applications to run without
issue.

When I want to work with 11g I need to take a few special
steps.  First, I make sure all 10g
database services are shutdown.  This
includes and instances, listeners, db consoles, etc... Once that is done I am ready to start my
required 11g services.  To start I open a
command window and change to my 11g base directory.  There I have a batch file that sets up my
environment variables just for 11g as follows:


set ORACLE_BASE=D:oracle
set
ORACLE_HOME=D:oracleproduct11.1.0db_1
set TNS_ADMIN=%ORACLE_HOME%networkadmin
set
PATH=%ORACLE_HOME%bin;%PATH%
set
ORACLE_SID=RSN11G

Once this is done I am ready to start my required
services.  However, I can't do this from
the windows services dialog since I need to use the local environment variables
I just set.  Fortunately all I need to do
is issue the command: net start <service name>

To start my database instance I type:
  • net start OracleServiceRSN11G
To start my listener I type:
  • net start OracleOraDb11g_home1TNSListener11GLISTENER

To start my DB console I type:

  • net start OracleDBConsoleRSN11G

So far this has worked fine for me allowing me to switch
between database environments as required. 
I have to admit that so far I have no need to run each database
environment concurrently.  It should work
but I can't say for sure.  Besides, after
starting up Siebel 8, SOA Suite, BI Publisher, and Siebel Tools or JDeveloper I
am out of RAM!

About March 2008

This page contains all entries posted to Richard Naszcyniec's Blog in March 2008. They are listed from oldest to newest.

January 2008 is the previous archive.

July 2008 is the next archive.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type and Oracle