summaryrefslogtreecommitdiffstats
path: root/sca-cpp/branches/cpp-contrib/contrib/doc/RubyExtension.html
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sca-cpp/branches/cpp-contrib/contrib/doc/RubyExtension.html292
1 files changed, 292 insertions, 0 deletions
diff --git a/sca-cpp/branches/cpp-contrib/contrib/doc/RubyExtension.html b/sca-cpp/branches/cpp-contrib/contrib/doc/RubyExtension.html
new file mode 100644
index 0000000000..96a4ad2b82
--- /dev/null
+++ b/sca-cpp/branches/cpp-contrib/contrib/doc/RubyExtension.html
@@ -0,0 +1,292 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+ <META CONTENT="text/html; charset=iso-8859-1" HTTP-EQUIV="Content-Type">
+ <META CONTENT="text/css" HTTP-EQUIV="Content-Style-Type">
+ <STYLE MEDIA="all" TYPE="text/css">
+@import url("css/maven-base.css");
+@import url("css/maven-theme.css");
+ </STYLE>
+
+ <LINK HREF="css/maven-theme.css" MEDIA="print" REL="stylesheet"
+ TYPE="text/css">
+ <TITLE>Tuscany SCA Native - Ruby Extension</TITLE>
+</HEAD>
+
+<BODY>
+<DIV ID="bodyColumn">
+ <DIV ID="contentBox">
+ <DIV CLASS="section">
+ <H1>Tuscany SCA Native - Ruby Extension</H1>
+
+ <P>The Tuscany Ruby extension allows Ruby scripts to be used as components in
+ SCA composites and as clients that can invoke SCA services.
+ </P>
+ <P>The following samples demonstrate use of the Ruby extension:</P>
+ <UL>
+ <LI><A HREF="../samples/RubyCalculator/README.html">RubyCalculator</A></LI>
+ <LI><A HREF="../samples/RubyBigBank/README.html">RubyBigBank</A></LI>
+ <LI><A HREF="../samples/RestCalculator/README.html">RestCalculator</A></LI>
+ <LI><A HREF="../samples/RestYahoo/README.html">RestYahoo</A></LI>
+ <LI><A HREF="../samples/HTTPDBigBank/README.html">HTTPDBigBank</A></LI>
+ </UL>
+ </DIV>
+ <DIV CLASS="section">
+ <H2>Contents</H2>
+ <OL>
+ <LI><A HREF="#requirements">System Requirements</A></LI>
+ <LI><A HREF="#install">Installing the Tuscany SCA Ruby Extension..</A>
+ <UL>
+ <LI><A HREF="#linuxbin">..from the binary release on Linux and Mac OS X</A></LI>
+ <LI><A HREF="#linuxsrc">..from the source release on Linux and Mac OS X</A></LI>
+ <LI><A HREF="#winbin">..from the binary release on Windows</A></LI>
+ <LI><A HREF="#winsrc">..from the source release on Windows</A></LI>
+ </UL></LI>
+ <LI><A HREF="#pm">The Tuscany Ruby Programming Model</A></LI>
+ <UL>
+ <LI><A HREF="#clients">Clients</A></LI>
+ <LI><A HREF="#components">SCA Components</A></LI>
+ <LI><A HREF="#references">Component references</A></LI>
+ <LI><A HREF="#properties">Component properties</A></LI>
+ </UL>
+ <LI><A HREF="#help">Getting help</A></LI>
+ </OL>
+ </DIV>
+ <DIV CLASS="section">
+ <A NAME="requirements"><H2>System Requirements</H2></A>
+
+ <P>In order to install and use the Tuscany SCA Ruby Extension there are some
+ extra requirements in addition to the <A HREF="../GettingStarted.html#requirements">Tuscany
+ SCA requirements</A>:</P>
+ <TABLE CLASS="bodyTable">
+
+ <TBODY>
+ <TR CLASS="a">
+ <TD><B>Software</B></TD>
+ <TD><B>Download Link</B></TD>
+ </TR>
+ <TR CLASS="b">
+ <TD>Ruby version 1.8.x</TD>
+
+ <TD>
+ <A HREF="http://www.ruby-lang.org"
+ TARGET="_blank">http://www.ruby-lang.org</A><BR/>
+ Please download and follow the installation instructions. You should
+ be able to build the Tuscany SCA Ruby Extension with other versions of Ruby.
+ The extension has been tested with the
+ <A HREF="http://rubyforge.org/frs/download.php/12751/ruby185-21.exe">Ruby 1.8.5 One-Click Installer</A>
+ on Windows and the <A HREF="ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.5-p12.tar.gz">1.8.5 source code</A>
+ (compiled locally) on Linux.
+ </TD>
+ </TR>
+ </TBODY>
+ </TABLE>
+ </DIV>
+
+ <DIV CLASS="section">
+ <A NAME="install"><H2>Installing the Tuscany SCA Ruby Extension</H2></A>
+ <A NAME="linuxbin"><H3>Getting the Tuscany SCA Ruby Extension working with the binary release on Linux and Mac OS X</H3></A>
+ <OL>
+ <LI>Ensure the Ruby libraries are available on the PATH environment variable</LI>
+ </OL>
+ <A NAME="linuxsrc"><H3>Getting the Tuscany SCA Ruby Extension working with the source release on Linux and Mac OS X</H3></A>
+ <OL>
+ <LI>You will need the Tuscany SCA and SDO libraries - follow the instructions
+ <A HREF="../GettingStarted.html">here</A> to build the SCA libraries and default extensions</LI>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SCACPP=&lt;path to built Tuscany SCA&gt;
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;
+ <LI>RUBY_LIB=&lt;path to Ruby libraries&gt;</LI>
+ <LI>RUBY_INCLUDE=&lt;path to Ruby includes&gt;<BR/>
+ Note: If you are using a default installation of Ruby these are usually:<BR/>
+ RUBY_LIB=/usr/lib<BR/>
+ RUBY_INCLUDE=/usr/lib/ruby/1.8/i386-linux</LI>
+ </UL></LI>
+ <LI>Build the Ruby source only with the following command sequence:
+ <UL>
+ <LI>cd &lt;tuscany_sca_install_dir&gt;</LI>
+ <LI>./configure --prefix=$TUSCANY_SCACPP --enable-ruby --enable-cpp=no --enable-wsbinding=no</LI>
+ <LI>make</LI>
+ <LI>make install</LI>
+ </UL>
+ NOTE: If you don't provide a --prefix configure option, it will by default install into
+ /usr/local/tuscany/sca</LI>
+ </OL>
+
+ <A NAME="winbin"><H3>Getting the Tuscany SCA Ruby Extension working with the binary release on Windows</H3></A>
+ <OL>
+ <LI>Ensure the Ruby libraries are available on the PATH environment variable</LI>
+ </OL>
+ <A NAME="winsrc"><H3>Getting the Tuscany SCA Ruby Extension working with the source release on Windows</H3></A>
+ <OL>
+ <LI>Unzip the supplied source zip file</LI>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SCACPP=&lt;path to built Tuscany SCA&gt;
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;
+ <LI>RUBY_HOME=&lt;path to installed Ruby&gt;
+ </UL></LI>
+ <LI>You must have set up the environment for Microsoft Visual C++ tools. The build command
+ will call vcvars32 to set the environment. Ensure the directory containing this is on your path.
+ This will be where you installed the compiler.</LI>
+ <LI>Build the source:
+ <UL>
+ <LI>cd &lt;to where you unzipped the source&gt;</LI>
+ <LI>build</LI>
+ </UL>
+ This will build all the projects and put the required output into the 'deploy' directory<BR/><BR/>
+ Alternatively, open the workspace at &lt;tuscany_sca_install_dir&gt;/projects/tuscany_sca/tuscany_sca.dsw
+ in Visual Studio 6 or at at &lt;tuscany_sca_install_dir&gt;/projectsvc7/tuscany_sca/tuscany_sca.sln
+ in Visual Studio 7.1 - you can build projects individually
+ or build the samples to rebuild all the projects</LI>
+ </OL>
+ </DIV>
+
+
+ <DIV CLASS="section">
+ <A NAME="pm"><H2>The Tuscany Ruby Programming Model</H2></A>
+ <P>This section will explain the Tuscany Ruby programming model to help you to
+ write your own Ruby components and clients.
+ </P>
+ <P>The Tuscany Ruby component and client support comes from a Ruby extension
+ library that is built in the &lt;tuscany_sca_install_dir&gt;/extensions/ruby/bin
+ directory on Windows and &lt;tuscany_sca_install_dir&gt;/extensions/ruby/lib on
+ Linux and Mac OS X.
+ </P>
+ <A NAME="clients"><H3>Clients</H3></A>
+ <P>Using the Ruby SCA extension library, a Ruby client can search for an SCA service with:
+ </P>
+<PRE>require("libtuscany_sca_ruby")
+
+calculator = SCA::locateService("CalculatorComponent/CalculatorService")
+</PRE>
+ <P>This finds the component and service as defined in the composite and componentType
+ side files and returns a proxy object that can call the SCA service. You can then
+ simply call a business method on "calculator", like this:
+ </P>
+<PRE>result = calculator.add(12.3, 45.6)</PRE>
+ </P>
+ <A NAME="components"><H3>Components</H3></A>
+ <P>Ruby component implementations are standard Ruby scripts, where class-level
+ functions or module-level functions can be invoked by the Tuscany runtime. To
+ use a Ruby component implementation, use the implementation.ruby element in
+ your .composite file. For example:
+ </P>
+<PRE>&lt;implementation.ruby script="CalculatorImpl.rb"/&gt;
+</PRE>
+ <P>To instantiate a class instance and use a class-level function, the Ruby class must
+ have a default constructor (an initialize() method that takes no arguments) and the
+ class attribute must be definde in the implementation.ruby element
+ in your composite, like so:
+ </P>
+<PRE>&lt;implementation.ruby script="CalculatorImpl.rb" class="CalculatorImpl"/&gt;
+</PRE>
+ <P>Tuscany currently supports passing simple types (strings, ints, floats, etc) as well
+ as Service Data Objects into and out of Ruby components. Service Data Objects are represented
+ in Ruby as REXML Document objects (see the <A HREF="../samples/RubyBigBank/README.html">
+ Ruby BigBank sample</A> for a demonstration).
+ </P>
+ <P>You can write a componentType file for your Ruby component, but you don't have to - the Ruby
+ extension introspects Ruby component implementation classes for you and binds public
+ attributes to references and properties.
+ </P>
+ <A NAME="references"><H3>References</H3></A>
+ <P>References can be invoked from Ruby component implementations by the use of public
+ attributes in the component implementation classes, like this:
+ </P>
+<PRE>class CalculatorImpl
+
+ # Define the public attribute that corresponds to the divideService reference
+ attr_writer :divideService
+
+...
+
+ def div(arg1, arg2)
+ print "Ruby - CalculatorImpl.div\n"
+ # Invoke the divideService reference
+ @divideService.divide(arg1.to_f, arg2.to_f)
+ end
+
+...
+end
+</PRE>
+ <P>and in your composite file:
+ </P>
+<PRE>&lt;component name="CalculatorComponent"&gt;
+ &lt;implementation.ruby script="CalculatorImpl.rb"/&gt;
+ &lt;reference name="divideService"&gt;DivideComponent/DivideService&lt;/reference&gt;
+&lt;/component&gt;
+</PRE>
+ <A NAME="properties"><H3>Properties</H3></A>
+ <P>A composite with a property defined for a component like so:
+ </P>
+<PRE>&lt;component name="DivideComponent"&gt;
+ &lt;implementation.ruby script="DivideImpl.rb" class="DivideImpl"/&gt;
+ &lt;property name="round"&gt;true&lt;/property&gt;
+&lt;/component&gt;
+</PRE>
+ <P>allows a public attribute of a Ruby component implementation class to be
+ assigned the property value, so it can be used like so:
+ </P>
+<PRE>class DivideImpl
+
+ # Define the public attribute that corresponds to the round property
+ attr_writer :round
+
+...
+
+ def divide(arg1, arg2)
+ print "Ruby - DivideImpl.divide ", arg1, " / ", arg2, "\n"
+ res = arg1.to_f / arg2.to_f
+ # Use the round property
+ if @round then
+ res = res.round
+ print "DivideImpl.divide rounding\n"
+ end
+ print "DivideImpl.divide ", res, "\n"
+ res
+ end
+end
+</PRE>
+</P>
+ </DIV>
+
+ <DIV CLASS="section">
+ <A NAME="help"><H2>Getting Help</H2></A>
+
+ <P>First place to look is at the Tuscany FAQ at
+ <A HREF="http://incubator.apache.org/tuscany/faq.html"
+ TARGET="_blank">http://incubator.apache.org/tuscany/faq.html</A> </P>
+
+ <P>Any problem with this release can be reported to the Tuscany
+ <A HREF="http://incubator.apache.org/tuscany/mail-lists.html"
+ TARGET="_blank">mailing lists</A> or create a JIRA issue at&nbsp;<A HREF="http://issues.apache.org/jira/browse/Tuscany"
+ TARGET="_blank">http://issues.apache.org/jira/browse/Tuscany</A>.</P>
+ </DIV>
+ </DIV>
+</DIV>
+</BODY>
+
+</HTML>
+