summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2009-12-19 07:46:20 +1000
committerMichi Henning <michi@zeroc.com>2009-12-19 07:46:20 +1000
commit038798a0826fa20b70575997f7f37b4a80f711a4 (patch)
tree728a8326da646f28d670d8eb14cd2a28a014a5ad
parentFixed bug 4511 - properties override doesn't handle quotes (diff)
downloadice-038798a0826fa20b70575997f7f37b4a80f711a4.tar.bz2
ice-038798a0826fa20b70575997f7f37b4a80f711a4.tar.xz
ice-038798a0826fa20b70575997f7f37b4a80f711a4.zip
Bug 4512: demo/book/evictor_filesystem issues
-rw-r--r--cpp/demo/book/evictor_filesystem/PersistentFilesystem.ice4
-rw-r--r--cpp/demo/book/evictor_filesystem/PersistentFilesystemI.cpp87
-rw-r--r--cpp/demo/book/evictor_filesystem/PersistentFilesystemI.h40
-rw-r--r--cpp/demo/book/evictor_filesystem/Server.cpp19
-rw-r--r--java/demo/book/evictor_filesystem/DirectoryI.java17
-rw-r--r--java/demo/book/evictor_filesystem/FileI.java13
-rw-r--r--java/demo/book/evictor_filesystem/NodeInitializer.java26
-rw-r--r--java/demo/book/evictor_filesystem/Server.java8
8 files changed, 73 insertions, 141 deletions
diff --git a/cpp/demo/book/evictor_filesystem/PersistentFilesystem.ice b/cpp/demo/book/evictor_filesystem/PersistentFilesystem.ice
index b8e915644d6..fe0216eb4d2 100644
--- a/cpp/demo/book/evictor_filesystem/PersistentFilesystem.ice
+++ b/cpp/demo/book/evictor_filesystem/PersistentFilesystem.ice
@@ -19,14 +19,14 @@ module Filesystem
PersistentDirectory* parent;
};
- ["cpp:virtual"]class PersistentFile extends PersistentNode implements File
+ class PersistentFile extends PersistentNode implements File
{
Lines text;
};
dictionary<string, NodeDesc> NodeDict;
- ["cpp:virtual"]class PersistentDirectory extends PersistentNode implements Directory
+ class PersistentDirectory extends PersistentNode implements Directory
{
["freeze:write"]
void removeNode(string name);
diff --git a/cpp/demo/book/evictor_filesystem/PersistentFilesystemI.cpp b/cpp/demo/book/evictor_filesystem/PersistentFilesystemI.cpp
index dc5ed333dff..4813ca17573 100644
--- a/cpp/demo/book/evictor_filesystem/PersistentFilesystemI.cpp
+++ b/cpp/demo/book/evictor_filesystem/PersistentFilesystemI.cpp
@@ -12,27 +12,19 @@
using namespace std;
//
-// Filesystem::NodeI
+// Filesystem::FileI
//
-Freeze::EvictorPtr Filesystem::NodeI::_evictor;
-Filesystem::NodeI::NodeI()
- : _destroyed(false), _id(Ice::Identity())
-{
-}
+Freeze::EvictorPtr Filesystem::FileI::_evictor;
-Filesystem::NodeI::NodeI(const Ice::Identity& id)
- : _destroyed(false), _id(id)
+Filesystem::FileI::FileI() : _destroyed(false)
{
}
-//
-// Filesystem::FileI
-//
string
Filesystem::FileI::name(const Ice::Current& c)
{
- IceUtil::Mutex::Lock lock(*this);
+ IceUtil::Mutex::Lock lock(_mutex);
if(_destroyed)
{
@@ -46,7 +38,7 @@ void
Filesystem::FileI::destroy(const Ice::Current& c)
{
{
- IceUtil::Mutex::Lock lock(*this);
+ IceUtil::Mutex::Lock lock(_mutex);
if(_destroyed)
{
@@ -55,14 +47,17 @@ Filesystem::FileI::destroy(const Ice::Current& c)
_destroyed = true;
}
+ //
+ // Because we use a transactional evictor, these updates are guaranteed to be atomic.
+ //
parent->removeNode(nodeName);
- _evictor->remove(_id);
+ _evictor->remove(c.id);
}
Filesystem::Lines
Filesystem::FileI::read(const Ice::Current& c)
{
- IceUtil::Mutex::Lock lock(*this);
+ IceUtil::Mutex::Lock lock(_mutex);
if(_destroyed)
{
@@ -75,7 +70,7 @@ Filesystem::FileI::read(const Ice::Current& c)
void
Filesystem::FileI::write(const Filesystem::Lines& text, const Ice::Current& c)
{
- IceUtil::Mutex::Lock lock(*this);
+ IceUtil::Mutex::Lock lock(_mutex);
if(_destroyed)
{
@@ -85,22 +80,20 @@ Filesystem::FileI::write(const Filesystem::Lines& text, const Ice::Current& c)
this->text = text;
}
-Filesystem::FileI::FileI()
-{
-}
+//
+// Filesystem::DirectoryI
+//
-Filesystem::FileI::FileI(const Ice::Identity& id)
- : NodeI(id)
+Freeze::EvictorPtr Filesystem::DirectoryI::_evictor;
+
+Filesystem::DirectoryI::DirectoryI() : _destroyed(false)
{
}
-//
-// Filesystem::DirectoryI
-//
string
Filesystem::DirectoryI::name(const Ice::Current& c)
{
- IceUtil::Mutex::Lock lock(*this);
+ IceUtil::Mutex::Lock lock(_mutex);
if(_destroyed)
{
@@ -119,7 +112,7 @@ Filesystem::DirectoryI::destroy(const Ice::Current& c)
}
{
- IceUtil::Mutex::Lock lock(*this);
+ IceUtil::Mutex::Lock lock(_mutex);
if(_destroyed)
{
@@ -132,14 +125,17 @@ Filesystem::DirectoryI::destroy(const Ice::Current& c)
_destroyed = true;
}
+ //
+ // Because we use a transactional evictor, these updates are guaranteed to be atomic.
+ //
parent->removeNode(nodeName);
- _evictor->remove(_id);
+ _evictor->remove(c.id);
}
Filesystem::NodeDescSeq
Filesystem::DirectoryI::list(const Ice::Current& c)
{
- IceUtil::Mutex::Lock lock(*this);
+ IceUtil::Mutex::Lock lock(_mutex);
if(_destroyed)
{
@@ -158,7 +154,7 @@ Filesystem::DirectoryI::list(const Ice::Current& c)
Filesystem::NodeDesc
Filesystem::DirectoryI::find(const string& name, const Ice::Current& c)
{
- IceUtil::Mutex::Lock lock(*this);
+ IceUtil::Mutex::Lock lock(_mutex);
if(_destroyed)
{
@@ -176,7 +172,7 @@ Filesystem::DirectoryI::find(const string& name, const Ice::Current& c)
Filesystem::DirectoryPrx
Filesystem::DirectoryI::createDirectory(const string& name, const Ice::Current& c)
{
- IceUtil::Mutex::Lock lock(*this);
+ IceUtil::Mutex::Lock lock(_mutex);
if(_destroyed)
{
@@ -190,7 +186,7 @@ Filesystem::DirectoryI::createDirectory(const string& name, const Ice::Current&
Ice::Identity id;
id.name = IceUtil::generateUUID();
- PersistentDirectoryPtr dir = new DirectoryI(id);
+ PersistentDirectoryPtr dir = new DirectoryI;
dir->nodeName = name;
dir->parent = PersistentDirectoryPrx::uncheckedCast(c.adapter->createProxy(c.id));
DirectoryPrx proxy = DirectoryPrx::uncheckedCast(_evictor->add(dir, id));
@@ -207,7 +203,7 @@ Filesystem::DirectoryI::createDirectory(const string& name, const Ice::Current&
Filesystem::FilePrx
Filesystem::DirectoryI::createFile(const string& name, const Ice::Current& c)
{
- IceUtil::Mutex::Lock lock(*this);
+ IceUtil::Mutex::Lock lock(_mutex);
if(_destroyed)
{
@@ -221,7 +217,7 @@ Filesystem::DirectoryI::createFile(const string& name, const Ice::Current& c)
Ice::Identity id;
id.name = IceUtil::generateUUID();
- PersistentFilePtr file = new FileI(id);
+ PersistentFilePtr file = new FileI;
file->nodeName = name;
file->parent = PersistentDirectoryPrx::uncheckedCast(c.adapter->createProxy(c.id));
FilePrx proxy = FilePrx::uncheckedCast(_evictor->add(file, id));
@@ -238,22 +234,13 @@ Filesystem::DirectoryI::createFile(const string& name, const Ice::Current& c)
void
Filesystem::DirectoryI::removeNode(const string& name, const Ice::Current&)
{
- IceUtil::Mutex::Lock lock(*this);
+ IceUtil::Mutex::Lock lock(_mutex);
NodeDict::iterator p = nodes.find(name);
assert(p != nodes.end());
nodes.erase(p);
}
-Filesystem::DirectoryI::DirectoryI()
-{
-}
-
-Filesystem::DirectoryI::DirectoryI(const Ice::Identity& id) :
- NodeI(id)
-{
-}
-
//
// Filesystem::NodeFactory
//
@@ -279,17 +266,3 @@ void
Filesystem::NodeFactory::destroy()
{
}
-
-//
-// Filesystem::NodeInitializer
-//
-void
-Filesystem::NodeInitializer::initialize(const Ice::ObjectAdapterPtr&,
- const Ice::Identity& id,
- const string& facet,
- const Ice::ObjectPtr& obj)
-{
- NodeIPtr node = NodeIPtr::dynamicCast(obj);
- assert(node);
- const_cast<Ice::Identity&>(node->_id) = id;
-}
diff --git a/cpp/demo/book/evictor_filesystem/PersistentFilesystemI.h b/cpp/demo/book/evictor_filesystem/PersistentFilesystemI.h
index ae6773be1fe..bd112facb5a 100644
--- a/cpp/demo/book/evictor_filesystem/PersistentFilesystemI.h
+++ b/cpp/demo/book/evictor_filesystem/PersistentFilesystemI.h
@@ -27,36 +27,37 @@ public:
protected:
NodeI();
- NodeI(const Ice::Identity&);
bool _destroyed;
-
-public:
-
- const Ice::Identity _id;
};
typedef IceUtil::Handle<NodeI> NodeIPtr;
-class FileI : virtual public PersistentFile,
- virtual public NodeI
+class FileI : virtual public PersistentFile
{
public:
+ FileI();
+
virtual std::string name(const Ice::Current&);
virtual void destroy(const Ice::Current&);
virtual Lines read(const Ice::Current&);
virtual void write(const Lines&, const Ice::Current&);
- FileI();
- FileI(const Ice::Identity&);
+ static Freeze::EvictorPtr _evictor;
+
+private:
+
+ bool _destroyed;
+ IceUtil::Mutex _mutex;
};
-class DirectoryI : virtual public PersistentDirectory,
- virtual public NodeI
+class DirectoryI : virtual public PersistentDirectory
{
public:
+ DirectoryI();
+
virtual std::string name(const Ice::Current&);
virtual void destroy(const Ice::Current&);
@@ -66,9 +67,12 @@ public:
virtual FilePrx createFile(const std::string&, const Ice::Current&);
virtual void removeNode(const std::string&, const Ice::Current&);
- DirectoryI();
- DirectoryI(const Ice::Identity&);
+ static Freeze::EvictorPtr _evictor;
+public:
+
+ bool _destroyed;
+ IceUtil::Mutex _mutex;
};
class NodeFactory : virtual public Ice::ObjectFactory
@@ -79,16 +83,6 @@ public:
virtual void destroy();
};
-class NodeInitializer : virtual public Freeze::ServantInitializer
-{
-public:
-
- virtual void initialize(const Ice::ObjectAdapterPtr&,
- const Ice::Identity&,
- const std::string&,
- const Ice::ObjectPtr&);
-};
-
}
#endif
diff --git a/cpp/demo/book/evictor_filesystem/Server.cpp b/cpp/demo/book/evictor_filesystem/Server.cpp
index 72af8fe658d..4692488244a 100644
--- a/cpp/demo/book/evictor_filesystem/Server.cpp
+++ b/cpp/demo/book/evictor_filesystem/Server.cpp
@@ -36,23 +36,24 @@ public:
Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("EvictorFilesystem");
//
- // Create the Freeze evictor (stored in the NodeI::_evictor static member).
+ // Create the Freeze evictor.
//
- Freeze::ServantInitializerPtr init = new NodeInitializer;
- NodeI::_evictor = Freeze::createTransactionalEvictor(adapter, _envName, "evictorfs",
- Freeze::FacetTypeMap(), init);
+ Freeze::EvictorPtr evictor = Freeze::createTransactionalEvictor(adapter, _envName, "evictorfs");
+ FileI::_evictor = evictor;
+ DirectoryI::_evictor = evictor;
- adapter->addServantLocator(NodeI::_evictor, "");
+ adapter->addServantLocator(evictor, "");
//
// Create the root node if it doesn't exist.
//
- Ice::Identity rootId = communicator()->stringToIdentity("RootDir");
- if(!NodeI::_evictor->hasObject(rootId))
+ Ice::Identity rootId;
+ rootId.name = "RootDir";
+ if(!evictor->hasObject(rootId))
{
- PersistentDirectoryPtr root = new DirectoryI(rootId);
+ PersistentDirectoryPtr root = new DirectoryI;
root->nodeName = "/";
- NodeI::_evictor->add(root, rootId);
+ evictor->add(root, rootId);
}
//
diff --git a/java/demo/book/evictor_filesystem/DirectoryI.java b/java/demo/book/evictor_filesystem/DirectoryI.java
index c58f1c64013..98cd14d7dbd 100644
--- a/java/demo/book/evictor_filesystem/DirectoryI.java
+++ b/java/demo/book/evictor_filesystem/DirectoryI.java
@@ -15,14 +15,7 @@ public final class DirectoryI extends PersistentDirectory
DirectoryI()
{
_destroyed = false;
- }
-
- public
- DirectoryI(Ice.Identity id)
- {
- _id = id;
nodes = new java.util.HashMap<java.lang.String, NodeDesc>();
- _destroyed = false;
}
public synchronized String
@@ -58,8 +51,11 @@ public final class DirectoryI extends PersistentDirectory
_destroyed = true;
}
+ //
+ // Because we use a transactional evictor, these updates are guaranteed to be atomic.
+ //
parent.removeNode(nodeName);
- _evictor.remove(_id);
+ _evictor.remove(current.id);
}
public synchronized NodeDesc[]
@@ -112,7 +108,7 @@ public final class DirectoryI extends PersistentDirectory
}
Ice.Identity id = current.adapter.getCommunicator().stringToIdentity(java.util.UUID.randomUUID().toString());
- PersistentDirectory dir = new DirectoryI(id);
+ PersistentDirectory dir = new DirectoryI();
dir.nodeName = name;
dir.parent = PersistentDirectoryPrxHelper.uncheckedCast(current.adapter.createProxy(current.id));
DirectoryPrx proxy = DirectoryPrxHelper.uncheckedCast(_evictor.add(dir, id));
@@ -141,7 +137,7 @@ public final class DirectoryI extends PersistentDirectory
}
Ice.Identity id = current.adapter.getCommunicator().stringToIdentity(java.util.UUID.randomUUID().toString());
- PersistentFile file = new FileI(id);
+ PersistentFile file = new FileI();
file.nodeName = name;
file.parent = PersistentDirectoryPrxHelper.uncheckedCast(current.adapter.createProxy(current.id));
FilePrx proxy = FilePrxHelper.uncheckedCast(_evictor.add(file, id));
@@ -163,6 +159,5 @@ public final class DirectoryI extends PersistentDirectory
}
public static Freeze.Evictor _evictor;
- public Ice.Identity _id;
private boolean _destroyed;
}
diff --git a/java/demo/book/evictor_filesystem/FileI.java b/java/demo/book/evictor_filesystem/FileI.java
index 8b84ae13b34..5455b0880c6 100644
--- a/java/demo/book/evictor_filesystem/FileI.java
+++ b/java/demo/book/evictor_filesystem/FileI.java
@@ -17,13 +17,6 @@ public final class FileI extends PersistentFile
_destroyed = false;
}
- public
- FileI(Ice.Identity id)
- {
- _id = id;
- _destroyed = false;
- }
-
public synchronized String
name(Ice.Current current)
{
@@ -48,8 +41,11 @@ public final class FileI extends PersistentFile
_destroyed = true;
}
+ //
+ // Because we use a transactional evictor, these updates are guaranteed to be atomic.
+ //
parent.removeNode(nodeName);
- _evictor.remove(_id);
+ _evictor.remove(current.id);
}
public synchronized String[]
@@ -76,6 +72,5 @@ public final class FileI extends PersistentFile
}
public static Freeze.Evictor _evictor;
- public Ice.Identity _id;
private boolean _destroyed;
}
diff --git a/java/demo/book/evictor_filesystem/NodeInitializer.java b/java/demo/book/evictor_filesystem/NodeInitializer.java
deleted file mode 100644
index e09f39c1db5..00000000000
--- a/java/demo/book/evictor_filesystem/NodeInitializer.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-import Filesystem.*;
-
-public class NodeInitializer implements Freeze.ServantInitializer
-{
- public void
- initialize(Ice.ObjectAdapter adapter, Ice.Identity id, String facet, Ice.Object obj)
- {
- if(obj instanceof FileI)
- {
- ((FileI)obj)._id = id;
- }
- else if(obj instanceof DirectoryI)
- {
- ((DirectoryI)obj)._id = id;
- }
- }
-}
diff --git a/java/demo/book/evictor_filesystem/Server.java b/java/demo/book/evictor_filesystem/Server.java
index dfdf5e109c3..55bd40fccc5 100644
--- a/java/demo/book/evictor_filesystem/Server.java
+++ b/java/demo/book/evictor_filesystem/Server.java
@@ -37,9 +37,8 @@ public class Server extends Ice.Application
// Create the Freeze evictor (stored in the _evictor
// static member).
//
- Freeze.ServantInitializer init = new NodeInitializer();
Freeze.Evictor evictor = Freeze.Util.createTransactionalEvictor(adapter, _envName, "evictorfs",
- null, init, null, true);
+ null, null, null, true);
DirectoryI._evictor = evictor;
FileI._evictor = evictor;
@@ -48,10 +47,11 @@ public class Server extends Ice.Application
//
// Create the root node if it doesn't exist.
//
- Ice.Identity rootId = Ice.Util.stringToIdentity("RootDir");
+ Ice.Identity rootId = new Ice.Identity();
+ rootId.name = "RootDir";
if(!evictor.hasObject(rootId))
{
- PersistentDirectory root = new DirectoryI(rootId);
+ PersistentDirectory root = new DirectoryI();
root.nodeName = "/";
root.nodes = new java.util.HashMap<java.lang.String, NodeDesc>();
evictor.add(root, rootId);