Skip to main content

skip to main content

developerWorks  >  SOA and Web services | Information Management  >

Make SOA transactional

A simple example involving an SCA component, an EJB component, a Web service, and a message queue

developerWorks
Document options
PDF format - Fits A4 and Letter

PDF - Fits A4 and Letter
1,196KB

Get Adobe® Reader®

Document options requiring JavaScript are not displayed

Discuss

Sample code


Rate this page

Help us improve this content


Level: Intermediate

Rajiv Ramachandran (rramachandran@prolifics.com), Solution Architect, Business Development, Prolifics

10 Apr 2008

In the world of enterprise application integration (EAI), it's essential that all participating systems operate under an overarching global transaction so that these systems all return to a consistent state in case of a failure. With the various systems supporting different protocols, the transaction semantics must be propagated across these protocols so they can seamlessly participate in the global transaction. This article walks you through the steps required to make an example of a common integration scenario a transactional integration.

Introduction

Enterprises are increasingly turning to a service-oriented approach towards implementing an EAI. The goal of this article is to demonstrate transaction control and propagation when using IBM® WebSphere® Process Server as a Service-Oriented Architecture (SOA)-based enterprise integration platform. WebSphere Process Server runs on an underlying IBM WebSphere Application Server platform that provides WebSphere Process Server with core distributed transactional capabilities. The key component types that execute in WebSphere Process Server (for example, Business Process Execution Language [BPEL], human tasks, business rules, and state machines) follow the Service Component Architecture (SCA) specification.

Note: This article assumes that you're familiar with WebSphere Process Server, IBM WebSphere MQ, IBM WebSphere Integration Developer, Enterprise JavaBeans (EJB) components, and Web services.

This solution has been developed and tested on:

  • WebSphere Process Server and WebSphere Integration Developer V6.0.2.x
  • WebSphere MQ V6.0.2
  • IBM DB2® Universal Database V8.1.14.292
  • Oracle Database 10g Express Edition Release 10.2.0.1.0


Back to top


Enterprise integration: a common scenario

Consider the case where you have three systems: A, B, and C.

  • System A: Generates an event by putting a message on an WebSphere MQ queue. This event is required to be propagated to systems B and C.
  • System B: Upon receiving this event (from system A), system B inserts data into its database. System B provides an EJB interface and uses an DB2 back end.
  • System C: Upon receiving the same event (from system A), system C deletes data from its database. System C provides a Web service (WS) interface and uses an Oracle back end.

The success of this scenario depends on both system B and C completing their respective transactions successfully. If that doesn't happen, both systems B and C are required to go back to the original state they were in before they received the event, and the original event data must be moved to a temporary holding queue.



Back to top


Proposed solution

The proposed solution uses the approach of defining an SCA component (BPEL process) as the orchestrator for this integration. It listens for input on a WebSphere MQ queue and then invokes the EJB component and the Web service interfaces exposed by the two systems to which it needs to pass the received data. Figure 1 depicts the proposed solution.


Figure 1. System overview
System overview

However, the key for this solution to implement the requirements as stated in the previous section is to use the distributed transactional capabilities in WebSphere. WebSphere acts as the transaction coordinator and manages the above scenario as a single distributed unit of work that's distributed across various resource managers that include DB2, Oracle, and WebSphere MQ.

This article shows you how SCA transaction qualifiers, Java™ 2 Platform, Enterprise Edition (J2EE) transaction specifications, the Web Service Atomic Transaction (WS-AT) specification definitions, and WebSphere MQ setup all work together to create a transactional enterprise integration solution.

As mentioned earlier, the focus of this article is to demonstrate how the various components work under a single transaction. As a result you'll see that very simple data types and component logic have been used. The focus is not to showcase all the features and capabilities of BPEL, business objects, and interface definitions or go into the details of component development. I'm including as a part of this article the project interchange file (see the Download section) that includes all the components that simulate the above systems and demonstrate transaction propagation.

The PIF (project interchange file) contains the following elements:

  • SYSTEMA: This J2EE project simulates system A. It contains a servlet that puts a message on a WebSphere MQ queue. Appropriate queue definitions have been created on the WebSphere MQ server and on the WebSphere MQ JMS provider in WebSphere Process Server. An XA WebSphere MQ Connection Factory has been defined on the WebSphere MQ Java Message Service (JMS) provider in WebSphere Process Server to communicate with WebSphere MQ.
  • DB Helper: This Java project contains the helper class, which has the actual JDBC code to connect and insert or delete data from the DB2 or Oracle database tables, respectively. This project also has the Data Definition Language (DDL) files for the customer table for both DB2 and Oracle.
  • SYSTEMB: This J2EE project simulates system B. It contains an EJB component that uses the Java class in the DB Helper project to insert data into a DB2 database table. An XA data source has been defined on WebSphere Process Server and is used to communicate with DB2.
  • SYSTEMC: This J2EE project simulates system C. It contains an EJB implementation exposed as a Web service that uses the Java class in the DB Helper project to delete data from an Oracle database table. An XA data source has been defined on WebSphere Process Server and is used to communicate with Oracle.
  • Integrator: This module contains an SCA component implemented as a BPEL process. The SCA component uses a WebSphere MQ JMS export to pick the message from the WebSphere MQ queue. It uses the WS and stateless session bean EJB imports to communicate with the EJB and WS interfaces of system B and system C, respectively.


