thanks JS - very useful!
another question: what does scagen do in the tuscant C++ build?
thanks,
Judah
On 1/9/07, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:
Judah Diament wrote:
> Hi,
>
Welcome!
> I appologize for the newbie nature of these questions, but I am
> starting to dive into the Tuscany C++ source code and wanted to know
> the following:
>
> 1) in tuscany/sca/core, what is the difference between
> TuscanyRuntime.h/cpp and SCARuntime.h/cpp - what role do each of these
> play?
SCARuntime is internal to the SCA runtime and represents a particular
runtime instance, configured to work off a specific runtime install dir,
a specific path to look for SCA composites etc.
TuscanyRuntime is a wrapper for SCARuntime, offering a public Tuscany
API that people who write SCA application components in C++ can use to
start/stop an SCA runtime. We are providing this start/stop capability
to C++ application developers as a Tuscany API in the tuscany::sca::cpp
namespace as the OSOA SCA spec does not define one in osoa::sca.
TuscanyRuntime is used in client environments where you need to start
the SCA runtime yourself from your main method for example. You do not
need to use it in a server environment, where our server integration
kicks in and boots an... SCARuntime for you.
>
> 2) what is a default Component for a system?
>
The "default" component (a better term may be "main component") is the
(composite) component that the runtime puts you in when you start it,
allowing you to do things like
CompositeContext::getCurrent().locateService("...") within the context
of that composite component.
For example, given a sample.calculator composite (assembling a bunch of
components to form a calculator):
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
name="sample.calculator">
<service name="CalculatorService">
<interface.wsdl
interface="http://sample/calculator#wsdl.interface(Calculator)"/>
<binding.ws/>
<reference>CalculatorComponent</reference>
</service>
<component name="CalculatorComponent">
<implementation.ruby script="CalculatorImpl.rb"
class="CalculatorImpl"/>
<reference name="divideService">DivideComponent</reference>
</component>
<component name="DivideComponent">
<implementation.ruby script="DivideImpl.rb" class="DivideImpl"/>
<property name="round">true</property>
</component>
</composite>
And another sample.calculator.app composite, used to contribute to the
SCA system a component sample.calculator.CalculatorComponent, instance
of the sample.calculator composite.
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
name="sample.calculator.app">
<component name="sample.calculator.CalculatorComponent">
<implementation.composite name="sample.calculator" />
</component>
</composite>
To execute the following code:
require("tuscany_sca_ruby")
calculator = SCA::locateService("CalculatorComponent") <-- Ruby
equivalent of the C++ CompositeContext::getCurrent().locateService(...)
x = calculator.div(5, 2)
print x, "\n"
... the runtime needs to know in which composite component context it
executes, in other words what it's "main" or "default" component is, and
where to start from in the SCA composition hierarchy.
> 3) Any general advice on what route to take through the source code to
> get a good understanding of the guts of Tuscany C++?
Running the CppCalculator sample and in particular the client at
http://svn.apache.org/repos/asf/incubator/tuscany/cpp/sca/samples/CppCalculator/sample.calculator.client/
through a debugger will walk you through the init of the runtime, the
loading of SCDL, the assembly of the composites and the dispatching of a
service invocation through client -> client proxy -> service wrapper ->
target service.
For an alternate component implementation type, check the RubyCalculator
or PythonCalculator samples under
http://svn.apache.org/repos/asf/incubator/tuscany/cpp/sca/samples.
To browse the code and understand its structure, you can use the Doxygen
docs at http://people.apache.org/~jsdelfino/doxygen-cpp/, they contain
class hierarchy and collaboration diagrams and a complete copy of the
code formatted for browsing.
>
> thanks!!
> Judah
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
Hope this helps...
--
Jean-Sebastien
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]