From 94e3eb2d0cda7df2d876d1698db2e8e75cd0a0b1 Mon Sep 17 00:00:00 2001 From: Henri Herscher Date: Mon, 5 Feb 2007 21:34:01 +0000 Subject: ObjectFactory becomes a home brewed singleton instead of an ACE singleton. ACE singletons have the problem of not being unique across DLL. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@398 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkbasecxx/MultiThreadedServer.cpp | 4 ++-- orkbasecxx/ObjectFactory.cpp | 13 ++++++++++++- orkbasecxx/ObjectFactory.h | 10 ++++++++-- 3 files changed, 22 insertions(+), 5 deletions(-) (limited to 'orkbasecxx') diff --git a/orkbasecxx/MultiThreadedServer.cpp b/orkbasecxx/MultiThreadedServer.cpp index cda25a9..fb799fd 100644 --- a/orkbasecxx/MultiThreadedServer.cpp +++ b/orkbasecxx/MultiThreadedServer.cpp @@ -94,7 +94,7 @@ int CommandLineServer::svc(void) try { CStdString className = SingleLineSerializer::FindClass(command); - ObjectRef objRef = ObjectFactorySingleton::instance()->NewInstance(className); + ObjectRef objRef = ObjectFactory::GetSingleton()->NewInstance(className); if (objRef.get()) { objRef->DeSerializeSingleLine(command); @@ -186,7 +186,7 @@ int HttpServer::svc(void) CStdString className = UrlSerializer::FindClass(url); - ObjectRef objRef = ObjectFactorySingleton::instance()->NewInstance(className); + ObjectRef objRef = ObjectFactory::GetSingleton()->NewInstance(className); if (objRef.get()) { objRef->DeSerializeUrl(url); diff --git a/orkbasecxx/ObjectFactory.cpp b/orkbasecxx/ObjectFactory.cpp index 173d581..97536e9 100644 --- a/orkbasecxx/ObjectFactory.cpp +++ b/orkbasecxx/ObjectFactory.cpp @@ -15,12 +15,23 @@ #include "ObjectFactory.h" +ObjectFactory* ObjectFactory::m_singleton = NULL; + +ObjectFactory::ObjectFactory() +{ +} void ObjectFactory::Initialize() { - ; + m_singleton = new ObjectFactory(); } +ObjectFactory* ObjectFactory::GetSingleton() +{ + return m_singleton; +} + + ObjectRef ObjectFactory::NewInstance(CStdString& className) { std::map::iterator pair; diff --git a/orkbasecxx/ObjectFactory.h b/orkbasecxx/ObjectFactory.h index 4ebaf60..0c5cd31 100644 --- a/orkbasecxx/ObjectFactory.h +++ b/orkbasecxx/ObjectFactory.h @@ -22,18 +22,24 @@ /** The ObjectFactory can be used to instanciate Objects based on class name. All existing Objects must be registered to the ObjectFactory at startup. */ +class ObjectFactory; + class DLL_IMPORT_EXPORT_ORKBASE ObjectFactory { public: - void Initialize(); + static void Initialize(); + static ObjectFactory* GetSingleton(); + ObjectRef NewInstance(CStdString& className); void RegisterObject(ObjectRef&); private: + ObjectFactory(); + static ObjectFactory* m_singleton; std::map m_classes; }; -typedef ACE_Singleton ObjectFactorySingleton; +//typedef ACE_Singleton ObjectFactorySingleton; #endif -- cgit v1.2.3