summaryrefslogtreecommitdiff
path: root/js/src/Ice/ObjectAdapterFactory.js
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2014-03-19 12:45:55 -0700
committerMark Spruiell <mes@zeroc.com>2014-03-19 12:45:55 -0700
commitcdcffbcc3c3c052afdeb772ff0167e7a90b525bb (patch)
tree4f16ee41ef7d33394c44e9db81e4d6cd89908250 /js/src/Ice/ObjectAdapterFactory.js
parentfixing testicedist.py for 5487 (diff)
downloadice-cdcffbcc3c3c052afdeb772ff0167e7a90b525bb.tar.bz2
ice-cdcffbcc3c3c052afdeb772ff0167e7a90b525bb.tar.xz
ice-cdcffbcc3c3c052afdeb772ff0167e7a90b525bb.zip
merging javascript branch
Diffstat (limited to 'js/src/Ice/ObjectAdapterFactory.js')
-rw-r--r--js/src/Ice/ObjectAdapterFactory.js150
1 files changed, 150 insertions, 0 deletions
diff --git a/js/src/Ice/ObjectAdapterFactory.js b/js/src/Ice/ObjectAdapterFactory.js
new file mode 100644
index 00000000000..8fe50d5d872
--- /dev/null
+++ b/js/src/Ice/ObjectAdapterFactory.js
@@ -0,0 +1,150 @@
+// **********************************************************************
+//
+// 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.
+//
+// **********************************************************************
+
+(function(global){
+ require("Ice/Class");
+ require("Ice/AsyncResultBase");
+ require("Ice/LocalException");
+ require("Ice/ObjectAdapterI");
+ require("Ice/Promise");
+ require("Ice/UUID");
+
+ var Ice = global.Ice || {};
+
+ var AsyncResultBase = Ice.AsyncResultBase;
+ var ObjectAdapterI = Ice.ObjectAdapterI;
+ var Promise = Ice.Promise;
+ var UUID = Ice.UUID;
+
+ //
+ // Only for use by Instance.
+ //
+ var ObjectAdapterFactory = Ice.Class({
+ __init__: function(instance, communicator)
+ {
+ this._instance = instance;
+ this._communicator = communicator;
+ this._adapters = [];
+ this._adapterNamesInUse = [];
+ this._shutdownPromise = new Promise();
+ },
+ shutdown: function()
+ {
+ //
+ // Ignore shutdown requests if the object adapter factory has
+ // already been shut down.
+ //
+ if(this._instance === null)
+ {
+ return this._shutdownPromise;
+ }
+
+ this._instance = null;
+ this._communicator = null;
+ var self = this;
+ Promise.all(
+ this._adapters.map(function(adapter)
+ {
+ return adapter.deactivate();
+ })
+ ).then(
+ function()
+ {
+ self._shutdownPromise.succeed();
+ },
+ function(ex)
+ {
+ self._shutdownPromise.fail(ex);
+ }
+ );
+ return this._shutdownPromise;
+ },
+ waitForShutdown: function()
+ {
+ var self = this;
+ return this._shutdownPromise.then(
+ function()
+ {
+ return Promise.all(self._adapters.map(function(adapter)
+ {
+ return adapter.waitForDeactivate();
+ }));
+ });
+ },
+ isShutdown: function()
+ {
+ return this._instance === null;
+ },
+ destroy: function()
+ {
+ var self = this;
+ return this.waitForShutdown().then(
+ function()
+ {
+ return Promise.all(self._adapters.map(function(adapter)
+ {
+ return adapter.destroy();
+ }));
+ });
+ },
+ createObjectAdapter: function(name, router, promise)
+ {
+ if(this._instance === null)
+ {
+ throw new Ice.ObjectAdapterDeactivatedException();
+ }
+
+ var adapter = null;
+ try
+ {
+ if(name.length === 0)
+ {
+ var uuid = UUID.generateUUID();
+ adapter = new ObjectAdapterI(this._instance, this._communicator, this, uuid, null, true, promise);
+ }
+ else
+ {
+ if(this._adapterNamesInUse.indexOf(name) !== -1)
+ {
+ throw new Ice.AlreadyRegisteredException("object adapter", name);
+ }
+ adapter = new ObjectAdapterI(this._instance, this._communicator, this, name, router, false, promise);
+ this._adapterNamesInUse.push(name);
+ }
+ this._adapters.push(adapter);
+ }
+ catch(ex)
+ {
+ promise.fail(ex, promise);
+ }
+ },
+ removeObjectAdapter: function(adapter)
+ {
+ if(this._instance === null)
+ {
+ return;
+ }
+
+ var n = this._adapters.indexOf(adapter);
+ if(n !== -1)
+ {
+ this._adapters.splice(n, 1);
+ }
+
+ n = this._adapterNamesInUse.indexOf(adapter.getName());
+ if(n !== -1)
+ {
+ this._adapterNamesInUse.splice(n, 1);
+ }
+ }
+ });
+
+ Ice.ObjectAdapterFactory = ObjectAdapterFactory;
+ global.Ice = Ice;
+}(typeof (global) === "undefined" ? window : global));