Author: jsdelfino
Date: Sun Sep 10 10:07:48 2006
New Revision: 441974
URL: http://svn.apache.org/viewvc?view=rev&rev=441974
Log:
Pass composite to component implementation objects, allow component
implementation model class to load the implementation artifact to perform any
necessary introspection, implemented that new scheme in the Ruby implementation
extension
Modified:
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.cpp
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.h
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/Composite.cpp
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeReference.cpp
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeService.cpp
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPImplementationExtension.cpp
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.cpp
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.h
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPImplementationExtension.cpp
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.cpp
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.h
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonImplementationExtension.cpp
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.cpp
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.h
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyImplementationExtension.cpp
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.h
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.cpp
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.h
Modified:
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.cpp
Sun Sep 10 10:07:48 2006
@@ -24,6 +24,7 @@
#include "tuscany/sca/model/ServiceType.h"
#include "tuscany/sca/model/ReferenceType.h"
#include "tuscany/sca/model/Component.h"
+#include "tuscany/sca/model/Composite.h"
#include "tuscany/sca/model/Service.h"
#include "tuscany/sca/model/Reference.h"
@@ -40,8 +41,8 @@
{
// Constructor
- ComponentType::ComponentType(const string& name)
- : name(name)
+ ComponentType::ComponentType(Composite* composite, const string&
name)
+ : composite(composite), name(name)
{
LOGENTRY(1, "ComponentType::constructor");
LOGEXIT(1, "ComponentType::constructor");
Modified:
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.h
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.h
(original)
+++
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.h
Sun Sep 10 10:07:48 2006
@@ -39,6 +39,7 @@
class ReferenceType;
class Interface;
class Component;
+ class Composite;
/**
* Component type represents the configurable aspects of an
implementation.
@@ -54,7 +55,7 @@
/**
* Constructor
*/
- SCA_API ComponentType(const string& name);
+ SCA_API ComponentType(Composite* composite, const string&
name);
/**
* Destructor.
@@ -64,7 +65,12 @@
/**
* Returns the name of the component type
*/
- SCA_API const string& getName() { return name; };
+ SCA_API const string& getName() const { return name; };
+
+ /**
+ * Returns the composite containing this component type
+ */
+ SCA_API Composite* getComposite() const { return composite; };
/**
* Add a new service type to this component type.
@@ -141,6 +147,11 @@
* The name of the component type
*/
string name;
+
+ /**
+ * The composite containing this component type
+ */
+ Composite* composite;
/**
* Map of all the service types defined on this component.
Modified:
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/Composite.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/Composite.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/Composite.cpp
(original)
+++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/Composite.cpp
Sun Sep 10 10:07:48 2006
@@ -38,7 +38,7 @@
// Constructor
Composite::Composite(const string& name, const string& root)
- : ComponentType(name), root(root)
+ : ComponentType(this, name), root(root)
{
LOGENTRY(1, "Composite::constructor");
LOGEXIT(1, "Composite::constructor");
Modified:
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeReference.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeReference.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeReference.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeReference.cpp
Sun Sep 10 10:07:48 2006
@@ -37,7 +37,7 @@
// Constructor
CompositeReference::CompositeReference(Composite* composite, const
string& name,
Interface* intface, Interface* callbackInterface, bool
conversational, ReferenceType::Multiplicity multiplicity) :
- Component(composite, name, new ComponentType(name))
+ Component(composite, name, new ComponentType(composite, name))
{
LOGENTRY(1, "CompositeReference::constructor");
LOGINFO_1(2, "CompositeReference::constructor:
CompositeReference name: %s", name.c_str());
Modified:
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeService.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeService.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeService.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeService.cpp
Sun Sep 10 10:07:48 2006
@@ -40,7 +40,7 @@
CompositeService::CompositeService(Composite* composite, const
string& name,
Interface* intface, Interface* callbackInterface, bool
conversational,
ReferenceType::Multiplicity multiplicity) :
- Component(composite, name, new ComponentType(name))
+ Component(composite, name, new ComponentType(composite, name))
{
LOGENTRY(1, "CompositeService::constructor");
LOGINFO_1(2, "CompositeService::constructor: CompositeService
name: %s", name.c_str());
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPImplementationExtension.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPImplementationExtension.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPImplementationExtension.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPImplementationExtension.cpp
Sun Sep 10 10:07:48 2006
@@ -88,7 +88,7 @@
Utils::rTokeniseString(".h", headerStub, headerStub, tmp);
CPPImplementation* cppImpl = new CPPImplementation(
- library, header, headerPath, headerStub,
className, scope);
+ composite, library, header, headerPath,
headerStub, className, scope);
return cppImpl;
}
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.cpp
Sun Sep 10 10:07:48 2006
@@ -22,6 +22,7 @@
#include "tuscany/sca/cpp/model/CPPServiceBinding.h"
#include "tuscany/sca/cpp/model/CPPReferenceBinding.h"
#include "tuscany/sca/model/Component.h"
+#include "tuscany/sca/model/Composite.h"
#include "tuscany/sca/model/Service.h"
#include "tuscany/sca/model/Reference.h"
#include "tuscany/sca/util/Utils.h"
@@ -35,9 +36,9 @@
{
// Constructor
- CPPImplementation::CPPImplementation(const string& library, const
string& header,
+ CPPImplementation::CPPImplementation(Composite* composite, const
string& library, const string& header,
const string&headerPath, const string& headerStub, const
string& className, Scope scope)
- : ComponentType(headerPath + headerStub),
+ : ComponentType(composite, headerPath + headerStub),
library(library), header(header), headerPath(headerPath),
headerStub(headerStub), className(className), scope(scope)
{
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.h
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.h
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.h
Sun Sep 10 10:07:48 2006
@@ -58,7 +58,7 @@
* @param className Name of the class in the header file
(could be a blank string
* if this is not specified).
*/
- CPPImplementation(const string& library, const string& header,
const string&headerPath,
+ CPPImplementation(Composite* composite, const string& library,
const string& header, const string&headerPath,
const string& headerStub, const string& className,
Scope scope);
/**
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPImplementationExtension.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPImplementationExtension.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPImplementationExtension.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPImplementationExtension.cpp
Sun Sep 10 10:07:48 2006
@@ -61,7 +61,7 @@
string module = scdlImplementation->getCString("module");
string className = scdlImplementation->getCString("class");
- PHPImplementation* phpImpl = new PHPImplementation(module,
className);
+ PHPImplementation* phpImpl = new
PHPImplementation(composite, module, className);
return phpImpl;
}
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.cpp
Sun Sep 10 10:07:48 2006
@@ -35,8 +35,8 @@
{
// Constructor
- PHPImplementation::PHPImplementation(const string& module, const
string& className)
- : ComponentType(module),
+ PHPImplementation::PHPImplementation(Composite* composite, const
string& module, const string& className)
+ : ComponentType(composite, module),
module(module), className(className)
{
LOGENTRY(1,"PHPImplementation::constructor");
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.h
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.h
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.h
Sun Sep 10 10:07:48 2006
@@ -43,13 +43,14 @@
public:
/**
* Constructor.
+ * @param composite Composite containing this implementation.
* @param module Name of the module.
* @param modulePath Path to the module (could be a blank
string
* if this is not specified).
* @param className Name of the class in the module (could be
a blank string
* if this is not specified).
*/
- PHPImplementation(const string& module, const string&
className);
+ PHPImplementation(Composite* composite, const string& module,
const string& className);
/**
* Destructor
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonImplementationExtension.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonImplementationExtension.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonImplementationExtension.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonImplementationExtension.cpp
Sun Sep 10 10:07:48 2006
@@ -73,7 +73,7 @@
scope = PythonImplementation::STATELESS;
}
- PythonImplementation* pythonImpl = new
PythonImplementation(module, path, className, scope);
+ PythonImplementation* pythonImpl = new
PythonImplementation(composite, module, path, className, scope);
return pythonImpl;
}
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.cpp
Sun Sep 10 10:07:48 2006
@@ -36,8 +36,8 @@
// Constructor
PythonImplementation::PythonImplementation(
- const string& module, const string& modulePath, const string&
className, Scope scope)
- : ComponentType(modulePath + "/" + module),
+ Composite* composite, const string& module, const string&
modulePath, const string& className, Scope scope)
+ : ComponentType(composite, modulePath + "/" + module),
module(module), modulePath(modulePath),
className(className), scope(scope)
{
LOGENTRY(1,"PythonImplementation::constructor");
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.h
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.h
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.h
Sun Sep 10 10:07:48 2006
@@ -52,13 +52,14 @@
/**
* Constructor.
+ * @param composite The composite containing this
implementation.
* @param module Name of the module.
* @param modulePath Path to the module (could be a blank
string
* if this is not specified).
* @param className Name of the class in the module (could be
a blank string
* if this is not specified).
*/
- PythonImplementation(const string& module, const string&
modulePath, const string& className, Scope scope);
+ PythonImplementation(Composite* composite, const string&
module, const string& modulePath, const string& className, Scope scope);
/**
* Destructor
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyImplementationExtension.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyImplementationExtension.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyImplementationExtension.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyImplementationExtension.cpp
Sun Sep 10 10:07:48 2006
@@ -62,7 +62,7 @@
string className = scdlImplementation->getCString("class");
string script = scdlImplementation->getCString("script");
- RubyImplementation* rubyImpl = new
RubyImplementation(module, className, script);
+ RubyImplementation* rubyImpl = new
RubyImplementation(composite, module, className, script);
return rubyImpl;
}
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp
Sun Sep 10 10:07:48 2006
@@ -44,22 +44,12 @@
: ServiceWrapper(service)
{
LOGENTRY(1,"RubyServiceWrapper::constructor");
-
+
component = service->getComponent();
+ implementation = (RubyImplementation*)component->getType();
interf = service->getType()->getInterface();
remotable = interf->isRemotable();
- // Initialize the Ruby runtime
- ruby_init();
-
- // Execute the specified Ruby script
- RubyImplementation* impl =
(RubyImplementation*)component->getType();
- if (impl->getScript() != "")
- {
- string script = component->getComposite()->getRoot() + '/'
+ impl->getScript();
- rb_require((char *)script.c_str());
- }
-
LOGEXIT(1,"RubyServiceWrapper::constructor");
}
@@ -85,12 +75,10 @@
try
{
- // Create a new instance of the component implementation
class
- RubyImplementation* impl =
(RubyImplementation*)component->getType();
-
- string expr = impl->getClass() + ".new";
- VALUE instance = rb_eval_string(expr.c_str());
+ // Create a new instance of the Ruby implementation class
+ VALUE instance = rb_class_new_instance(0, NULL,
implementation->getImplementationClass());
+
// Get the ID of the specified method
ID method = rb_intern(operation.getName().c_str());
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.h
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.h
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.h
Sun Sep 10 10:07:48 2006
@@ -25,6 +25,7 @@
#include "tuscany/sca/core/Operation.h"
#include "tuscany/sca/model/Component.h"
#include "tuscany/sca/model/Interface.h"
+#include "tuscany/sca/ruby/model/RubyImplementation.h"
#include <ruby.h>
@@ -83,6 +84,11 @@
* A pointer to the interface which the service exposes.
*/
Interface* interf;
+
+ /**
+ * The Ruby implementation
+ */
+ RubyImplementation* implementation;
};
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.cpp
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.cpp
Sun Sep 10 10:07:48 2006
@@ -22,6 +22,7 @@
#include "tuscany/sca/ruby/model/RubyServiceBinding.h"
#include "tuscany/sca/ruby/model/RubyReferenceBinding.h"
#include "tuscany/sca/model/Component.h"
+#include "tuscany/sca/model/Composite.h"
#include "tuscany/sca/model/Service.h"
#include "tuscany/sca/model/Reference.h"
#include "tuscany/sca/util/Utils.h"
@@ -34,11 +35,30 @@
namespace ruby
{
+ bool RubyImplementation::initialized = false;
+
// Constructor
- RubyImplementation::RubyImplementation(const string& module, const
string& className, const string& script)
- : ComponentType(script.substr(0, script.find_last_of('.'))),
+ RubyImplementation::RubyImplementation(Composite* composite, const
string& module, const string& className, const string& script)
+ : ComponentType(composite, script.substr(0,
script.find_last_of('.'))),
module(module), className(className), script(script)
{
+ // Initialize the Ruby runtime
+ if (!initialized)
+ {
+ ruby_init();
+ initialized = true;
+ }
+
+ // Load the specified Ruby script
+ if (script != "")
+ {
+ string path = composite->getRoot() + '/' + script;
+ rb_require((char *)path.c_str());
+ }
+
+ // Load the Ruby implementation class
+ implementationClass = rb_path2class(className.c_str());
+
}
RubyImplementation::~RubyImplementation()
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.h
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
---
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.h
(original)
+++
incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.h
Sun Sep 10 10:07:48 2006
@@ -26,6 +26,8 @@
#include <string>
using std::string;
+#include <ruby.h>
+
using namespace tuscany::sca::model;
namespace tuscany
@@ -43,11 +45,12 @@
public:
/**
* Constructor.
+ * @param composite The composite containing this
implementation.
* @param module Name of the Ruby module.
* @param className Name of the Ruby implementation class.
* @param script Path of the Ruby script.
*/
- RubyImplementation(const string& module, const string&
className, const string& script);
+ RubyImplementation(Composite* composite, const string& module,
const string& className, const string& script);
/**
* Destructor
@@ -77,6 +80,11 @@
* @return The path of the Ruby script.
*/
const string& getScript() const { return script; }
+
+ /**
+ * Returns the Ruby implementation class
+ */
+ VALUE getImplementationClass() const { return
implementationClass; }
private:
@@ -94,6 +102,16 @@
* Path of the Ruby script.
*/
string script;
+
+ /**
+ * True if the Ruby runtime has been initialized
+ */
+ static bool initialized;
+
+ /**
+ * The Ruby implementation class
+ */
+ VALUE implementationClass;
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]