GVExample CCardQuery

From GreenVulcano Wiki
Revision as of 10:17, 14 February 2012 by Anonymous (talk) (Defining Systems, Channels and Operations)
Jump to: navigation, search

Description

This service has the scope of showing how GreenVulcano® ESB uses DataHandler for quering a DB and implements a Web Services.

CCardQuery Service executes the following operations:

  1. Receives a request Web Service from client, with a credit card number to be controlled.
  2. If this card is locally managed, reads the data using DataHandler.
  3. If this card is managed by an external system, forwards a Web Service request to that system.
  4. Returns the response to the client

VulCon Configuration

To configure CCardQuery service follow these steps:

  1. Define Systems, Channels and Operations
  2. Define the Services
  3. Implement the flows.

Defining Systems, Channels and Operations

To define a System, go to VulCon core view and insert the System CREDIT with the Channel CHANNEL_CREDIT_WS, with the following operations:

Attribute Value
name DataHandler
DBOBuilder name="CREDIT::CCardQuery"
jdbc-connection-name="ds.test_gv"

DHVariables:

name="decimal-separator" value="."
name="grouping-separator" value=","
name="format" value="#0.00"
DBOBuilder/ DBOSelect name="CCardQuery"
transformation="CCardQuery"
type="dbo"
statement id="1"

type="select"

select p.NAME, cc.CNUMBER, cc.CREDIT, cc.ENABLED
from PERSON p, CREDIT_CARD cc
where p.ID = cc.ID_OWNER
and cc.CNUMBER = @{{CNUMBER}}

The operation defined in the DataHandler makes use of the data-transformation module for the data transformations that allow to have data in XML format. So, you need to define the following parameters into the GVDataTransformation section:

Attribute Value
DataSourceSet/LocalFSDataSource formatHandled="xsl" name="XSLDataSource"
repositoryHome="${{gv.app.home}}/gvdte/datasource/xsl"
type="datasource"
XSLTransformation name="CCardQuery" DataSourceSet="Default"
XSLMapName="DataHandler/CREDIT/CCardQuery.xsl"
type="transformation"
XSLTransformation name="QueryExternalInput" DataSourceSet="Default"
XSLMapName=" CREDIT_EXTERNAL/QueryExternalInput.xsl"
type="transformation"
XSLTransformation name="QueryExternalOutput" DataSourceSet="Default"
XSLMapName=" CREDIT_EXTERNAL/QueryExternalOutput.xsl"
type="transformation"


Now insert the Service CREDIT_EXTERNAL with the Channel CHANNEL_CREDIT_EXT with the following operations:

Attribute Value
Name QueryExternal
AxisWebServiceInvoker operation="Query"
ref-dp="EXTERNAL::QueryWSDataProvider"
returnType="body-element"
type="invoker"
WSDLInfo:
type="wsdlinfo"
wsdl="file://${{gv.app.home}}/xmlconfig/wsdl/ExternalCreditService.wsdl"

Definition of Services

To define the CCardQuery Service, use the voice "Wizard new Service" (Right clicking the element Services) and set the following parameters:

Attribute Value
Service name CCardQuery
Group CREDIT_GRP
Scenario Synchronous- Synchronous
Server (Participant) system="CREDIT"
channel="CHANNEL_CREDIT_WS"
request operation= "DataHandler"

A new Flow has been created and must be modified in its main steps. But first it is also needed to add a Participant with the attributes:

  • system="CREDIT_EXTERNAL"
  • channel="CHANNEL_CREDIT_EXT"

Flow implementation

CCardQuery flow

To define the CCardQuery service Flow design it as shown in the picture:


The service receives a Web Service request from a client with a credit card number. If this card is managed locally, reads its data using Data Handler, otherwise forwards the request to an external system using Web Service.


The following table shows the parameters to be defined for each operations of the Flow:

Attribute Value
first-node Prepare
Conditions/GVBufferCondition condition="isInternalCCard"
Property:
name="IS_INTERNAL" operator="equal"
type="gvbuffer-field"
value="true"
value-type="text"
ChangeGVBufferNode dump-in-out="true"
id="prepare"
input="input"
next-node-id="check_internal"
clear-data="false"
PropertyDef:
name="CNUMBER"
value="js{{gvesb::var doc=XMLUtils.parseDOM_S(new java.lang.String(object.getObject()),false,true); XMLConfig.get(doc,’//cred:cnumber’)}}"

PropertyDef:

name="IS_INTERNAL"
value="sql{{ds.test_gv::select decode(count(*), 1, ‘true’, ‘false’) from credit_card here number=ognl{{#object.getProperty(‘CNUMBER’)}}}}"
GVRouting condition="isInternalCCard"
next-node-id="search_internal"
GVOperationNode dump-in-out="false"
id="search_internal"
id-system="CREDIT"
input="input"
next-node-id="end"
op-type="call"
operation-name="DataHandler"
output="output"
GVOperationNode dump-in-out="false"
id="search_external"
id-system="CREDIT_EXTERNAL"
input="input"
next-node-id="end"
op-type="call"
operation-name="QueryExternal"
InputServices:
gvdte-service
crtical="yes",internal="yes"
remove-fields="yes" type="service"
map-name-param:name="map-name" type="param"
value="QueryExternalInput”
name="QueryExternalInput

OutputServices:

gvdte-service:
critical="yes" internal="yes"
remove-fields="yes" type="service"
map-name-param:
name="map-name" type="param"
value="QueryExternalOutput"
name="QueryExternalOutput"
GVEndNode end-business-process="yes"
id="end"
op-type="end"
output="output"