diff options
-rw-r--r-- | CHANGELOG-3.6.md | 2 | ||||
-rw-r--r-- | cpp/src/Ice/PluginManagerI.cpp | 23 | ||||
-rw-r--r-- | cpp/src/IceDiscovery/PluginI.cpp | 6 | ||||
-rw-r--r-- | cpp/src/IceLocatorDiscovery/PluginI.cpp | 2 | ||||
-rw-r--r-- | cpp/test/Ice/plugin/Client.cpp | 8 | ||||
-rw-r--r-- | csharp/src/Ice/PluginManagerI.cs | 15 | ||||
-rw-r--r-- | csharp/src/IceDiscovery/PluginI.cs | 6 | ||||
-rw-r--r-- | csharp/src/IceLocatorDiscovery/PluginI.cs | 20 | ||||
-rw-r--r-- | csharp/test/Ice/plugin/Client.cs | 16 | ||||
-rw-r--r-- | java/src/Ice/src/main/java/Ice/PluginManagerI.java | 16 | ||||
-rw-r--r-- | java/src/IceDiscovery/src/main/java/IceDiscovery/PluginI.java | 2 | ||||
-rw-r--r-- | java/src/IceLocatorDiscovery/src/main/java/IceLocatorDiscovery/PluginI.java | 2 | ||||
-rw-r--r-- | java/test/src/main/java/test/Ice/plugin/Client.java | 8 |
13 files changed, 87 insertions, 39 deletions
diff --git a/CHANGELOG-3.6.md b/CHANGELOG-3.6.md index 3faed8e3de5..1b4c98812c9 100644 --- a/CHANGELOG-3.6.md +++ b/CHANGELOG-3.6.md @@ -19,6 +19,8 @@ These are the changes since Ice 3.5.1. ## General Changes +- Exceptions raised by the Ice::Plugin initialize method are now caught by the communicator, which raises Ice::PluginInitializationException instead. + - Fixed IceGrid bug where an application update could fail and leave the registry in an invalid state if some allocation requests were pending while the application was updated. - Deprecated the `IceSSL.PersistKeySet` which is now only used when importing certificates with the deprecated `IceSSL.ImportCert` property. diff --git a/cpp/src/Ice/PluginManagerI.cpp b/cpp/src/Ice/PluginManagerI.cpp index 33901a78cb7..e3186298a9c 100644 --- a/cpp/src/Ice/PluginManagerI.cpp +++ b/cpp/src/Ice/PluginManagerI.cpp @@ -86,7 +86,26 @@ Ice::PluginManagerI::initializePlugins() { for(PluginInfoList::iterator p = _plugins.begin(); p != _plugins.end(); ++p) { - p->plugin->initialize(); + try + { + p->plugin->initialize(); + } + catch(const Ice::PluginInitializationException&) + { + throw; + } + catch(const std::exception& ex) + { + ostringstream os; + os << "plugin `" << p->name << "' initialization failed:\n" << ex.what(); + throw PluginInitializationException(__FILE__, __LINE__, os.str()); + } + catch(...) + { + ostringstream os; + os << "plugin `" << p->name << "' initialization failed:\nunknown exception"; + throw PluginInitializationException(__FILE__, __LINE__, os.str()); + } initializedPlugins.push_back(p->plugin); } } @@ -420,7 +439,7 @@ Ice::PluginManagerI::loadPlugin(const string& name, const string& pluginSpec, St args = properties->parseCommandLineOptions(name, args); cmdArgs = properties->parseCommandLineOptions(name, cmdArgs); } - + PluginPtr plugin; PLUGIN_FACTORY factory = 0; DynamicLibraryPtr library; diff --git a/cpp/src/IceDiscovery/PluginI.cpp b/cpp/src/IceDiscovery/PluginI.cpp index 387fffd21fa..6873cec56b6 100644 --- a/cpp/src/IceDiscovery/PluginI.cpp +++ b/cpp/src/IceDiscovery/PluginI.cpp @@ -95,7 +95,7 @@ PluginI::initialize() // Setup locatory registry. // LocatorRegistryIPtr locatorRegistry = new LocatorRegistryI(_communicator); - Ice::LocatorRegistryPrx locatorRegistryPrx = + Ice::LocatorRegistryPrx locatorRegistryPrx = Ice::LocatorRegistryPrx::uncheckedCast(_locatorAdapter->addWithUUID(locatorRegistry)); string lookupEndpoints = properties->getProperty("IceDiscovery.Lookup"); @@ -125,7 +125,7 @@ PluginI::initialize() catch(const Ice::LocalException& ex) { ostringstream os; - os << "unable to establish multicast connection, IceDiscovery will be disabled:\n"; + os << "IceDiscovery is unable to establish a multicast connection:\n"; os << "proxy = " << lookupPrx << '\n'; os << ex; throw Ice::PluginInitializationException(__FILE__, __LINE__, os.str()); @@ -145,7 +145,7 @@ PluginI::initialize() // Ice::ObjectPrx loc = _locatorAdapter->addWithUUID(new LocatorI(_lookup, locatorRegistryPrx)); _communicator->setDefaultLocator(Ice::LocatorPrx::uncheckedCast(loc)); - + _multicastAdapter->activate(); _replyAdapter->activate(); _locatorAdapter->activate(); diff --git a/cpp/src/IceLocatorDiscovery/PluginI.cpp b/cpp/src/IceLocatorDiscovery/PluginI.cpp index fb79d4b8529..d364fa7157c 100644 --- a/cpp/src/IceLocatorDiscovery/PluginI.cpp +++ b/cpp/src/IceLocatorDiscovery/PluginI.cpp @@ -241,7 +241,7 @@ PluginI::initialize() catch(const Ice::LocalException& ex) { ostringstream os; - os << "unable to establish multicast connection, Ice locator discovery will be disabled:\n"; + os << "IceLocatorDiscovery is unable to establish a multicast connection:\n"; os << "proxy = " << lookupPrx << '\n'; os << ex; throw Ice::PluginInitializationException(__FILE__, __LINE__, os.str()); diff --git a/cpp/test/Ice/plugin/Client.cpp b/cpp/test/Ice/plugin/Client.cpp index add1d191002..d35ee1c53d9 100644 --- a/cpp/test/Ice/plugin/Client.cpp +++ b/cpp/test/Ice/plugin/Client.cpp @@ -223,9 +223,9 @@ main(int argc, char* argv[]) communicator = Ice::initialize(argc, argv, initData); test(false); } - catch(const std::exception& ex) + catch(const Ice::PluginInitializationException& ex) { - test(string(ex.what()) == "PluginInitializeFailExeption"); + test(ex.reason.find("PluginInitializeFailExeption") > 0); } test(!communicator); cout << "ok" << endl; @@ -298,9 +298,9 @@ main(int argc, char* argv[]) communicator = Ice::initialize(argc, argv, initData); test(false); } - catch(const std::exception& ex) + catch(const Ice::PluginInitializationException& ex) { - test(string(ex.what()) == "PluginInitializeFailExeption"); + test(ex.reason.find("PluginInitializeFailExeption") > 0); } test(!communicator); cout << "ok" << endl; diff --git a/csharp/src/Ice/PluginManagerI.cs b/csharp/src/Ice/PluginManagerI.cs index 3069c1e1488..a663b0a9eb7 100644 --- a/csharp/src/Ice/PluginManagerI.cs +++ b/csharp/src/Ice/PluginManagerI.cs @@ -53,7 +53,20 @@ namespace Ice { foreach(PluginInfo p in _plugins) { - p.plugin.initialize(); + try + { + p.plugin.initialize(); + } + catch(PluginInitializationException ex) + { + throw ex; + } + catch(System.Exception ex) + { + PluginInitializationException e = new PluginInitializationException(ex); + e.reason = "plugin `" + p.name + "' initialization failed"; + throw e; + } initializedPlugins.Add(p.plugin); } } diff --git a/csharp/src/IceDiscovery/PluginI.cs b/csharp/src/IceDiscovery/PluginI.cs index ec846f016fd..69e3a6c0667 100644 --- a/csharp/src/IceDiscovery/PluginI.cs +++ b/csharp/src/IceDiscovery/PluginI.cs @@ -33,7 +33,7 @@ namespace IceDiscovery public void initialize() { Ice.Properties properties = _communicator.getProperties(); - + bool ipv4 = properties.getPropertyAsIntWithDefault("Ice.IPv4", 1) > 0; bool preferIPv6 = properties.getPropertyAsInt("Ice.PreferIPv6Address") > 0; string address; @@ -103,7 +103,7 @@ namespace IceDiscovery catch(Ice.LocalException ex) { StringBuilder b = new StringBuilder(); - b.Append("unable to establish multicast connection, IceDiscovery will be disabled:\n"); + b.Append("IceDiscovery is unable to establish a multicast connection:\n"); b.Append("proxy = "); b.Append(lookupPrx.ToString()); b.Append('\n'); @@ -127,7 +127,7 @@ namespace IceDiscovery loc = _locatorAdapter.addWithUUID( new LocatorI(lookup, Ice.LocatorRegistryPrxHelper.uncheckedCast(locatorRegistryPrx))); _communicator.setDefaultLocator(Ice.LocatorPrxHelper.uncheckedCast(loc)); - + _multicastAdapter.activate(); _replyAdapter.activate(); _locatorAdapter.activate(); diff --git a/csharp/src/IceLocatorDiscovery/PluginI.cs b/csharp/src/IceLocatorDiscovery/PluginI.cs index ed000dc0d6c..f349eaa560c 100644 --- a/csharp/src/IceLocatorDiscovery/PluginI.cs +++ b/csharp/src/IceLocatorDiscovery/PluginI.cs @@ -25,9 +25,9 @@ namespace IceLocatorDiscovery internal class Request { - public Request(LocatorI locator, - string operation, - Ice.OperationMode mode, + public Request(LocatorI locator, + string operation, + Ice.OperationMode mode, byte[] inParams, Dictionary<string, string> context, Ice.AMD_Object_ice_invoke amdCB) @@ -83,19 +83,19 @@ namespace IceLocatorDiscovery internal class VoidLocatorI : Ice.LocatorDisp_ { - public override void + public override void findObjectById_async(Ice.AMD_Locator_findObjectById amdCB, Ice.Identity id, Ice.Current current) { amdCB.ice_response(null); } - - public override void + + public override void findAdapterById_async(Ice.AMD_Locator_findAdapterById amdCB, String id, Ice.Current current) { amdCB.ice_response(null); } - - public override Ice.LocatorRegistryPrx + + public override Ice.LocatorRegistryPrx getRegistry(Ice.Current current) { return null; @@ -383,7 +383,7 @@ namespace IceLocatorDiscovery catch (Ice.LocalException ex) { System.Text.StringBuilder s = new System.Text.StringBuilder(); - s.Append("unable to establish multicast connection, Ice locator discovery will be disabled:\n"); + s.Append("IceLocatorDiscovery is unable to establish a multicast connection:\n"); s.Append("proxy = "); s.Append(lookupPrx.ToString()); s.Append("\n"); @@ -392,7 +392,7 @@ namespace IceLocatorDiscovery } Ice.LocatorPrx voidLo = Ice.LocatorPrxHelper.uncheckedCast(_locatorAdapter.addWithUUID(new VoidLocatorI())); - + string instanceName = properties.getProperty("IceLocatorDiscovery.InstanceName"); Ice.Identity id = new Ice.Identity(); id.name = "Locator"; diff --git a/csharp/test/Ice/plugin/Client.cs b/csharp/test/Ice/plugin/Client.cs index bf714113a14..f9d502d4512 100644 --- a/csharp/test/Ice/plugin/Client.cs +++ b/csharp/test/Ice/plugin/Client.cs @@ -37,7 +37,7 @@ public class Client { Ice.InitializationData initData = new Ice.InitializationData(); initData.properties = Ice.Util.createProperties(); - initData.properties.setProperty("Ice.Plugin.Test", + initData.properties.setProperty("Ice.Plugin.Test", "plugins/Plugin.dll:PluginFactory 'C:\\Program Files\\' --DatabasePath " + "'C:\\Program Files\\Application\\db'"); communicator = Ice.Util.initialize(ref args, initData); @@ -61,9 +61,9 @@ public class Client communicator = Ice.Util.initialize(ref args, initData); test(false); } - catch(System.Exception ex) + catch(Ice.PluginInitializationException ex) { - test(ex.Message.Equals("PluginInitializeFailException")); + test(ex.InnerException.Message.Equals("PluginInitializeFailException")); } test(communicator == null); Console.WriteLine("ok"); @@ -132,18 +132,18 @@ public class Client { Ice.InitializationData initData = new Ice.InitializationData(); initData.properties = Ice.Util.createProperties(); - initData.properties.setProperty("Ice.Plugin.PluginOneFail", + initData.properties.setProperty("Ice.Plugin.PluginOneFail", "plugins/Plugin.dll:PluginOneFailFactory"); - initData.properties.setProperty("Ice.Plugin.PluginTwoFail", + initData.properties.setProperty("Ice.Plugin.PluginTwoFail", "plugins/Plugin.dll:PluginTwoFailFactory"); - initData.properties.setProperty("Ice.Plugin.PluginThreeFail", + initData.properties.setProperty("Ice.Plugin.PluginThreeFail", "plugins/Plugin.dll:PluginThreeFailFactory"); initData.properties.setProperty("Ice.PluginLoadOrder", "PluginOneFail, PluginTwoFail, PluginThreeFail"); communicator = Ice.Util.initialize(ref args, initData); } - catch(System.Exception ex) + catch(Ice.PluginInitializationException ex) { - test(ex.Message.Equals("PluginInitializeFailException")); + test(ex.InnerException.Message.Equals("PluginInitializeFailException")); } test(communicator == null); Console.WriteLine("ok"); diff --git a/java/src/Ice/src/main/java/Ice/PluginManagerI.java b/java/src/Ice/src/main/java/Ice/PluginManagerI.java index e2f7beb1f6b..b82c9cc3e45 100644 --- a/java/src/Ice/src/main/java/Ice/PluginManagerI.java +++ b/java/src/Ice/src/main/java/Ice/PluginManagerI.java @@ -32,7 +32,21 @@ public final class PluginManagerI implements PluginManager { for(PluginInfo p : _plugins) { - p.plugin.initialize(); + try + { + p.plugin.initialize(); + } + catch(Ice.PluginInitializationException ex) + { + throw ex; + } + catch(RuntimeException ex) + { + PluginInitializationException e = new PluginInitializationException(); + e.reason = "plugin `" + p.name + "' initialization failed"; + e.initCause(ex); + throw e; + } initializedPlugins.add(p.plugin); } } diff --git a/java/src/IceDiscovery/src/main/java/IceDiscovery/PluginI.java b/java/src/IceDiscovery/src/main/java/IceDiscovery/PluginI.java index 6fd030fc59a..0afc4d7f915 100644 --- a/java/src/IceDiscovery/src/main/java/IceDiscovery/PluginI.java +++ b/java/src/IceDiscovery/src/main/java/IceDiscovery/PluginI.java @@ -94,7 +94,7 @@ public class PluginI implements Ice.Plugin catch(Ice.LocalException ex) { StringBuilder b = new StringBuilder(); - b.append("unable to establish multicast connection, IceDiscovery will be disabled:\n"); + b.append("IceDiscovery is unable to establish a multicast connection:\n"); b.append("proxy = "); b.append(lookupPrx.toString()); b.append('\n'); diff --git a/java/src/IceLocatorDiscovery/src/main/java/IceLocatorDiscovery/PluginI.java b/java/src/IceLocatorDiscovery/src/main/java/IceLocatorDiscovery/PluginI.java index bbe3fd148ff..c93d4f19df3 100644 --- a/java/src/IceLocatorDiscovery/src/main/java/IceLocatorDiscovery/PluginI.java +++ b/java/src/IceLocatorDiscovery/src/main/java/IceLocatorDiscovery/PluginI.java @@ -379,7 +379,7 @@ class PluginI implements Ice.Plugin catch(Ice.LocalException ex) { StringBuilder s = new StringBuilder(); - s.append("unable to establish multicast connection, Ice locator discovery will be disabled:\n"); + s.append("IceLocatorDiscovery is unable to establish a multicast connection:\n"); s.append("proxy = ").append(lookupPrx.toString()).append("\n").append(ex); throw new Ice.PluginInitializationException(s.toString()); } diff --git a/java/test/src/main/java/test/Ice/plugin/Client.java b/java/test/src/main/java/test/Ice/plugin/Client.java index 2397d0d46c0..a4aa05fffc6 100644 --- a/java/test/src/main/java/test/Ice/plugin/Client.java +++ b/java/test/src/main/java/test/Ice/plugin/Client.java @@ -59,9 +59,9 @@ public class Client extends test.Util.Application communicator = Ice.Util.initialize(args, initData); test(false); } - catch(RuntimeException ex) + catch(Ice.PluginInitializationException ex) { - test(ex.getMessage().equals("PluginInitializeFailException")); + test(ex.getCause().getMessage().equals("PluginInitializeFailException")); } test(communicator == null); printWriter.println("ok"); @@ -142,9 +142,9 @@ public class Client extends test.Util.Application initData.properties.setProperty("Ice.PluginLoadOrder", "PluginOneFail, PluginTwoFail, PluginThreeFail"); communicator = Ice.Util.initialize(args, initData); } - catch(RuntimeException ex) + catch(Ice.PluginInitializationException ex) { - test(ex.getMessage().equals("PluginInitializeFailException")); + test(ex.getCause().getMessage().equals("PluginInitializeFailException")); } test(communicator == null); printWriter.println("ok"); |