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]

Reply via email to