Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2013-02-07 01:51:46 +0000
committerslewis2013-02-07 01:51:46 +0000
commit3f187375c0349b92d1848669c7b8a0e3fee569cc (patch)
tree2489eff346f0e5c7d3b6cbe4f4a4134b920579c5
parentceedf34d784eb1ca757db255d34fad9cada8a218 (diff)
downloadorg.eclipse.ecf-3f187375c0349b92d1848669c7b8a0e3fee569cc.tar.gz
org.eclipse.ecf-3f187375c0349b92d1848669c7b8a0e3fee569cc.tar.xz
org.eclipse.ecf-3f187375c0349b92d1848669c7b8a0e3fee569cc.zip
Added IRemoteServiceProxyCreator for bug
https://bugs.eclipse.org/bugs/show_bug.cgi?id=400164
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice/META-INF/MANIFEST.MF6
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/internal/remoteservice/Activator.java22
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AbstractRemoteService.java20
-rw-r--r--framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceProxyCreator.java12
4 files changed, 54 insertions, 6 deletions
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice/META-INF/MANIFEST.MF b/framework/bundles/org.eclipse.ecf.remoteservice/META-INF/MANIFEST.MF
index 157203800..9c285918e 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice/META-INF/MANIFEST.MF
+++ b/framework/bundles/org.eclipse.ecf.remoteservice/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: org.eclipse.ecf.remoteservice;singleton:=true
-Bundle-Version: 6.0.200.qualifier
+Bundle-Version: 7.0.0.qualifier
Bundle-Activator: org.eclipse.ecf.internal.remoteservice.Activator
Bundle-Vendor: %plugin.provider
Bundle-Localization: plugin
Eclipse-LazyStart: true
Export-Package: org.eclipse.ecf.internal.remoteservice;x-internal:=true,
- org.eclipse.ecf.remoteservice;version="6.0.0",
- org.eclipse.ecf.remoteservice.client;version="6.0.0",
+ org.eclipse.ecf.remoteservice;version="7.0.0",
+ org.eclipse.ecf.remoteservice.client;version="7.0.0",
org.eclipse.ecf.remoteservice.events;version="6.0.0",
org.eclipse.ecf.remoteservice.util;version="6.0.0",
org.eclipse.ecf.remoteservice.util.tracker;version="6.0.0"
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/internal/remoteservice/Activator.java b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/internal/remoteservice/Activator.java
index ffa8572cc..a3c75b63d 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/internal/remoteservice/Activator.java
+++ b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/internal/remoteservice/Activator.java
@@ -11,11 +11,15 @@
package org.eclipse.ecf.internal.remoteservice;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+import java.util.Dictionary;
+import java.util.Hashtable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.ecf.core.util.LogHelper;
import org.eclipse.ecf.core.util.SystemLogService;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
+import org.eclipse.ecf.remoteservice.IRemoteServiceProxyCreator;
+import org.osgi.framework.*;
import org.osgi.service.log.LogService;
import org.osgi.util.tracker.ServiceTracker;
@@ -36,6 +40,8 @@ public class Activator implements BundleActivator {
private LogService logService = null;
+ private ServiceRegistration remoteServiceProxyCreator;
+
/**
* The constructor
*/
@@ -55,6 +61,14 @@ public class Activator implements BundleActivator {
public void start(BundleContext c) throws Exception {
// nothing to do
this.context = c;
+ // Register default IRemoteServiceProxyCreator
+ Dictionary props = new Hashtable();
+ props.put(Constants.SERVICE_RANKING, Integer.MIN_VALUE);
+ this.remoteServiceProxyCreator = this.context.registerService(new String[] {IRemoteServiceProxyCreator.class.getName()}, new IRemoteServiceProxyCreator() {
+ public Object createProxy(ClassLoader classloader, Class[] interfaces, InvocationHandler handler) {
+ return Proxy.newProxyInstance(classloader, interfaces, handler);
+ }
+ }, props);
}
/*
@@ -63,6 +77,10 @@ public class Activator implements BundleActivator {
* @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext c) throws Exception {
+ if (this.remoteServiceProxyCreator != null) {
+ this.remoteServiceProxyCreator.unregister();
+ this.remoteServiceProxyCreator = null;
+ }
if (logServiceTracker != null) {
logServiceTracker.close();
logServiceTracker = null;
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AbstractRemoteService.java b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AbstractRemoteService.java
index 202ce1660..0192f181a 100644
--- a/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AbstractRemoteService.java
+++ b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/AbstractRemoteService.java
@@ -19,6 +19,7 @@ import org.eclipse.equinox.concurrent.future.IFuture;
import org.eclipse.equinox.concurrent.future.IProgressRunnable;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceException;
+import org.osgi.util.tracker.ServiceTracker;
/**
* Abstract remote service implementation. Clients may subclass to avoid re-implementing
@@ -126,7 +127,10 @@ public abstract class AbstractRemoteService implements IRemoteService, Invocatio
}
}
- class ProxyClassLoader extends ClassLoader {
+ /**
+ * @since 7.0
+ */
+ public class ProxyClassLoader extends ClassLoader {
private ClassLoader cl;
@@ -153,9 +157,23 @@ public abstract class AbstractRemoteService implements IRemoteService, Invocatio
}
/**
+ * @since 7.0
+ */
+ protected IRemoteServiceProxyCreator getRemoteServiceProxyCreator() {
+ ServiceTracker st = new ServiceTracker(Activator.getDefault().getContext(), IRemoteServiceProxyCreator.class, null);
+ st.open();
+ IRemoteServiceProxyCreator result = (IRemoteServiceProxyCreator) st.getService();
+ st.close();
+ return result;
+ }
+
+ /**
* @since 6.0
*/
protected Object createProxy(ClassLoader cl, Class[] classes) {
+ IRemoteServiceProxyCreator proxyCreator = getRemoteServiceProxyCreator();
+ if (proxyCreator != null)
+ return proxyCreator.createProxy(new ProxyClassLoader(cl), classes, this);
return Proxy.newProxyInstance(new ProxyClassLoader(cl), classes, this);
}
diff --git a/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceProxyCreator.java b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceProxyCreator.java
new file mode 100644
index 000000000..24d7ccbd4
--- /dev/null
+++ b/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/IRemoteServiceProxyCreator.java
@@ -0,0 +1,12 @@
+package org.eclipse.ecf.remoteservice;
+
+import java.lang.reflect.InvocationHandler;
+
+/**
+ * @since 7.0
+ */
+public interface IRemoteServiceProxyCreator {
+
+ public Object createProxy(ClassLoader classloader, Class[] interfaces, InvocationHandler handler);
+
+}

Back to the top