summaryrefslogtreecommitdiffstats
path: root/tags/cpp-1.0-incubating-M2-RC2/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPServiceProxy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tags/cpp-1.0-incubating-M2-RC2/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPServiceProxy.cpp')
-rw-r--r--tags/cpp-1.0-incubating-M2-RC2/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPServiceProxy.cpp193
1 files changed, 0 insertions, 193 deletions
diff --git a/tags/cpp-1.0-incubating-M2-RC2/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPServiceProxy.cpp b/tags/cpp-1.0-incubating-M2-RC2/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPServiceProxy.cpp
deleted file mode 100644
index 56511fc9e6..0000000000
--- a/tags/cpp-1.0-incubating-M2-RC2/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPServiceProxy.cpp
+++ /dev/null
@@ -1,193 +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.
- */
-
-/* $Rev$ $Date$ */
-
-#include "tuscany/sca/cpp/CPPServiceProxy.h"
-#include "tuscany/sca/util/Logging.h"
-#include "osoa/sca/ServiceRuntimeException.h"
-#include "tuscany/sca/core/SCARuntime.h"
-#include "tuscany/sca/model/Reference.h"
-#include "tuscany/sca/model/ReferenceType.h"
-#include "tuscany/sca/model/Service.h"
-#include "tuscany/sca/model/ServiceType.h"
-#include "tuscany/sca/model/Component.h"
-#include "tuscany/sca/model/ComponentType.h"
-#include "tuscany/sca/core/ServiceWrapper.h"
-#include "tuscany/sca/model/Composite.h"
-#include "tuscany/sca/model/ServiceBinding.h"
-#include "tuscany/sca/cpp/model/CPPImplementation.h"
-#include "tuscany/sca/cpp/model/CPPReferenceBinding.h"
-
-using namespace osoa::sca;
-
-namespace tuscany
-{
- namespace sca
- {
- namespace cpp
- {
-
- // ============================
- // Constructor: Create a proxy
- // ============================
- CPPServiceProxy::CPPServiceProxy(Reference* reference)
- : ServiceProxy(reference)
- {
- LOGENTRY(1,"CPPServiceProxy::constructor");
-
- // ----------------------
- // Get the component
- // ----------------------
- Component* component = reference->getComponent();
- string name = reference->getType()->getName();
-
- // Get the service wrapper
- CPPReferenceBinding* referenceBinding = (CPPReferenceBinding*)reference->getBinding();
-
- ServiceWrapper* serviceWrapper = referenceBinding->getTargetServiceBinding()->getServiceWrapper();
-
- createProxy(component, name, serviceWrapper);
-
- LOGEXIT(1,"CPPServiceProxy::constructor");
- }
-
- // ============================
- // Constructor: Create a proxy
- // ============================
- CPPServiceProxy::CPPServiceProxy(Service* service)
- : ServiceProxy(0)
- {
- LOGENTRY(1,"CPPServiceProxy::constructor");
-
- // ----------------------
- // Get the component
- // ----------------------
- Component* component = service->getComponent();
- string name = service->getType()->getName();
-
- // Get the service wrapper
- ServiceWrapper* serviceWrapper = service->getBinding()->getServiceWrapper();
-
- createProxy(component, name, serviceWrapper);
-
- LOGEXIT(1,"CPPServiceProxy::constructor");
- }
-
- void CPPServiceProxy::createProxy(Component* component, const string& name, ServiceWrapper* serviceWrapper)
- {
- LOGENTRY(1,"CPPServiceProxy::createProxy");
-
- ComponentType* componentType = component->getType();
- if (!componentType)
- {
- string msg = "Component " + component->getName() + " has no implementation defined";
- throw ServiceNotFoundException(msg.c_str());
- }
-
- // If we got here we have a CPP implementation
- CPPImplementation* impl = (CPPImplementation *)componentType;
-
- // ----------------------------------------------------
- // Get implementation dll name and service factory name
- // ----------------------------------------------------
- string library = impl->getLibrary();
- string headerStub = impl->getHeaderStub();
-
- string fullLibraryName = component->getComposite()->getRoot() + "/" + library;
- string proxyFactoryName = headerStub + "_" + name + "_Proxy_Factory";
- string proxyDestructorName = headerStub + "_" + name + "_Proxy_Destructor";
- typedef void* (* PROXYFACTORY) (ServiceWrapper*);
-
- // ------------
- // Load the dll
- // ------------
- proxyLibrary = Library(fullLibraryName);
-
- // -------------------------
- // Locate the factory method
- // -------------------------
- PROXYFACTORY proxyFactory = (PROXYFACTORY)proxyLibrary.getSymbol(proxyFactoryName);
- if (!proxyFactory)
- {
- LOGERROR_2(1, "CPPServiceProxy::createProxy: Unable to locate %s in library %s",
- proxyFactoryName.c_str(), fullLibraryName.c_str());
- string msg = "Unable to locate " + proxyFactoryName + " in library " + fullLibraryName;
- throw ServiceNotFoundException(msg.c_str());
- }
-
- // -----------------------------------
- // Now create an instance of the proxy
- // -----------------------------------
- void* proxy = proxyFactory(serviceWrapper);
- if (!proxy)
- {
- LOGERROR_2(1, "CPPServiceProxy::createProxy: Factory method %s in library %s returned null",
- proxyFactoryName.c_str(), fullLibraryName.c_str());
- string msg = "Factory method " + proxyFactoryName + " in library " + fullLibraryName + " returned null";
- throw ServiceNotFoundException(msg.c_str());
- }
- else
- {
- proxies.push_back(proxy);
- }
-
- // -------------------------
- // Get the destructor method
- // -------------------------
- destructor = (PROXYDESTRUCTOR)proxyLibrary.getSymbol(proxyDestructorName);
-
- LOGEXIT(1,"CPPServiceProxy::createProxy");
- }
-
- // ==========
- // Destructor
- // ==========
- CPPServiceProxy::~CPPServiceProxy()
- {
- LOGENTRY(1,"CPPServiceProxy::destructor");
-
- // Delete the proxies
- if (destructor != NULL && proxies.size() != 0)
- {
- destructor(*proxies.begin());
- }
- LOGEXIT(1,"CPPServiceProxy::destructor");
- }
-
- CPPServiceProxy::PROXIES CPPServiceProxy::getProxies()
- {
- return proxies;
- }
-
- void* CPPServiceProxy::getProxy()
- {
- if (proxies.size() != 0)
- {
- return *proxies.begin();
- }
- else
- {
- return NULL;
- }
- }
-
- } // End namespace cpp
- } // End namespace sca
-} // End namespace tuscany