// ********************************************************************** // // Copyright (c) 2003-2014 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. // // ********************************************************************** #include using namespace std; using namespace Filesystem; class FilesystemApp : public Ice::Application { public: FilesystemApp(const string& envName) : _envName(envName) { } virtual int run(int, char*[]) { // // Install object factories. // Ice::ObjectFactoryPtr factory = new NodeFactory; communicator()->addObjectFactory(factory, PersistentFile::ice_staticId()); communicator()->addObjectFactory(factory, PersistentDirectory::ice_staticId()); // // Create an object adapter. // Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("EvictorFilesystem"); // // Create the Freeze evictor. // Freeze::EvictorPtr evictor = Freeze::createTransactionalEvictor(adapter, _envName, "evictorfs"); FileI::_evictor = evictor; DirectoryI::_evictor = evictor; adapter->addServantLocator(evictor, ""); // // Create the root node if it doesn't exist. // Ice::Identity rootId; rootId.name = "RootDir"; if(!evictor->hasObject(rootId)) { PersistentDirectoryPtr root = new DirectoryI; root->nodeName = "/"; evictor->add(root, rootId); } // // Ready to accept requests now. // adapter->activate(); // // Wait until we are done. // communicator()->waitForShutdown(); if(interrupted()) { cerr << appName() << ": received signal, shutting down" << endl; } return 0; } private: string _envName; }; int main(int argc, char* argv[]) { FilesystemApp app("db"); return app.main(argc, argv, "config.server"); }