summaryrefslogtreecommitdiff
path: root/cpp/src/Freeze/EvictorI.cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2004-04-22 19:15:50 +0000
committerBernard Normier <bernard@zeroc.com>2004-04-22 19:15:50 +0000
commite6042c283588d33c18cb0a85351a82df86a66406 (patch)
treec51a604b5635c8b38de55e28a94d4c43b24f14ec /cpp/src/Freeze/EvictorI.cpp
parentfix (diff)
downloadice-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.cpp62
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;
{