diff options
author | Benoit Foucher <benoit@zeroc.com> | 2013-01-14 07:17:12 -0800 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2013-01-14 07:17:12 -0800 |
commit | 67c35cebfdf005a8cc344a4012642a63cd917015 (patch) | |
tree | b662c5c1fbc808af0bf70ab5f426f930deb42c22 /java/src | |
parent | minor grammar fix (diff) | |
download | ice-67c35cebfdf005a8cc344a4012642a63cd917015.tar.bz2 ice-67c35cebfdf005a8cc344a4012642a63cd917015.tar.xz ice-67c35cebfdf005a8cc344a4012642a63cd917015.zip |
Missing updates for Ice.UseServantClassLoader following earlier partial commit
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/IceInternal/Incoming.java | 31 | ||||
-rw-r--r-- | java/src/IceInternal/Instance.java | 11 |
2 files changed, 33 insertions, 9 deletions
diff --git a/java/src/IceInternal/Incoming.java b/java/src/IceInternal/Incoming.java index 1c146cad944..1bb01d0ef68 100644 --- a/java/src/IceInternal/Incoming.java +++ b/java/src/IceInternal/Incoming.java @@ -208,17 +208,32 @@ final public class Incoming extends IncomingBase implements Ice.Request { if(_servant != null) { - // - // DispatchAsync is a "pseudo dispatch status", used internally only - // to indicate async dispatch. - // - if(_servant.__dispatch(this, _current) == Ice.DispatchStatus.DispatchAsync) + if(_instance.useServantClassLoader()) + { + Thread.currentThread().setContextClassLoader(_servant.getClass().getClassLoader()); + } + + try { // - // If this was an asynchronous dispatch, we're done here. + // DispatchAsync is a "pseudo dispatch status", used internally only + // to indicate async dispatch. // - return; - } + if(_servant.__dispatch(this, _current) == Ice.DispatchStatus.DispatchAsync) + { + // + // If this was an asynchronous dispatch, we're done here. + // + return; + } + } + finally + { + if(_instance.useServantClassLoader()) + { + Thread.currentThread().setContextClassLoader(null); + } + } if(_locator != null && !__servantLocatorFinished()) { diff --git a/java/src/IceInternal/Instance.java b/java/src/IceInternal/Instance.java index 2da2285863f..3f21329b6d9 100644 --- a/java/src/IceInternal/Instance.java +++ b/java/src/IceInternal/Instance.java @@ -615,6 +615,12 @@ public final class Instance return _packages; } + public boolean + useServantClassLoader() + { + return _useServantClassLoader; + } + // // Only for use by Ice.CommunicatorI // @@ -711,6 +717,8 @@ public final class Instance _packages = validatePackages(); + _useServantClassLoader = _initData.properties.getPropertyAsInt("Ice.UseServantClassLoader") > 0; + _traceLevels = new TraceLevels(_initData.properties); _defaultsAndOverrides = new DefaultsAndOverrides(_initData.properties); @@ -1209,7 +1217,8 @@ public final class Instance private Ice.Identity _adminIdentity; private java.util.Map<String, String> _typeToClassMap = new java.util.HashMap<String, String>(); - private String[] _packages; + final private String[] _packages; + final private boolean _useServantClassLoader; private static boolean _oneOffDone = false; } |