summaryrefslogtreecommitdiffstats
path: root/tags/cpp-1.0-incubating-M2-RC2/sca/doc/PythonExtension.html
diff options
context:
space:
mode:
Diffstat (limited to 'tags/cpp-1.0-incubating-M2-RC2/sca/doc/PythonExtension.html')
-rw-r--r--tags/cpp-1.0-incubating-M2-RC2/sca/doc/PythonExtension.html296
1 files changed, 0 insertions, 296 deletions
diff --git a/tags/cpp-1.0-incubating-M2-RC2/sca/doc/PythonExtension.html b/tags/cpp-1.0-incubating-M2-RC2/sca/doc/PythonExtension.html
deleted file mode 100644
index 65691b89e2..0000000000
--- a/tags/cpp-1.0-incubating-M2-RC2/sca/doc/PythonExtension.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<!--
- 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 for C++ - Python Extension</TITLE>
-</HEAD>
-
-<BODY>
-<DIV ID="bodyColumn">
- <DIV ID="contentBox">
- <DIV CLASS="section">
- <H2>Tuscany SCA for C++ - Python Extension</H2>
-
- <P>The Tuscany Python extension allows Python scripts to be used as components in
- SCA composites and as clients that can invoke SCA services.
- </P>
- <P>See <A HREF="../samples/PythonCalculator/README.html">PythonCalculator</A> for
- a sample that demonstrates the use of the Python extension.
- </P>
- </DIV>
- <DIV CLASS="section">
- <H2>Contents</H2>
- <OL>
- <LI><A HREF="#requirements">System Requirements</A></LI>
- <LI><A HREF="#install">Installing the Tuscany SCA Python Extension..</A>
- <UL>
- <LI><A HREF="#linuxbin">..from the binary release on Linux</A></LI>
- <LI><A HREF="#linuxsrc">..from the source release on Linux</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 Python 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 Python 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>Python version 2.3.4 or higher</TD>
-
- <TD>
- <A HREF="http://www.python.org/download/"
- TARGET="_blank">http://www.python.org/download/</A><BR/>
- Please download and follow the installation instructions
- </TD>
- </TR>
- </TBODY>
- </TABLE>
- </DIV>
-
- <DIV CLASS="section">
- <A NAME="install"><H2>Installing the Tuscany SCA Python Extension</H2></A>
- <A NAME="linuxbin"><H3>Getting the Tuscany SCA Python Extension working with the binary release on Linux</H3></A>
- <OL>
- <LI>Extract the binary tar package to a folder</LI>
- <LI>Set the TUSCANY_SCACPP environment variable to point to the directory that was just extracted</LI>
- <LI>Add the &lt;tuscany_sca_install_dir&gt;/lib directory to the LD_LIBRARY_PATH <!--(Linux) or DYLD_LIBRARY_PATH (MacOS X)--> environment variable</LI>
- <LI>Add the &lt;tuscany_sca_install_dir&gt;/extensions/python/lib directory to the PYTHONPATH environment variable</LI>
- </OL>
- <A NAME="linuxsrc"><H3>Getting the Tuscany SCA Python Extension working with the source release on Linux</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>PYTHON_LIB=&lt;path to Python libraries&gt;</LI>
- <LI>PYTHON_INCLUDE=&lt;path to Python includes&gt;</LI>
- <LI>PYTHON_VERSION=&lt;name of the Python version&gt;<BR/>
- Note: If you are using a default installation of Python 2.3 these are usually:<BR/>
- PYTHON_LIB=/usr/lib<BR/>
- PYTHON_INCLUDE=/usr/include/python2.3<BR/>
- PYTHON_VERSION=python2.3<BR/></LI>
- </UL></LI>
- <LI>Build the Python source only with the following command sequence:
- <UL>
- <LI>cd &lt;tuscany_sca_install_dir&gt;</LI>
- <LI>./configure --prefix=$TUSCANY_SCACPP --enable-python --enable-cpp=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 Python Extension working with the binary release on Windows</H3></A>
- <OL>
- <LI>Unzip the supplied zip file to a folder</LI>
- <LI>Set the TUSCANY_SCACPP environment variable to point to the directory that was just unzipped</LI>
- <LI>Add the &lt;tuscany_sca_install_dir&gt;\bin directory to the PATH environment variable</LI>
- <LI>Add the &lt;tuscany_sca_install_dir&gt;\extensions\python\bin directory to the PYTHONPATH environment variable</LI>
- </OL>
- <A NAME="winsrc"><H3>Getting the Tuscany SCA Python 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>PYTHON_HOME=&lt;path to installed Python&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
- <LI>Set the TUSCANY_SCACPP environment variable to point to the 'deploy' directory that was just created</LI>
- </OL>
- </DIV>
-
-
- <DIV CLASS="section">
- <A NAME="pm"><H2>The Tuscany Python Programming Model</H2></A>
- <P>This section will explain
- the Tuscany Python programming model to help you to write your own Python
- components and clients.
- </P>
- <P>The Tuscany Python component and client support comes from a Python extension
- package that is built in the &lt;tuscany_sca_install_dir&gt;/extensions/python/bin
- directory on Windows and &lt;tuscany_sca_install_dir&gt;/extensions/python/lib on
- Linux. This package must be made available to your Python environment by
- adding this directory to your PYTHONPATH environment variable. This makes the sca
- module available for use by clients and allows references and properties to be
- used in your Python components
- </P>
- <A NAME="clients"><H3>Clients</H3></A>
- <P>Using the sca module, a Python client can search for an SCA service with:
- </P>
-<PRE>import sca
-
-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>Python component implementations are standard Python scripts, where class-level
- functions or module-level functions can be invoked by the Tuscany runtime. To
- use a Python component implementation, use the implementation.python element in
- your .composite file. For example, the following snippet will use the Python script
- at path/to/module/PythonModuleName.py, where the path is relative to the location of
- the composite file:
- </P>
-<PRE>&lt;implementation.python module="PythonModuleName" path="path/to/module"/&gt;
-</PRE>
- <P>To instantiate a class instance and use a class-level function, the Python class must
- have a default constructor (an __init__ method that takes no arguments besides
- 'self') and the class attribute must be defined in the implementation.python element
- in your composite, like so:
- </P>
-<PRE>&lt;implementation.python module="PythonModuleName" path="relative/path/to/module" class="PythonClassName"/&gt;
-</PRE>
- <P>Tuscany currently only supports passing simple types (strings, ints, floats, etc) into
- and out of Python components. Support for more complex types, such as Service Data Objects,
- will be added in later releases.
- </P>
- <P>Additionally, Tuscany currently requires a componentType file that corresponds to the
- name of the Python module, e.g. for the Python Calculator sample, the module name is
- 'CalculatorImpl' and the componentType file is 'CalculatorImpl.componentType'. The
- componentType file specifies what services are available on the component and which
- references are called by the component. For example, CalculatorImpl.componentType
- contains the following:
- </P>
-<PRE>&lt;componentType xmlns="http://www.osoa.org/xmlns/sca/1.0"&gt;
- &lt;service name="CalculatorService"&gt;
- &lt;interface.python/&gt;
- &lt;/service&gt;
- &lt;reference name="divideService"&gt;
- &lt;interface.python/&gt;
- &lt;/reference&gt;
-&lt;/componentType&gt;
-</PRE>
- <A NAME="references"><H3>References</H3></A>
- <P>References are automatically added to your Python component implementation when
- the runtime loads the implementation script, so they can be used like so:
- </P>
-<PRE># The module-level div function
-def div(val1, val2):
- # Use the divideService reference
- result = divideService.divide(val1, val2)
- return result
-</PRE>
- <P>and in your composite file:
- </P>
-<PRE>&lt;component name="CalculatorComponent"&gt;
- &lt;implementation.python module="CalculatorImpl"/&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.python module="DivideImpl"/&gt;
- &lt;property name="doRounding"&gt;true&lt;/property&gt;
-&lt;/component&gt;
-</PRE>
- <P>and in the associated .componentType file like so:
- </P>
-<PRE>&lt;componentType ...
-...
- &lt;property name="doRounding" type="xsd:boolean"/&gt;
-&lt;/componentType&gt;
-</PRE>
- <P>means the property is automatically instantiated and assigned the
- property value in the Python component implementation, so it can be
- used like so:
- </P>
-<PRE>def divide(val1, val2):
- result = float(val1) / float(val2)
- print "Python - DivideImpl.divide " + str(val1) + " / " + str(val2) + " = " + str(result)
-
- # Use the doRounding property
- if doRounding:
- result = round(result)
- print "Python - DivideImpl.divide is rounding the result to " + str(result)
-
- return result
-</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>
-