JBoss.orgCommunity Documentation

Chapter 2. Conversation Validation with CDL

2.1. Conversation Validation
2.1.1. Overview
2.2. Configuration of Conversation Validation
2.2.1. Central Configuration
2.2.2. Local Configuration using ValidationAction
2.3. Generating the Validator Configuration from a Choreography
2.3.1. Defining the ESB Service endpoints
2.3.2. Generating the validator-config.xml
2.4. Monitoring the Choreography Description

The principle mechanism used for validating conversations within an ESB is through the use of a global filter registered with the jbossesb-properties.xml. This file is located in the $JBossESB/server/default/deploy/jbossesb.sar folder.

This filter is installed as part of the installation process for the Overlord-CDL distribution.

The information concerning what destinations will be validated, and to which choreography/participant they relate, are contained within the validator-config.xml file, contained within the overlord-cdl-validator.esb bundle.

An example of the contents of this file, as used by the TrailBlazer example, is:



    <validator active="true" >
        <service cdmFilePath="models/TrailBlazer.cdm" 
                    participantType="LoanBrokerParticipant" >
            <output epr="jms:queue/esb-tb-creditAgencyQueue" />
            <input epr="jms:queue/esb-tb-creditAgencyQueue_reply" />
            <output epr="jms:queue/esb-tb-jmsBankRequestQueue" />
            <output epr="jms:queue/esb-tb-fileBankRequestQueue" />
            <input epr="jms:queue/esb-tb-jmsBankResponseQueue" />
            <output epr="jms:queue/esb-tb-customerNotifier" />
            <input epr="jms:queue/esb-tb-fileBankResponseQueue" />
        </service>
        <service cdmFilePath="models/TrailBlazer.cdm" 
                    participantType="CreditAgencyParticipant" >
            <input epr="jms:queue/esb-tb-creditAgencyQueue" />
            <output epr="jms:queue/esb-tb-creditAgencyQueue_reply" />
        </service>
        <service cdmFilePath="models/TrailBlazer.cdm" 
                    participantType="BankParticipant" >
            <input epr="jms:queue/esb-tb-jmsBankRequestQueue" />
            <input epr="jms:queue/esb-tb-fileBankRequestQueue" />
            <output epr="jms:queue/esb-tb-jmsBankResponseQueue" />
            <output epr="jms:queue/esb-tb-fileBankResponseQueue" />
        </service>
        <service cdmFilePath="models/TrailBlazer.cdm" 
                    participantType="NotifierParticipant" >
            <input epr="jms:queue/esb-tb-customerNotifier" />
        </service>
    </validator>
                 

The 'validator' element has a single boolean attribute called 'active', which determines whether active or passive validation is used. Active validation means that any erronous messages, that conflict with the behaviour as described in the choreography, should be prevented from being received or sent. Passive validation means that the message will continue to be received or sent, and errors will only be reported for information purposes.

Within the 'validator' element is a list of 'service' elements, one per service being validated. The behaviour of the service being validated is identified by specifying the choreography model and the participant type within the choreography model. Therefore, within the above configuration, the first set of destinations (eprs) are associated with the LoanBrokerParticipant defined within the choreography description model found in the file model/TrailBlazer.cdm, which will be located within the overlord-cdl-validator.esb bundle.

The elements contained within the 'service' element define the input and output eprs (Endpoint References) that are associated with the service. The input eprs are the destinations on which messages will be received and the output eprs are the destinations on which messages will be sent by the service.

The format of the 'epr' attribute will be specific to the type of transport used for the ESB aware destination. Currently only JMS is supported, and can be identified by the protocol prefix 'jms:'.

Although it is preferrable to validate an .esb bundle using the central configuration, there are times when it is not possible to know the specific destination used to send a message to or from a service. In these situations, it will be necessary to explicitly insert an action into a service descriptor's action pipeline, to observe the message.

This can be achieved using the org.pi4soa.jbossesb.validator.ValidationAction, which can be configured with the following properties:

The cdmFilePath references the choreography description model, which will usually be a relative path within the overlord-cdl-validator.esb bundle. The participantType property defines which participant the validator action is representing. The optional inbound property indicates whether the message on the action pipeline is being received (true) or sent (false). The optional request property can be used to determine whether the message on the action pipeline represents a request (true) or response/notification (false).

Once the JBossESB environment has been configured, to perform service validation of a set of ESB services against a choreography description, and the server has been started, then the next step is to launch a tool to view the correlated information from the service validators - and determine if the transactions are being correctly executed.

Within an Eclipse Java project, that contains the choreography description to be monitored, a configuration file called pi4soa.xml needs to be defined on the project's classpath. This file provides details of the JMS configuration parameters required to subscribe for the information generated by the service validators. The contents of this file is:

The destination defined in this file must match the one configured in the pi4soa.sar/pi4soa.xml file within the server.

The next step is to launch the monitoring tool. This is located on the popup menu, for the choreography description (i.e. .cdm) file, by selecting the Choreography->Monitor menu item. Once the tool has been launched, it will load the choreography description, subscribe to the relevant event destination, and then indicate via a message in the bottom status line that it is ready to monitor.

When the information is received, from the service validators representing the different participants (services), it is correlated to show the global status of the business transaction. The list of correlated interactions is show in reverse time order in the image, so in this example a LoanBroker sends a creditCheck message to a CreditAgency, followed by a creditCheckResult being returned.

If any out of sequence or other error situations arise, these are displayed in red.