tuscany-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Tuscany: SCA Java implementation.xquery (page edited)
Date Mon, 24 Sep 2007 21:25:00 GMT
SCA Java implementation.xquery (TUSCANY) edited by Raymond Feng
      Page: http://cwiki.apache.org/confluence/display/TUSCANY/SCA+Java+implementation.xquery
   Changes: http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=66257&originalVersion=5&revisedVersion=6






Content:
---------------------------------------------------------------------

{section:border=false}
{column:width=15%}
{include: SCA Java Subproject Menu}
{include: Java SCA Menu New}
{column}
{column:width=85%}

h3. <implementation.xquery>
Tuscany provides an implementation type to support XQuery. With this extension, the business
logic can be implemented by XQuery scripts. 

h3. The XML configuration

<implementation.xquery> is declared under namespace "http://tuscany.apache.org/xmlns/sca/1.0".
The location attribute specifies the XQuery script. It can be a file or resource name against
the current classloader.

{code}
    <component name="QuoteJoinComponent" xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0">
        <tuscany:implementation.xquery location="META-INF/sca/quote_join.xq" />
        <reference name="quoteCalculator" target="QuoteCalculatorComponent" />
    </component>
{code}

h3. Some examples
{code}
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://quote.xquery/client"
    xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0" xmlns:xq="http://quote.xquery/client"
    name="xqueryquotewsclient">

    ...
    <component name="QuoteJoinComponent">
        <tuscany:implementation.xquery location="META-INF/sca/quote_join.xq" />
        <reference name="quoteCalculator" target="QuoteCalculatorComponent" />
    </component>

    <component name="QuoteJoinPropertiesComponent">
        <tuscany:implementation.xquery location="META-INF/sca/quote_join_properties.xq"
/>
        <!-- Reset the default namespace as the sub-elements under pri:priceQuote are
            unqualified -->
        <property name="priceQuoteDoc">
            <pri:priceQuote xmlns:pri="http://www.example.org/price" xmlns="">
                <customerName>Acme Inc</customerName>
                <shipAddress street="12 Springs Rd" city="Morris Plains" state="nj" zip="07960"
/>
                <priceRequests>
                    <priceRequest>
                        <widgetId>12</widgetId>
                        <price>1.0</price>
                    </priceRequest>
                    <priceRequest>
                        <widgetId>134</widgetId>
                        <price>34.1</price>
                    </priceRequest>
                    <priceRequest>
                        <widgetId>211</widgetId>
                        <price>10.0</price>
                    </priceRequest>
                </priceRequests>
            </pri:priceQuote>
        </property>
        <!-- Reset the default namespace as the sub-elements under ava:availQuote are
            unqualified -->

        <property name="availQuoteDoc">
            <ava:availQuote xmlns:ava="http://www.example.org/avail" xmlns="">
                <availRequest>
                    <widgetId>12</widgetId>
                    <requestedQuantity>10</requestedQuantity>
                    <quantityAvail>true</quantityAvail>
                    <shipDate>2003-03-22</shipDate>
                </availRequest>
                <availRequest>
                    <widgetId>134</widgetId>
                    <requestedQuantity>345</requestedQuantity>
                    <quantityAvail>false</quantityAvail>
                    <shipDate>BackOrder</shipDate>
                </availRequest>
                <availRequest>
                    <widgetId>211</widgetId>
                    <requestedQuantity>100</requestedQuantity>
                    <quantityAvail>true</quantityAvail>
                    <shipDate>2003-04-21</shipDate>
                </availRequest>
            </ava:availQuote>
        </property>
        <property name="taxRate">0.1</property>
        <reference name="quoteCalculator" target="QuoteCalculatorComponent" />
    </component>

    <component name="QuoteJoinExternalReferencesComponent">
        <tuscany:implementation.xquery location="META-INF/sca/quote_join_external_references.xq"
/>
        <reference name="quoteCalculator" target="QuoteCalculatorComponent" />
        <reference name="priceQuoteProvider" target="PriceQuoteProviderComponent" />
    </component>
    ...
</composite>
{code}


h4. Decalre SCA services/references/properties using XQuery namespaces
Please note you can use the following syntax in the XQuery script to declare SCA services,
references, and properties.

* scaservice:java/<java_interface_name>
* scareference:java/<java_interface_name>
* scaproperty:xml/<namespace>:<localName>
* scaproperty:java/<java_class_name>

{code}
declare namespace quoteJoin="scaservice:java/xquery.quote.PropertiesQuoteJoin";

declare namespace quoteCalculator="scareference:java/xquery.quote.QuoteCalculator";

declare namespace priceQuoteDoc="scaproperty:xml/http://www.example.org/price:priceQuote";
declare namespace availQuoteDoc="scaproperty:xml/http://www.example.org/avail:availQuote";
declare namespace taxRate="scaproperty:java/java.lang.Float";

declare namespace pri="http://www.example.org/price";
declare namespace ava="http://www.example.org/avail";
declare namespace quo="http://www.example.org/quote";

declare variable $quoteCalculator external;

declare variable $priceQuoteDoc external;
declare variable $availQuoteDoc external;
declare variable $taxRate external;

declare function quoteJoin:joinPriceAndAvailQuotes() {
<quo:quote>
    <quo:name>{ data($priceQuoteDoc/pri:priceQuote/customerName) }</quo:name>
    <quo:address>{ concat($priceQuoteDoc/pri:priceQuote/shipAddress/@street , ",", 
    $priceQuoteDoc/pri:priceQuote/shipAddress/@city ,",", 
    fn:upper-case($priceQuoteDoc/pri:priceQuote/shipAddress/@state) , ",", 
    $priceQuoteDoc/pri:priceQuote/shipAddress/@zip) }</quo:address>
    {
        for $priceRequest in $priceQuoteDoc/pri:priceQuote/priceRequests/priceRequest,
            $availRequest in $availQuoteDoc/ava:availQuote/availRequest
        where data($priceRequest/widgetId) = data($availRequest/widgetId)
        return
            <quo:quoteResponse>
                <quo:widgetId>{ data($priceRequest/widgetId) }</quo:widgetId>
                <quo:unitPrice>{ data($priceRequest/price) }</quo:unitPrice>
                <quo:requestedQuantity>{ data($availRequest/requestedQuantity) }</quo:requestedQuantity>
                <quo:fillOrder>{ data($availRequest/quantityAvail) }</quo:fillOrder>
                {
                    for $shipDate in $availRequest/shipDate
                    return
                        <quo:shipDate>{ data($shipDate) }</quo:shipDate>
                }
                <quo:taxRate>{ $taxRate }</quo:taxRate>
                <quo:totalCost>{ quoteCalculator:calculateTotalPrice(
                				  $quoteCalculator,
                				  
                				  $taxRate,

                                  $availRequest/requestedQuantity,

                                  $priceRequest/price,

                                  $availRequest/quantityAvail) }</quo:totalCost>
            </quo:quoteResponse>
    }
    </quo:quote>
};

{code}
{column}
{section}


---------------------------------------------------------------------
CONFLUENCE INFORMATION
This message is automatically generated by Confluence

Unsubscribe or edit your notifications preferences
   http://cwiki.apache.org/confluence/users/viewnotifications.action

If you think it was sent incorrectly contact one of the administrators
   http://cwiki.apache.org/confluence/administrators.action

If you want more information on Confluence, or have a bug to report see
   http://www.atlassian.com/software/confluence



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org


Mime
View raw message