diff options
author | Bernard Normier <bernard@zeroc.com> | 2004-04-22 19:15:50 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2004-04-22 19:15:50 +0000 |
commit | e6042c283588d33c18cb0a85351a82df86a66406 (patch) | |
tree | c51a604b5635c8b38de55e28a94d4c43b24f14ec /cpp/src/Freeze/EvictorI.cpp | |
parent | fix (diff) | |
download | ice-e6042c283588d33c18cb0a85351a82df86a66406.tar.bz2 ice-e6042c283588d33c18cb0a85351a82df86a66406.tar.xz ice-e6042c283588d33c18cb0a85351a82df86a66406.zip |
Bug fixes
Diffstat (limited to 'cpp/src/Freeze/EvictorI.cpp')
-rw-r--r-- | cpp/src/Freeze/EvictorI.cpp | 62 |
1 files changed, 52 insertions, 10 deletions
diff --git a/cpp/src/Freeze/EvictorI.cpp b/cpp/src/Freeze/EvictorI.cpp index e0880078074..422f323e9c5 100644 --- a/cpp/src/Freeze/EvictorI.cpp +++ b/cpp/src/Freeze/EvictorI.cpp @@ -15,6 +15,7 @@ #include <Freeze/EvictorI.h> #include <Freeze/Initialize.h> #include <IceUtil/AbstractMutex.h> +#include <IceUtil/StringUtil.h> #include <Freeze/Util.h> #include <Freeze/EvictorIteratorI.h> @@ -25,9 +26,18 @@ using namespace Freeze; using namespace Ice; +// +// Static members +// + string Freeze::EvictorI::defaultDb = "$default"; string Freeze::EvictorI::indexPrefix = "$index:"; + +// +// createEvictor functions +// + Freeze::EvictorPtr Freeze::createEvictor(const ObjectAdapterPtr& adapter, const string& envName, @@ -52,6 +62,25 @@ Freeze::createEvictor(const ObjectAdapterPtr& adapter, } +// +// Helper functions +// + +inline void +checkIdentity(const Identity& ident) +{ + if(ident.name.size() == 0) + { + IllegalIdentityException e(__FILE__, __LINE__); + e.id = ident; + throw e; + } +} + +// +// EvictorI +// + Freeze::EvictorI::EvictorI(const ObjectAdapterPtr& adapter, const string& envName, const string& filename, @@ -271,6 +300,8 @@ Freeze::EvictorI::add(const ObjectPtr& servant, const Identity& ident) Ice::ObjectPrx Freeze::EvictorI::addFacet(const ObjectPtr& servant, const Identity& ident, const string& facet) { + checkIdentity(ident); + ObjectStore* store = 0; for(;;) @@ -399,7 +430,7 @@ Freeze::EvictorI::addFacet(const ObjectPtr& servant, const Identity& ident, cons ex.id = identityToString(ident); if(!facet.empty()) { - ex.id += " -f " + facet; + ex.id += " -f " + IceUtil::escapeString(facet, ""); } throw ex; } @@ -414,12 +445,12 @@ Freeze::EvictorI::addFacet(const ObjectPtr& servant, const Identity& ident, cons } } - - // - // TODO: there is currently no way to create an ObjectPrx - // with a facet! - // - return 0; + ObjectPrx obj = _adapter->createProxy(ident); + if(!facet.empty()) + { + obj = obj->ice_newFacet(facet); + } + return obj; } // @@ -428,6 +459,8 @@ Freeze::EvictorI::addFacet(const ObjectPtr& servant, const Identity& ident, cons void Freeze::EvictorI::createObject(const Identity& ident, const ObjectPtr& servant) { + checkIdentity(ident); + ObjectStore* store = findStore(""); assert(store != 0); @@ -531,6 +564,8 @@ Freeze::EvictorI::remove(const Identity& ident) void Freeze::EvictorI::removeFacet(const Identity& ident, const string& facet) { + checkIdentity(ident); + ObjectStore* store = findStore(facet); bool notThere = (store == 0); @@ -627,7 +662,7 @@ Freeze::EvictorI::removeFacet(const Identity& ident, const string& facet) ex.id = identityToString(ident); if(!facet.empty()) { - ex.id += " -f " + facet; + ex.id += " -f " + IceUtil::escapeString(facet, ""); } throw ex; } @@ -649,6 +684,8 @@ Freeze::EvictorI::removeFacet(const Identity& ident, const string& facet) void Freeze::EvictorI::destroyObject(const Identity& ident) { + checkIdentity(ident); + try { remove(ident); @@ -670,6 +707,8 @@ Freeze::EvictorI::keep(const Identity& ident) void Freeze::EvictorI::keepFacet(const Identity& ident, const string& facet) { + checkIdentity(ident); + bool notThere = false; ObjectStore* store = findStore(facet); @@ -747,7 +786,7 @@ Freeze::EvictorI::keepFacet(const Identity& ident, const string& facet) ex.id = identityToString(ident); if(!facet.empty()) { - ex.id += " -f " + facet; + ex.id += " -f " + IceUtil::escapeString(facet, ""); } throw ex; } @@ -762,6 +801,8 @@ Freeze::EvictorI::release(const Identity& ident) void Freeze::EvictorI::releaseFacet(const Identity& ident, const string& facet) { + checkIdentity(ident); + { Lock sync(*this); @@ -807,7 +848,7 @@ Freeze::EvictorI::releaseFacet(const Identity& ident, const string& facet) ex.id = identityToString(ident); if(!facet.empty()) { - ex.id += " -f " + facet; + ex.id += " -f " + IceUtil::escapeString(facet, ""); } throw ex; } @@ -842,6 +883,7 @@ Freeze::EvictorI::hasObject(const Identity& ident) bool Freeze::EvictorI::hasFacet(const Identity& ident, const string& facet) { + checkIdentity(ident); ObjectStore* store = 0; { |