Search My Ramblings

Friday, November 14, 2014

The Role of SOA Architect

I've read several posts about what people feel the role of SOA architect is or should be, and can generally agree with a portion of most of them.  Traditionally, a technical (e.g. software) architect is responsible for taking requirements provided to them and putting together an architecture or design that best fits the project.  In my experience, due to a lack of understanding on what SOA is, the role of SOA architect is generally relegated to technical/software architect.

However, this is not what the role should be in my opinion.  A primary driver for adopting SOA in an organization is to support business agility and re-usability.  Based on these characteristics then, it seems apparent that the SOA architect must be involved in understanding the business, business drivers, and overall roadmap to make the best decisions that support re-usability and business agility.  This requires the SOA architect to be involved in the communication of project, product and program roadmaps.  Sadly, this seems rarely to be the case from many organizations, where requirements get thrown "over the fence" for service developers to create services, without any design discussions of how this service fits into an overall portfolio, reusability of the service in other projects, etc.

I believe it's due to these situations where we get a large amount of services in production environments that are not tracked/monitored or cataloged in a repository, and then hear how SOA doesn't work and is dead.  I'd love to hear others' experiences as a SOA architect or with a perspective on the role of SOA architecture whether good or bad.

Monday, January 27, 2014

Oracle Service Bus IDE (Oracle Enterprise Pack for Eclipse) Installation Demystified

I've seen several sites that explain some steps on installing the Eclipse IDE, but nothing that presents an approach for knowing which version of the OEPE is required for which version of the Oracle Service Bus.  Hopefully you find this helpful and by "learning how to fish" can give a more sustainable approach to getting developers up and running in the OSB IDE sooner than later without any issues.

First, this is assuming you're installing the OEPE for 11g Oracle Service Bus.  With 12c the plan is to have Oracle Service Bus development available in JDeveloper 12c, and hopefully this process is much more straightforward and less confusing.

Find the OSB Installation Guide matching the version of OSB you're developing against.

This sounds pretty obvious, but if you find the correct installation guide for the correct version, there should be a reference to the version of OEPE to download in the "Obtaining the Software" section.  There should also be a handy link to the downloads page.  Follow the general instructions for installing the software provided by the link on that page, with the following key point:
  • At a minimum, you'll need to select the OEPE along with the Evaluation database.  The other options are not required for just setting up a development environment and testing on a remote OSB server.  Of course, for local testing you'll want to install Weblogic server in its entirety and probably Coherence as well.
This will install the correct version of Eclipse to support your specific OSB server, along with general server-side libraries required.  This does not include the actual Oracle Service Bus binaries and libraries, so at this point you'll be unable to do OSB development from the Eclipse installed.

Download the OSB Version needed and install

From the Oracle Service Bus downloads page, find the version of OSB needed and download the binaries under the "Product Installation" section.  Note that you just installed the prerequisites, so that step is not needed.  Follow the instructions to extract this .zip somewhere on your machine and start the setup executable.   Note that if you don't have an updated version of Java available on your path, you'll need to start the installer using
./setup -jreLoc {Path to Java home directory from previous step installation}
Hope this helps clarify the general installation process for the OSB IDE (OEPE).  After this step, you should be able to start the Eclipse editor under the directory used in the first step, in the  "oepe_{version}" subdirectory.  Good luck!

Thursday, January 23, 2014

Working with XML payloads in JMS queues from Oracle Service Bus

For some this may seem intuitive and obvious, but wasn't for me as an experienced Java developer for many years.  Having worked in JMS I recalled that the message types supported generally included Text, Object, Bytes, Stream, and Map.  So when I wanted to create both a publisher and subscriber in Oracle Service Bus to a queue I naturally configured each to use a "Text" message type.  This caused me issues in that the queue subscribing Proxy service message flow needed to have a Replace action early in the request pipeline that changed the $body from a text representation of the XML in the queue to an actual XML document using

Replace . in body with {fn-bea:inlinedXML($body)}

This does work.  However, I later realized that OSB has an additional layer of interpretation on top of JMS where if you configure the message type in both the Proxy service subscriber as well as the Business service publisher to use an "XML" message type, OSB will naturally handle and interpret the XML payload in the JMS queues appropriately, greatly simplifying your life.