Back to top


Solution setup and implementation

In this section, you focus on defining the transactional aspects of the various components defined in the Proposed solution section.

SCA And transactions

Figure 2 shows the assembly diagram of the module (Integrator) that comprises the Integrator SCA process, which has a WebSphere MQ and JMS export and two imports: one to the stateless session bean (via a mapper) and the other to a Web service.


Figure 2. Assembly diagram
Assembly diagram

You need to set transaction qualifiers at the interface/operation level and at the implementation level for the SCA components. Set them at the interface/operation level for the imports. Figures 3 through 9 show how these qualifiers are set.


Figure 3. Set transaction qualifiers for the Integrator component interface
Set transaction           qualifiers for the Integrator component interface

Figure 4. Set transaction qualifiers for the Integrator component implementation
Set transaction           qualifiers for the Integrator component implementation

Figure 5. Set transaction qualifiers for the SYSTEMBMapper component interface
Set transaction           qualifiers for the SYSTEMBMapper component interface

Figure 6. Set transaction qualifiers for the SYSTEMBMapper component implementation
Set transaction           qualifiers for the SYSTEMBMapper component implementation

Figure 7. Set transaction qualifiers for SYSTEMBSSB Import
Set transaction           qualifiers for SYSTEMBSSB Import

Figure 8. Set transaction qualifiers for SYSTEMCWS Import
Set transaction           qualifiers for SYSTEMCWS Import

Figure 9. WS-AT is enabled for requests sent from Integrator to the external Web service
WS-AT is enabled for           requests sent from Integrator to the external Web service

Now that you've enabled the transaction settings on the Integrator component, which invokes the system B and system C interfaces, you must ensure that the interfaces to system B and system C can execute under a transaction context as described in the next two subsections.

EJB components and transactions

The transaction model for the EJB components is defined by the J2EE specification. All the J2EE vendors (in this case WebSphere Application Server) implement the specification to provide transaction capabilities for EJB components.

There are two forms of transaction support:

  • Container-managed transaction (CMT) involves defining the appropriate transaction settings on the EJB deployment descriptor.
  • Bean-managed transaction (BMT) involves using the code in the session or message-driven bean (MDB) to explicitly mark the boundaries of the transaction using the Java Transaction API (JTA).

Note: For more information on the EJB Transaction Model, see the Resources section at the end of this article.

Please note that SYSTEMB provides a stateless session bean interface and uses CMT.

The declarative transaction settings for the stateless session bean are done in the EJB deployment descriptor (ejb-jar.xml). By default, all methods on the EJB remote interface have a transaction setting of TRANSACTION_REQUIRED (see Figure 10).


Figure 10. Declarative transaction using EJB deployment descriptor
Declarative           transaction using EJB deployment descriptor

In the EJB implementation code, as a part of exception handling, set the transaction to Rollback, as shown in Figure 11.


Figure 11. Set transaction to Rollback
Set transaction to           Rollback

The stateless session bean uses the DBHelper class (JDBC statements are used) to perform the database transaction. An XA data source for the DB2 database is defined and used to execute the JDBC statements.

Web services and transactions

The transaction model for Web services is defined in the WS-AT specification. (Note: Details of this specification are beyond the scope of this article. See Resources for more information on WS-AT.) Enabling WS-AT support for Web services in WebSphere is declarative. You need to make only simple changes on the deployment descriptor, and there's no coding required. System C provides a Web service interface. This Web service was generated by exposing an EJB component as a Web service. The same Web service could have been a Microsoft® .NET component, because the transaction specification used here is WS-AT, which has been implemented by both WebSphere and .NET.

Open the web.xml deployment descriptor in the SYSTEMCWeb project, and select the Servlets tab. Figure 12 shows the simple setting you need to enable for WS-AT.


Figure 12. Enabling WS-AT
Enabling WS-AT

The Web service implementation uses the DBHelper class (JDBC statements are used) to perform the database transaction. An XA data source for the Oracle database is defined and used to execute the JDBC statements.

WebSphere MQ setup

Now let's set up a WebSphere MQ queue manager and two queues:

  • The queue on which the message is sent (MQREQUESTQ)
  • The temporary backout queue that comes into play if there are transaction failures (ERRORQ)
  1. Set the backout threshold on the MQREQUESTQ to 1 (see Figure 13).

    Figure 13. WebSphere MQ setup
    WebSphere MQ setup

  2. Set up an XA-enabled WebSphere MQ Queue Connection Factory (QCF) on the WebSphere MQ JMS Provider in WebSphere. This QCF is used by SYSTEMA to put a message on the queue and by the Integrator component to pick it off the queue.
  3. Set up a listener port in WebSphere that allows the Integrator component to listen to the MQREQUESTQ. Ensure that the Maximum retries field is set to 2. This setting, along with the Backout threshold on the MQREQUESTQ to 1, ensures that on a transaction failure, when a message comes back to the MQREQUESTQ, it's moved to a temporary queue, namely the ERRORQ (see Figure 14).

    Figure 14. WebSphere MQ listener port setup
    WebSphere MQ listener           port setup



