You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by th...@apache.org on 2005/06/14 11:32:38 UTC

cvs commit: ws-fx/kandula/xdocs/img image001.gif image002.gif image003.gif image004.gif image005.gif image006.gif image007.gif image008.gif image009.gif image010.gif

thilina     2005/06/14 02:32:38

  Modified:    kandula/xdocs architecture-guide.html navigation.xml
                        user-guide.html
  Added:       kandula/xdocs index.html
               kandula/xdocs/img image001.gif image002.gif image003.gif
                        image004.gif image005.gif image006.gif image007.gif
                        image008.gif image009.gif image010.gif
  Log:
  Adding the Architecture guide to Kandula xdocs + some more updates.
  
  Revision  Changes    Path
  1.2       +99 -7     ws-fx/kandula/xdocs/architecture-guide.html
  
  Index: architecture-guide.html
  ===================================================================
  RCS file: /home/cvs/ws-fx/kandula/xdocs/architecture-guide.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- architecture-guide.html	7 Jun 2005 11:57:16 -0000	1.1
  +++ architecture-guide.html	14 Jun 2005 09:32:37 -0000	1.2
  @@ -1,7 +1,99 @@
  -<html>
  -<head><title>Architecture Guide for Apache Kandula</title>
  -</head>
  -<body>
  -<h1>Architecture Guide for Apache Kandula</h1>
  -<h2>Coming Soon</h2>
  -</body></html>
  +
  +<HTML>
  +<HEAD><TITLE>Apache Kandula - Architecture Guide</TITLE>
  +<style type="text/css">
  +<!--
  +.style1 {
  +	font-size: x-small;
  +	font-weight: bold;
  +}
  +-->
  +</style>
  +</HEAD>
  +<BODY>
  +
  +<H1>Architectural design</H1>
  +<P align="center"><img src="img/image001.gif" width="611" height="361"></P>
  +<div align="center" class="style1">Figure 1 : Architectural design of the coordination service </div>
  + <P align="justify">A coordination service coordinates activities. Under the model depicted in figure 1, each activity is coordinated by its own coordinator. Henceforth the term coordinator will be used to refer to the individual runtime components that coordinate activities. The term coordination service will be used to refer to the aggregate of all component services such as the activation, registration etc. </P>
  +<p align="justify">When a request is received at one of the endpoints, unless the request is for creating a new activity, in which case a new coordinator is created, it is simply passed on to the coordinator responsible for the activity concerned. The respective coordinator then handles the requested operation. As new activities are created and existing activities are terminated, coordinators also get created and destroyed. Thus at any given time, the number of active coordinators resident in the coordination service is equal to the number of activities coordinated by service. </p>
  +<p align="justify">The coordination service maintains a central repository of all active coordinators. When a new request arrives at any of the endpoints, the activity identifier is used to lookup the coordinator coordinating the particular activity to dispatch the request. To facilitate this process, the coordination service uses activity identifier as a reference property [33] at all of its endpoints. Individual endpoints however may use additional reference properties depending on what is been handled and how. </p>
  +<p align="justify">The activation and registration endpoints are defined by WS-Coordination specification. All other endpoints are defined by coordination type specific specification such WS- AtomicTransaction , WS- BusinessActivity etc. The activation endpoint allows new activities to be created. The registration endpoint allows participants to register for any activity (regardless of its type) coordinated by the service. The purpose of all other endpoints is to facilitate communication between participants and the coordination service based on specific coordination protocols. Hence are known as protocol services. The set of protocol services offered by the coordination service thus depends on the type of activities coordinated by the service. Presently, the implementation can only coordinate atomic transactions. Hence only protocol services supported by the service (completion and coordinator protocol services) are, those defined by WS- AtomicTransaction specification. </p>
  +<p align="justify">When a new activity is created, the coordination service first determines its type: e.g. an atomic transaction, a business activity etc. It then creates a coordinator of appropriate kind to coordinate the activity. All coordinators are required to implement operations defined by WS-Coordination: e.g. create a coordination context for the activity, register participants etc. Additionally, each coordinator is required to support all operations required of it by the type of activity it coordinates. These operations are defined by the specifications that define those specific coordination types: e.g. the operations required of a coordinator coordinating atomic transactions are defined in the WS- AtomicTransaction specification. </p>
  +<p align="justify">The design attempts to encapsulate the complexity of coordinating different types of activities (e.g. atomic transactions, business activities etc.) within a specialized set of coordinators while making use of inheritance and polymorphism to support common functions required of all coordinators by WS-Coordination. As a result the design can be extended to support new types of activities by adding new coordinators capable of handling the necessary protocols. </p>
  +<p align="justify">&nbsp;</p>
  +<H2>Implementation status</H2>
  +<p align="justify">Table 1  lists all operation presently supported by the coordination service. These operations may be implemented by a coordination service as either one-way operations or as request-response type operations. However, the support for one-way operations is mandatory (refer to the WSDL s given in the specifications). Additionally a coordination service may expose the same operations under request-response message pattern. The current implementation only supports request-response message pattern. </p>
  +<p align="center" class="style1"> Table 1 : Operations implemented by the coordination service</p>
  +<table align="center" cellpadding="0" cellspacing="0">
  +  <tr>
  +    <td width="86"><p align="center"><strong>Service </strong></p></td>
  +    <td width="63"><p align="center"><strong>Defined by </strong></p></td>
  +    <td width="182"><p align="center"><strong>WSDL Interface </strong></p></td>
  +    <td width="286"><p align="center"><strong>Operation(s) </strong></p></td>
  +  </tr>
  +  <tr>
  +    <td width="86"><p>Activation </p></td>
  +    <td width="63"><p>WS-COOR </p></td>
  +    <td width="182"><p>ActivationPortTypeRPC </p></td>
  +    <td width="286"><p>createCoordinationContextOperation </p></td>
  +  </tr>
  +  <tr>
  +    <td width="86"><p>Registration </p></td>
  +    <td width="63"><p>WS-COOR </p></td>
  +    <td width="182"><p>RegistrationPortTypeRPC </p></td>
  +    <td width="286"><p>registerOperation </p></td>
  +  </tr>
  +  <tr>
  +    <td width="86" rowspan="2"><p>Completion </p></td>
  +    <td width="63" rowspan="2"><p>WS-AT </p></td>
  +    <td width="182" rowspan="2"><p>CompletionPortTypeRPC </p></td>
  +    <td width="286"><p>commitOperation </p></td>
  +  </tr>
  +  <tr>
  +    <td>rollbackOperation </td>
  +  </tr>
  +  <tr>
  +    <td width="86" rowspan="3"><p>Coordinator </p></td>
  +    <td width="63" rowspan="3"><p>WS-AT </p></td>
  +    <td width="182" rowspan="3"><p>CoordinatorPortTypeRPC </p></td>
  +    <td width="286"><p>replayOperation </p></td>
  +  </tr>
  +  <tr>
  +    <td>abortedOperation </td>
  +  </tr>
  +  <tr>
  +    <td>readOnlyOperation </td>
  +  </tr>
  +</table>
  +<p>&nbsp;</p>
  +<H3>Server side</H3>
  +<p align="center"><img src="img/image002.gif" width="573" height="664"></p>
  +<p align="center" class="style1"> Figure 2 : The class diagram- coordination service (1) </p>
  +<p align="justify">All coordinator instances must implement the WSCoordinator interface (see figure 2). This interface defines the basic requirements expected of any type of coordinator e.g. creation of coordination contexts, registration of participants, identifying the activity they coordinate etc. Coordination type specific interfaces: e.g. WSAtomicTransactionCoordinator , extend from WSCoordinator and define the requirements of particular coordination types, i.e. Atomic Transactions in this case. </p>
  +<p align="justify">WSCoordinatorImpl is an abstract base class that implements the WSCoordinator interface. It also provides functions such as locking, required by all coordinators. All concrete classes, e.g. WSAtomicTransactionCoordinatorImpl , that implement a particular coordination type extend from WSCoordinatorImpl . WSCoordinatorImpl serves as an adaptor for its subclasses. </p>
  +<p align="justify">The WSAtomicTransactionCoordinatorImpl implements the atomic transaction coordination type: for instance the method commit carries out the two-phase commit protocol. It also implements operations required by protocol services such as Completion and Coordinator [30]. </p>
  +<p align="justify">The class CoordinationService shown in figure 3 is responsible for creating an appropriate coordinator for new or imported activities. It also allows local transactions (JTA) to be imported into the coordination service and to be coordinated as activities. For each activity whose coordination type is Atomic Transaction, the coordination service creates a new instance of the class WSAtomicTransactionCoordinatorImpl . For each local transaction, imported into the coordinator, it creates an instance of SurrogateWSAtomicTransactionCoordinator . </p>
  +<p align="justify">The SurrogateWSAtomicTransactionCoordinator registers it self as a participant of the local transaction passed to its constructor and also implements the interface javax.Transaction.xa.XAResource (see appendix C). When the local transaction is committed or rolled back the class simply calls the corresponding methods of the WSAtomicTransactionCoordinatorImpl (the super class) inside its XAResource implementation to extend the scope of the two phase commit protocol carried out on local resources to participants of the atomic transaction. The class overrides the commit and rollback methods of the WSAtomicTransactionCoordinatorImpl . The overridden methods simply call the commit and rollback methods of the local transaction instead. This guarantees that the local transaction is committed (or rolled back) if the atomic transaction is terminated first. As a result even when the atomic transaction is terminated first, two-phase commit protocol is still carried out by the local transaction manager rather than the atomic transaction coordinator: i.e. WSAtomicTransactionCoordinatorImpl . </p>
  +<p align="center"><img src="img/image003.gif" width="391" height="175"></p>
  +<p align="center" class="style1"> Figure 3 : Class diagram - coordination service (2) </p>
  +<p align="justify"> The CoordinationService class a singleton. Apart from creating new coordinators the class is also used in dispatching requests to respective coordinators by different service endpoints. The class maintains a hash map of all active coordinators, keyed by their activity identifiers. When a new request is received, the endpoint uses the reference properties to locate the activity identifier of the activity to which the request belongs. Then the getCoordinator method of CoordinationService is used to obtain a reference to the coordinator coordinating the activity. </p>
  +<p align="justify">&nbsp;</p>
  +<h3>Client Side (Standalone)</h3>
  +<p align="justify"> The TransactionManager class shown in following figure is used by standalone clients to demarcate transaction boundaries. The TransactionManager maintains the transaction context associated with each thread as part of its internal data structure. A thread's transaction context is either null or refers to a specific atomic transaction. Each transaction is encapsulated by a WSAtomicTransaction object, which can be used to perform operations which are specific to the target transaction, regardless of the calling thread's transaction context. The TransactionManager class is the web service equivalent of JTA javax.transaction.TransactionManager.</p>
  +<p align="center"><img src="img/image004.gif" width="340" height="525"></p>
  +<p align="center" class="style1"> Figure 4 : The class diagram- coordination service (3) </p>
  +<p align="justify"> The WSAtomicTransactionHandler is responsible for flowing the executing thread's transaction context. It does so by checking with the TransactionManager whether the current thread has a transaction context whenever the Client Axis Engine calls it's invoke method on request flow [20]. If the thread has a transaction context it obtains the respective coordination context by calling the getCoordinationContext method of the WSAtomicTransaction object representing the particular transaction. The coordination context is then added to the SOAP header of the request message as stipulated by WS-Coordination. </p>
  +<p>&nbsp;</p><!-- Have to redo this code snapshot using source & pre tags -->
  +<p align="center"><img src="img/image005.gif" width="577" height="455"></p>
  +<p align="center" class="style1"> Figure 5 : Usage scenario - a standalone client calling a transactional web service </p>
  +<p> Figure 5, shows a standalone client that uses the implementation. The sequence diagram in figure 6 illustrates the depicted scenario. The client attempts to transfer a sum of money through a Bank service. The client first starts a new transaction by calling the begin method of the TransactionManager . This results in the creation of a new atomic transaction as shown in the sequence diagram. Within the transaction it invokes operations that perform a credit and a debit equal in amount to carry out the monetary transfer. Afterwards, the transaction is rolled back aborting the monetary transfer by calling the rollback method of the TransactionManager . </p>
  +<p align="center"><img src="img/image006.gif" width="671" height="639"></p>
  +<p align="center" class="style1"> Figure 6 : Sequence Diagram - a standalone client calling a transactional web service </p>
  +<p align="center" class="style1">&nbsp;</p>
  +<h3>Client Side (J2EE)</h3>  
  +<p align="justify"> On the J2EE platform, clients use JTA to manage transactions. Hence there is no web service specific API for transaction management. In fact it is awkward to define such an API. Instead, when a client invokes a web service, the run-time implicitly exports the transaction context associated with the current thread as an atomic transaction. The middleware to augment J2EE runtime to perform this operation. </p>
  +<p align="justify">&nbsp;</p>
  +<h2>Possible Future Extensions </h2>
  +<p align="justify">In addition to supporting WS- BusinessActivity the present WS- AtomicTransaction implementation needs to be perfected to support numerous interoperability scenarios described in the specification.</p>
  +<p align="justify">&nbsp;</p>
  
  
  
  1.3       +1 -1      ws-fx/kandula/xdocs/navigation.xml
  
  Index: navigation.xml
  ===================================================================
  RCS file: /home/cvs/ws-fx/kandula/xdocs/navigation.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- navigation.xml	8 Jun 2005 05:57:56 -0000	1.2
  +++ navigation.xml	14 Jun 2005 09:32:37 -0000	1.3
  @@ -3,7 +3,7 @@
     <title>Kandula</title>
     <body>
       <menu name="Kandula">
  -      	<item name="Simple User Guide" href="user-guide.html"/>
  +      	<item name="User Guide" href="user-guide.html"/>
   		<item name="Architecture Guide" href="architecture-guide.html"/>
       </menu>    
     </body>
  
  
  
  1.5       +84 -201   ws-fx/kandula/xdocs/user-guide.html
  
  Index: user-guide.html
  ===================================================================
  RCS file: /home/cvs/ws-fx/kandula/xdocs/user-guide.html,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- user-guide.html	8 Jun 2005 07:09:22 -0000	1.4
  +++ user-guide.html	14 Jun 2005 09:32:37 -0000	1.5
  @@ -6,169 +6,12 @@
   
   <H1>User Guide for Apache Kandula</H1>
   <H2>Purpose</H2>
  -<P>This tutorial provides a brief overview of the Kandula project 
  +<P align="justify">This tutorial provides a brief overview of the Kandula project 
   and how to try out the provided examples. For a detail illustration on the 
  -design, please refer to the provided architecture documentation.</P>
  -<H2>Objectives</H2>
  -<P>The Kandula project has two main objectives:</P>
  -<OL type=1>
  -  <LI>Provide an open source 
  -  implementation for the web services coordination and transaction management 
  -  frameworks defined by WS-Coordination, WS-<SPAN 
  - >AtomicTransaction and WS-<SPAN 
  - >BusinessActivity.</li> 
  -  <LI>Integrate existing open 
  -  source JTA implementations (e.g. JOTM, JBoss, 
  -  Geronimo, etc.) with the web services transaction management framework so that 
  -  J2EE web services and clients may take part in atomic transactions while using 
  -  JTA for transaction management. </LI></OL>
  -<H2>Overview</H2>
  -<P>Think of a hypothetical web service that provides banking 
  -services. The service provides 2 operations: a <SPAN >credit 
  -operation and a <SPAN 
  -style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">debit 
  -operation. Now if the two operations are to be used to perform a monetary 
  -transfer between two accounts, it must be ensured that either both operations 
  -succeed or neither does. Under these circumstances, the web services 
  -coordination framework can be used to ensure the atomicity of operations. The 
  -sample code below shows how a standalone client may use the Kandula implementation 
  -in this scenario-</P>
  -<P ><source>public class ... implements SessionBean {
  -private SessionContext ctx;
  -	public void setSessionContext(SessionContext ctx) {
  -		this.ctx= ctx;	
  -	}
  -	public ... foo(....) {
  -		Bank bank= new BankServiceLocator().getBank();
  -		UserTransaction ut= ctx.getUserTransaction();
  -		ut.begin();
  -		try {
  -			bank.credit(1001, 10);
  -			bank.debit(1002, 10);
  -		}catch (Exception e) {
  -			ut.rollback();
  -		}
  -		ut.commit();
  -	}
  -}
  -</source></P>
  -<P></P>
  -<P >The web services coordination framework describes how web 
  -services may join in and participate in coordinated activities. It also 
  -stipulates how participants may reach collective agreement on the ultimate 
  -outcome of such activities.</P>
  -<P >Though the framework is platform independent, participant 
  -services unavoidably need to use numerous incompatible, platform-specific 
  -technologies to perform transactional work. For instance, if the banking service 
  -mentioned above is implemented in J2EE, its implementation would use JTA 
  -distributed transactions necessarily. Hence in the context of coordinated 
  -activities, the underlying JTA runtime is required to coordinate with an 
  -external coordinator to decide if and when to make any work performed as part of 
  -such activities, persistent. The Kandula provides this capability by integrating 
  -with existing transaction managers so that JTA distributed transactions started 
  -locally may be coordinated by an external coordinator through the web services 
  -coordination framework.</P>
  -<P >Furthermore, the Kandula runtime is also capable of implicitly 
  -propagating the local transaction context of a calling thread on web service 
  -invocations. This allows distributed transactions to be propagated across 
  -heterogeneous application domains. To illustrate this point consider how the 
  -same use case illustrated above would be implemented by a J2EE client.</P>
  -<P><source> 
  -public class ... implements SessionBean {
  -	private SessionContext ctx;
  -	public void setSessionContext(SessionContext ctx) {
  -		this.ctx= ctx;	
  -	}
  -	public ... foo(....) {
  -		Bank bank= new BankServiceLocator().getBank();
  -		UserTransaction ut= ctx.getUserTransaction();
  -		ut.begin();
  -		try {
  -		bank.credit(1001, 10);	
  -		bank.debit(1002, 10);
  -		}catch (Exception e) {
  -			ut.rollback();
  -		}
  -		ut.commit();	
  -	}
  -}</source></P>
  -<P >Notice that the component uses JTA to ensure atomicity of 
  -operations. At runtime however, the transaction context of the calling thread is 
  -propagated to the remote service using the web services coordination 
  -framework.</P>
  -<H2>Deliverables</H2>
  -<P >Mainly, the Kandula project delivers a coordination service and 
  -a server runtime for using the web services coordination framework for 
  -distributed transaction management.</P>
  -<P >The coordination service comprise of following web 
  -services:</P>
  -<UL>
  -  <LI>Activation service 
  -  (WS-Coordination) 
  -  <LI>Registration service 
  -  (WS-Coordination) 
  -  <LI>Completion service 
  -  (WS-AtomicTransaction) 
  -  <LI>Coordinator service 
  -  (WS-AtomicTransaction) 
  -  <LI>Completion service 
  -  (WS-AtomicTransaction) </LI></UL>
  -<P >The server runtime is capable of importing and exporting 
  -transactions to and from J2EE, in accordance with the coordination framework 
  -described by WS-Coordination and WS-AtomicTransaction. 
  -It also provides a participant service in accordance with WS-AtomicTransaction. As stated before, this allows J2EE web 
  -services and clients to take part in atomic transactions while using JTA for 
  -transaction management.</P>
  -<P >Additionally, Kandula also includes a Transaction Manager 
  -modeled on javax.transaction.TransactionManager, 
  -for use by standalone clients that need to coordinate activities using a 
  -coordination service. Note that this transaction manager cannot be used to 
  -perform any transactional work at the client end like JTA implementations sited 
  -elsewhere in this document. It merely provides a convenient API for standalone 
  -clients to use the coordination framework.</P>
  -<H2>Status</H2>
  -<P >Presently, the implementation only supports atomic 
  -transaction coordination type. Business activities will be supported in 
  -future.</P>
  -<P>The framework supports importing atomic transactions for J2EE 
  -web services, i.e. JSR109 (see src/samples/interop). 
  -It also supports exporting transactions along web service calls made from J2EE 
  -by J2EE components like servlets and EJB s (see src/samples/servlet).</P>
  -<P >So far the Kandula runtime has been integrated with 2 JTA 
  -implementations, Java Open Transaction Manager (JOTM) from ObjectWeb and JBoss transaction 
  -manager from JBoss.</P>
  -<H2>Dependencies</H2>
  -<P >Even though in practice the Kandula server runtime would be 
  -most likely used in conjunction with a J2EE server, in order to make the test 
  -cases as simple as possible, they have been designed to use Apache Tomcat servlet container instead.</P>
  -<P >To try out the test cases it is required to integrate at 
  -least one of the above mentioned JTA implementations with Tomcat. To be specific 
  -you may use either one of the following transaction managers:</P>
  -<UL type=disc>
  -  <LI>JOTM version 1.4.3 or 
  -  later 
  -  <LI>JBoss transaction manager from JBoss-4.0.0RC1 or later 
  -  application server distribution. </LI></UL>
  -<H2>Using Kandula with different JTA implementations</H2>
  -<P >Kandula architecture has been designed so that it may be used 
  -with any JTA implementation provided that it implements the org.apache.ws.transaction.participant.j2ee.TransactionManagerGlue 
  -interface. Two sample implementations of this interface for JOTM (version 1.4.3 
  -or later; version 1.5.3 is preferred but this implementation does not take 
  -advantage of XATerminator 
  -provided in this later version of JOTM) and JBoss 
  -transaction manager (JBoss-4.0.0RC1 or later) have been provided under %KANDULA_HOME%/src/java/org/apache/ws/transaction/participant/j2ee.</P>
  -<P >In general given a transaction manager, the user should first 
  -determine whether it supports JCA 1.5 transaction inflow mechanism. If so, it is 
  -generally possible to come up with an implementation for the above interface. It 
  -may not be possible to do so otherwise.</P>
  -<P >Lastly, before the Maven build is done (see below), the TransactionManagerGlueImpl 
  -property in %KANDULA_HOME%/conf/jta.conf must be set to the fully qualified 
  -class name of the class implementing org.apache.ws.transaction.participant.j2ee.TransactionManagerGlue 
  -interface for the transaction manager used by the application server 
  -runtime.</P>
  +design, please refer to the provided architecture documentation. For an overview , please refer to the "About Apache Kandula"</P>
   <H2>Running the provided samples</H2>
   <H3>Setup the TCP Monitor</H3>
  -<P >All examples and Kandula default endpoint configuration 
  +<P align="justify" >All examples and Kandula default endpoint configuration 
   parameters given in %KANDULA_HOME%/conf/endpoints.conf assume that you are using the 
   TCP monitor to monitor and redirect soap messages sent to port 8081 on localhost, to port 8080.</P>
   <H3>Configure Jakarta-Tomcat and deploy Axis</H3>
  @@ -179,45 +22,66 @@
     Axis-1.2beta3 or later is required. </LI></OL>
   <H3>Build and deploy Kandula</H3>
   <OL  type=1>
  -  <LI >Modify %KANDULA_HOME%/conf/jta.conf. The TransactionManagerGlueImpl 
  -  property must be set to the fully qualified class name of the class 
  -  implementing org.apache.ws.transaction.participant.j2ee.TransactionManagerGlue 
  -  interface for the transaction manager that you plan to use. By default the 
  -  property is set to use the sample implementation for JOTM. 
  -  <LI >If 
  -  necessary, modify %KANDULA_HOME%/conf/endpoints.conf. The properties declared here 
  -  configure the numerous endpoints of the coordination service and server 
  -  runtime. The default values provided assume that services are available at 
  -  http://localhost:8081/axis/services/...
  -  If you use normal settings for Catalina and Axis, you do not need to modify 
  -  these properties. 
  -  <LI  style="mso-list: l1 level1 lfo9; tab-stops: list .5in">To 
  -  build the kandula-0.1-SNAPSHOT.jar, 
  -  enter<BR clear=all><BR clear=all>maven<BR clear=all><BR 
  -  clear=all>in %KANDULA_HOME%. 
  -  <LI>Copy the j2ee.jar, addressing.jar &amp; 
  -  jotm-*.jar files from %KANDULA_HOME%/target/lib to %CATALINA_HOME%/shared/lib. 
  -  <LI >*Move* all Axis jars in 
  -%CATALINA_HOME%/webapps/axis/WEB-INF/lib to %CATALINA_HOME%/shared/lib 
  -
  -  <LI  >Copy %KANDULA_HOME%/target/kandula-0.1-SNAPSHOT.jar 
  -  to %CATALINA_HOME%/shared/lib. 
  -
  -  <LI >Use 
  -  the server-config.wsdd file provided in %KANDULA_HOME%/conf 
  -  to deploy the services sited above. 
  -  <LI>Use 
  -  the server-config.wsdd file provided in %KANDULA_HOME%/conf 
  -  to deploy Kandula and WS-Addressing handlers. <BR>Note: Kandula 
  -  implementation uses reference properties that must be configured with the 
  -  WS-Addressing handler as illustrated in the provided server-config.wsdd file. The global type mappings 
  -  provided in %KANDULA_HOME%/conf/server-config.wsdd are used by the WS-Addressing 
  -  implementation and *must be* copied to the server-config.wsdd. 
  -  <LI>Copy %KANDULA_HOME%/conf/client-config.wsdd to %CATALINA_HOME%/webapps/axis/WEB-INF/classes. Modify the 
  -  client-config.wsdd copied to %CATALINA_HOME%/webapps/axis/WEB-INF/classes to deploy the 
  - org.apache.ws.transaction.participant.j2ee.handler.TransactionHandler 
  -  on request flow. Also remove the org.apache.ws.transaction.participant.standalone.handler.TransactionHandler 
  -  used by standalone clients. The modified client-config.wsdd is shown below. </LI></OL>
  +  <LI >
  +    <div align="left">Modify %KANDULA_HOME%/conf/jta.conf. The TransactionManagerGlueImpl 
  +      property must be set to the fully qualified class name of the class 
  +      implementing org.apache.ws.transaction.participant.j2ee.TransactionManagerGlue 
  +      interface for the transaction manager that you plan to use. By default the 
  +      property is set to use the sample implementation for JOTM. 
  +    </div>
  +  <LI >
  +    <div align="left">If 
  +      necessary, modify %KANDULA_HOME%/conf/endpoints.conf. The properties declared here 
  +      configure the numerous endpoints of the coordination service and server 
  +      runtime. The default values provided assume that services are available at 
  +      http://localhost:8081/axis/services/...
  +      If you use normal settings for Catalina and Axis, you do not need to modify 
  +      these properties. 
  +    </div>
  +  <LI  style="mso-list: l1 level1 lfo9; tab-stops: list .5in">
  +    <div align="left">To 
  +      build the kandula-0.1-SNAPSHOT.jar, 
  +      enter<BR clear=all>
  +      <BR clear=all>
  +      maven<BR clear=all>
  +      <BR 
  +  clear=all>
  +  in %KANDULA_HOME%.</div>
  +  <LI>
  +    <div align="left">Copy the j2ee.jar, addressing.jar &amp; jotm-*.jar files from %KANDULA_HOME%/target/lib to %CATALINA_HOME%/shared/lib. </div>
  +  <LI >
  +    <div align="left">*Move* all Axis jars in 
  +  %CATALINA_HOME%/webapps/axis/WEB-INF/lib to %CATALINA_HOME%/shared/lib 
  +  
  +  </div>
  +  <LI  >
  +    <div align="left">Copy %KANDULA_HOME%/target/kandula-0.1-SNAPSHOT.jar 
  +    to %CATALINA_HOME%/shared/lib. 
  +  
  +  </div>
  +  <LI >
  +    <div align="left">Use 
  +    the server-config.wsdd file provided in %KANDULA_HOME%/conf 
  +    to deploy the services sited above. 
  +    </div>
  +  <LI>
  +    <div align="left">Use 
  +    the server-config.wsdd file provided in %KANDULA_HOME%/conf 
  +    to deploy Kandula and WS-Addressing handlers. <BR>
  +    Note: Kandula 
  +    implementation uses reference properties that must be configured with the 
  +    WS-Addressing handler as illustrated in the provided server-config.wsdd file. The global type mappings 
  +    provided in %KANDULA_HOME%/conf/server-config.wsdd are used by the WS-Addressing 
  +    implementation and *must be* copied to the server-config.wsdd. 
  +    </div>
  +  <LI>
  +    <div align="left">Copy %KANDULA_HOME%/conf/client-config.wsdd to %CATALINA_HOME%/webapps/axis/WEB-INF/classes. Modify the 
  +    client-config.wsdd copied to %CATALINA_HOME%/webapps/axis/WEB-INF/classes to deploy the 
  +   org.apache.ws.transaction.participant.j2ee.handler.TransactionHandler 
  +    on request flow. Also remove the org.apache.ws.transaction.participant.standalone.handler.TransactionHandler 
  +    used by standalone clients. The modified client-config.wsdd is shown below. </div>
  +  </LI>
  +</OL>
   <P><source><pre>
   &lt;deployment ...&gt;
       &lt;globalConfiguration&gt;
  @@ -256,5 +120,24 @@
     <LI>Run 
     the provided JUnit test cases by entering,<BR 
     clear=all><BR clear=all>ant test<BR clear=all><BR 
  -  clear=all>in %KANDULA_HOME%/src/samples/interop   
  -</LI></OL></DIV></BODY></HTML>
  +  clear=all>in %KANDULA_HOME%/src/samples/interop</LI>
  +</OL>
  +<p>&nbsp;</p>
  +<H2>Using Kandula with different JTA implementations</H2>
  +<P align="left">Kandula architecture has been designed so that it may be used 
  +with any JTA implementation provided that it implements the org.apache.ws.transaction.participant.j2ee.TransactionManagerGlue 
  +interface. Two sample implementations of this interface for JOTM (version 1.4.3 
  +or later; version 1.5.3 is preferred but this implementation does not take 
  +advantage of XATerminator 
  +provided in this later version of JOTM) and JBoss 
  +transaction manager (JBoss-4.0.0RC1 or later) have been provided under %KANDULA_HOME%/src/java/org/apache/ws/transaction/participant/j2ee.</P>
  +<P align="left" >In general given a transaction manager, the user should first 
  +determine whether it supports JCA 1.5 transaction inflow mechanism. If so, it is 
  +generally possible to come up with an implementation for the above interface. It 
  +may not be possible to do so otherwise.</P>
  +<P align="left" >Lastly, before the Maven build is done (see below), the TransactionManagerGlueImpl 
  +property in %KANDULA_HOME%/conf/jta.conf must be set to the fully qualified 
  +class name of the class implementing org.apache.ws.transaction.participant.j2ee.TransactionManagerGlue 
  +interface for the transaction manager used by the application server 
  +runtime.</P>
  +</BODY></HTML>
  
  
  
  1.1                  ws-fx/kandula/xdocs/index.html
  
  Index: index.html
  ===================================================================
  
  <HTML>
  <HEAD><TITLE>Kandula - Apache Kandula</TITLE>
  </HEAD>
  <BODY>
  
  <H1>Apache Kandula</H1>
  <H2>Purpose</H2>
  <P align="justify"> Kandula will provide an open-source implementation of WS-Coordination, WS-AtomicTransaction and WS-BusinessActivity based on Axis. The initial implementation will be in Java using Axis/Java. In addition to providing an implementation, a major focus of this project would be to ensure interoperability with other implementations of above specifications, particularly those by Microsoft (.NET) and IBM.</P>
  <P align="justify">&nbsp;</P>
  <H2>Objectives</H2>
  <P align="justify">The Kandula project has two main objectives:</P>
  <div align="justify">
    <OL type=1>
      <LI>Provide an open source 
        implementation for the web services coordination and transaction management 
        frameworks defined by WS-Coordination, WS-<SPAN 
   >AtomicTransaction and WS-<SPAN 
   >BusinessActivity.</li>
        <LI>Integrate existing open 
        source JTA implementations (e.g. JOTM, JBoss, 
        Geronimo, etc.) with the web services transaction management framework so that 
        J2EE web services and clients may take part in atomic transactions while using 
        JTA for transaction management</LI>
    </OL>
    <p>&nbsp;</p>
  </div>
  
  <H2>Overview</H2>
  <P align="justify">Think of a hypothetical web service that provides banking 
  services. The service provides 2 operations: a credit 
  operation and a debit 
  operation. Now if the two operations are to be used to perform a monetary 
  transfer between two accounts, it must be ensured that either both operations 
  succeed or neither does. Under these circumstances, the web services 
  coordination framework can be used to ensure the atomicity of operations. The 
  sample code below shows how a standalone client may use the Kandula implementation 
  in this scenario-</P>
  <P ><source>public class ... implements SessionBean {
  private SessionContext ctx;
  	public void setSessionContext(SessionContext ctx) {
  		this.ctx= ctx;	
  	}
  	public ... foo(....) {
  		Bank bank= new BankServiceLocator().getBank();
  		UserTransaction ut= ctx.getUserTransaction();
  		ut.begin();
  		try {
  			bank.credit(1001, 10);
  			bank.debit(1002, 10);
  		}catch (Exception e) {
  			ut.rollback();
  		}
  		ut.commit();
  	}
  }
  </source></P>
  <P align="justify"></P>
  <P align="justify" >The web services coordination framework describes how web 
  services may join in and participate in coordinated activities. It also 
  stipulates how participants may reach collective agreement on the ultimate 
  outcome of such activities.</P>
  <P align="justify" >Though the framework is platform independent, participant 
  services unavoidably need to use numerous incompatible, platform-specific 
  technologies to perform transactional work. For instance, if the banking service 
  mentioned above is implemented in J2EE, its implementation would use JTA 
  distributed transactions necessarily. Hence in the context of coordinated 
  activities, the underlying JTA runtime is required to coordinate with an 
  external coordinator to decide if and when to make any work performed as part of 
  such activities, persistent. The Kandula provides this capability by integrating 
  with existing transaction managers so that JTA distributed transactions started 
  locally may be coordinated by an external coordinator through the web services 
  coordination framework.</P>
  <P align="justify" >Furthermore, the Kandula runtime is also capable of implicitly 
  propagating the local transaction context of a calling thread on web service 
  invocations. This allows distributed transactions to be propagated across 
  heterogeneous application domains. To illustrate this point consider how the 
  same use case illustrated above would be implemented by a J2EE client.</P>
  <P><source> 
  public class ... implements SessionBean {
  	private SessionContext ctx;
  	public void setSessionContext(SessionContext ctx) {
  		this.ctx= ctx;	
  	}
  	public ... foo(....) {
  		Bank bank= new BankServiceLocator().getBank();
  		UserTransaction ut= ctx.getUserTransaction();
  		ut.begin();
  		try {
  		bank.credit(1001, 10);	
  		bank.debit(1002, 10);
  		}catch (Exception e) {
  			ut.rollback();
  		}
  		ut.commit();	
  	}
  }</source></P>
  <P align="justify" >Notice that the component uses JTA to ensure atomicity of 
  operations. At runtime however, the transaction context of the calling thread is 
  propagated to the remote service using the web services coordination 
  framework.</P>
  <P align="justify" >&nbsp;</P>
  <H2>Deliverables</H2>
  <P align="justify" >Mainly, the Kandula project delivers a coordination service and 
  a server runtime for using the web services coordination framework for 
  distributed transaction management.</P>
  <P align="justify" >The coordination service comprise of following web 
  services:</P>
  <div align="justify">
    <UL>
      <LI>Activation service 
        (WS-Coordination) 
      <LI>Registration service 
        (WS-Coordination) 
      <LI>Completion service 
        (WS-AtomicTransaction) 
      <LI>Coordinator service 
        (WS-AtomicTransaction) 
      <LI>Completion service 
        (WS-AtomicTransaction) </LI>
    </UL>
  </div>
  <P align="justify" >The server runtime is capable of importing and exporting 
  transactions to and from J2EE, in accordance with the coordination framework 
  described by WS-Coordination and WS-AtomicTransaction. 
  It also provides a participant service in accordance with WS-AtomicTransaction. As stated before, this allows J2EE web 
  services and clients to take part in atomic transactions while using JTA for 
  transaction management.</P>
  <P align="justify" >Additionally, Kandula also includes a Transaction Manager 
  modeled on javax.transaction.TransactionManager, 
  for use by standalone clients that need to coordinate activities using a 
  coordination service. Note that this transaction manager cannot be used to 
  perform any transactional work at the client end like JTA implementations sited 
  elsewhere in this document. It merely provides a convenient API for standalone 
  clients to use the coordination framework.</P>
  <P align="justify" >&nbsp;</P>
  <H2>Status</H2>
  <P align="justify" >Presently, the implementation only supports atomic 
  transaction coordination type. Business activities will be supported in 
  future.</P>
  <P align="justify">The framework supports importing atomic transactions for J2EE 
  web services, i.e. JSR109 (see src/samples/interop). 
  It also supports exporting transactions along web service calls made from J2EE 
  by J2EE components like servlets and EJB s (see src/samples/servlet).</P>
  <P align="justify" >So far the Kandula runtime has been integrated with 2 JTA 
  implementations, Java Open Transaction Manager (JOTM) from ObjectWeb and JBoss transaction 
  manager from JBoss.</P>
  <P align="justify" >&nbsp;</P>
  <H2>Dependencies</H2>
  <P align="justify" >Even though in practice the Kandula server runtime would be 
  most likely used in conjunction with a J2EE server, in order to make the test 
  cases as simple as possible, they have been designed to use Apache Tomcat servlet container instead.</P>
  <P align="justify" >To try out the test cases it is required to integrate at 
  least one of the above mentioned JTA implementations with Tomcat. To be specific 
  you may use either one of the following transaction managers:</P>
  <div align="justify">
    <UL type=disc>
      <LI>JOTM version 1.4.3 or 
        later 
      <LI>JBoss transaction manager from JBoss-4.0.0RC1 or later 
        application server distribution. </LI>
    </UL>
  </div>
  <UL type=disc>
  </UL>
  </BODY></HTML>
  
  
  
  1.1                  ws-fx/kandula/xdocs/img/image001.gif
  
  	<<Binary file>>
  
  
  1.1                  ws-fx/kandula/xdocs/img/image002.gif
  
  	<<Binary file>>
  
  
  1.1                  ws-fx/kandula/xdocs/img/image003.gif
  
  	<<Binary file>>
  
  
  1.1                  ws-fx/kandula/xdocs/img/image004.gif
  
  	<<Binary file>>
  
  
  1.1                  ws-fx/kandula/xdocs/img/image005.gif
  
  	<<Binary file>>
  
  
  1.1                  ws-fx/kandula/xdocs/img/image006.gif
  
  	<<Binary file>>
  
  
  1.1                  ws-fx/kandula/xdocs/img/image007.gif
  
  	<<Binary file>>
  
  
  1.1                  ws-fx/kandula/xdocs/img/image008.gif
  
  	<<Binary file>>
  
  
  1.1                  ws-fx/kandula/xdocs/img/image009.gif
  
  	<<Binary file>>
  
  
  1.1                  ws-fx/kandula/xdocs/img/image010.gif
  
  	<<Binary file>>