I hope this helps and saves you some time in getting OSB working well with JMS.  Enjoy!

Wednesday, August 21, 2013

Implementing a RESTful intercepting filter pattern within Oracle Service Bus

With a RESTful design for web services, you model your primary objects using a URI hierarchy, and leverage underlying HTTP (in most cases) methods to perform CRUD operations on these objects such as getting them, deleting them, and creating/updating them.  And while I am not espousing that HTTP methods map cleanly to CRUD operations, they do conceptually make it easier to speak about various CRUD operations on objects.  A common practice is to group objects under a functional umbrella URL hierarchy, which makes the object relationships more obvious and allows versioning across a group of RESTful services that share common functions.  However, in my experience trying to map this hierarchy cleanly in a service bus isn't always the easiest or most maintainable solution.

Wednesday, June 19, 2013

What does loose coupling really mean?

Specifically with integration, I commonly see references or hear the expression loose coupling.  Often the writer speaks about virtualization or abstracting the implementation of the services with something like an enterprise service bus.  However, that alone is not enough to capture the essence of loose coupling to me.

So what is loose coupling then?  Well, in integration I believe it means that 2 or more communicating systems do not communicate directly with each other (no direct binding to addresses, i.e. Enterprise Service Bus) and they use some intermediary component(s) that functionally represents the intention of the integration in both network protocol and data ontology.  That is, client systems communicate with a middle component or service that represents an enterprise proxy for the implementation of the actual service, and uses a canonical data format specific to that industry and purpose.  

For example, if developing an integration solution for human resource management, one might expect the canonical data format for the enterprise services tier would use an industry standard where possible, like HR-XML, to represent the data objects, attributes and relationships.  The services implementing these enterprise operations may be tied to a specific ERP implementation or written in .NET using a custom, scaled down XML format, but at an enterprise level the services utilize standards and separate the client from the implementation in both protocol, location and data format.

Agile Adoption Words of Wisdom

This is an excellent article about organizational change required to truly adopt an Agile methodology.  It isn't simply a development team methodology or toolset, but a organizational decision to change many aspects of how business gets done.

TechWell | Agile Is Not for Everyone (and That's OK)

Friday, May 31, 2013

Oracle SOA Suite 11g Composite Fails to Load After Restart

We had an issue at one site where a specific AQ-adapter initiated SOA composite was constantly failing to load properly, leaving the composite in an indeterminate state, where it couldn't be undeployed or redeployed.  This was perplexing since there were other composites subscribing to other AQ queues that were not experiencing this startup failure.  At first this was just chalked up to a poorly installed instance of SOA Suite, but after further examination the cause became crystal clear.

When I compared the source code of the failing process to other similar ones that weren't failing on server restarts, I could tell that the issue was related to how this particular composite was calling another SOA composite for error handling (which all of the SOA composites call).  In the failing composite, it was referencing the WSDL using a URL retrieved from the Enterprise Manager console for that composite, e.g. "http://{server}:{port}/soa-infra/services/{partition}/{compositeName}/{serviceName}?WSDL".  By referencing the WSDL this way, it requires the composite be running and loaded prior to this composite requesting it, since it's requesting the WSDL from the composite itself, and not just referring to the WSDL as a static document.  There is no determinate way to predict which order SOA composites will be loaded by the infrastructure, so doing it this was typically caused issues with the composite to where it would need to be recompiled as a different version and deployed again each time the server is restarted.

To solve this, there is a preferred way and an alternate way of the above solution.  The preferred way is to store common artifacts in the Metadata Store and reference them from your composites where possible, so utility composites like an error handler's WSDL would definitely fall in this category.  For this simple project, it was determined to instead reference the WSDL as a static document living in the infrastructure independent of the composite being loaded.  To do this, we changed the WSDL URL being referenced to http://{server}:{port}/soa-infra/services/{partition}/{compositeName}/{WSDLFilename}wsdl in the composite.xml in the import section, as well as the reference/ui:wsdlLocation attribute that references the service.  However, the previous format for the URL was left in the section in the same .  

To be clear, using MDS to store these common artifacts is a better solution, but for a down and dirty quick solution this is an alternate option.