Back to top


Solution deployment and testing

In this section, you focus on deploying the above artifacts and testing both a success and a failure scenario to demonstrate how the requirements are met.

Deployment

  • The WebSphere Process Server test environment in WebSphere Integration Developer is used as the deployment target.
  • All the components, including the integration components and system simulators (SYSTEMA, SYSTEMB, SYSTEMC), are deployed on the same server. In a real environment they would be deployed on different servers.
  • Enable TCPMON on the WebSphere Process Server test environment to view the SOAP message with WS-AT headers (see Figure 15).

    Figure 15. Enable TCPMON
    Enable TCPMON

Testing

As part of the first test case, you test the success scenario, and at the end, new data has been inserted into the DB2 database and deleted from the Oracle database.

As part of the second test case, you test the failure scenario. You shut down the Oracle database to prevent SYSTEMC from completing the transaction and, therefore, it's roll backed. Data doesn't get inserted into DB2, and a message goes onto the ERRORQ.

Initial state

Figures 16, 17, and 18 show the state of the systems before the execution of the success scenario. There's no data in the DB2 CUSTOMER tables, but there's data that exists in the Oracle table. There are no messages in the ERRORQ on WebSphere MQ. Follow the figures one after the other; they demonstrate the initial state.


Figure 16. No data in DB2
No data in DB2

Figure 17. Existing data in Oracle
Existing data in           Oracle

Figure 18. No messages on the WebSphere MQ queues
No messages on the WebSphere MQ           queues

Upon execution of the success scenario, data should get inserted into DB2 and deleted from Oracle as defined by the requirements. Because there are no errors, there are no messages in the WebSphere MQ ERRORQ. The SOAP message shows the WS-AT headers, which demonstrate the propagation of transaction to the WS interface.

Success scenario: Execute the URL http://localhost:9080/SYSTEMAWeb/SystemASimulator?fileName=success_customer.xml. Note: The customer data in the file success_customer.xml is put on the WebSphere MQ queue.


Figure 19. Data inserted into DB2
Data inserted into DB2

Figure 20. Data deleted from Oracle
Data deleted from           Oracle

Figure 21. WS-AT SOAP headers
-AT SOAP headers

Figures 22 through 25 show the state of the systems after the execution of the failure scenario. This failure is simulated by shutting down the Oracle database. SYSTEMC is unable to complete its transaction. Even though the insert into DB2 was successful, when the overall distributed transaction rolls back, it's ensured that no data that gets inserted into DB2 and the original message is moved into the ERRORQ of WebSphere MQ. The requirement of having the systems in their original state in case of a failure is satisfied, and the original message is kept aside in a WebSphere MQ queue as per the requirements.

Failure scenario: Execute the URL http://localhost:9080/SYSTEMAWeb/SystemASimulator?fileName=failure_customer.xml. Note: The customer data in the file failure_customer.xml is put on the WebSphere MQ queue.


Figure 22. Shut down Oracle
Shut down Oracle

Figure 23. Transaction failure
Transaction failure

Figure 24. No new data in DB2
No new data in DB2

Figure 25. Message on the ERRORQ
Message on the ERRORQ


Back to top


Summary

EAI involves integrating various applications that support different technology interfaces. Therefore, it's essential that you understand how to implement a transactional integration system that ensures data integrity and consistency in case there's a failure in one of the participants. With tooling and technologies becoming more mature, implementing such a robust solution is becoming increasingly easier—even easier than this demonstration.




Back to top


Download

DescriptionNameSizeDownload method
PI file for this articlearticle_pif.zip65KBHTTP
Information about download methods


Resources

Learn

Get products and technologies
  • Innovate your next development project with IBM trial software, available for download or on DVD.


Discuss


About the author

Rajiv Ramachandran photo

Rajiv Ramachandran is a key member of Prolifics' highly specialized team of IBM WebSphere experts retained to architect, build, and troubleshoot custom WebSphere, Portal and Business Integration solutions. Part of Prolifics' Business Development Team, he specializes in Service-Oriented Architecture, enterprise integration, and business process management.




Rate this page


Please take a moment to complete this form to help us better serve you.



 


 


Not
useful
Extremely
useful
 


Share this....

digg Digg this story del.icio.us del.icio.us Slashdot Slashdot it!



Back to top


DB2, IBM, the IBM logo, and WebSphere are registered trademarks of IBM in the United States, other countries or both. Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both. Microsoft is a trademark of Microsoft Corporation in the United States, other countries, or both. Other company, product, or service names may be trademarks or service marks of others.