summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG-3.6.md2
-rw-r--r--cpp/src/Ice/PluginManagerI.cpp23
-rw-r--r--cpp/src/IceDiscovery/PluginI.cpp6
-rw-r--r--cpp/src/IceLocatorDiscovery/PluginI.cpp2
-rw-r--r--cpp/test/Ice/plugin/Client.cpp8
-rw-r--r--csharp/src/Ice/PluginManagerI.cs15
-rw-r--r--csharp/src/IceDiscovery/PluginI.cs6
-rw-r--r--csharp/src/IceLocatorDiscovery/PluginI.cs20
-rw-r--r--csharp/test/Ice/plugin/Client.cs16
-rw-r--r--java/src/Ice/src/main/java/Ice/PluginManagerI.java16
-rw-r--r--java/src/IceDiscovery/src/main/java/IceDiscovery/PluginI.java2
-rw-r--r--java/src/IceLocatorDiscovery/src/main/java/IceLocatorDiscovery/PluginI.java2
-rw-r--r--java/test/src/main/java/test/Ice/plugin/Client.java8
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");