[dependency-shot] r415 committed - Add util classes for OSGi Env

0 views
Skip to first unread message

depende...@googlecode.com

unread,
Apr 8, 2011, 5:53:42 AM4/8/11
to depende...@googlegroups.com
Revision: 415
Author: mathieuancelin
Date: Fri Apr 8 02:49:37 2011
Log: Add util classes for OSGi Env
http://code.google.com/p/dependency-shot/source/detail?r=415

Added:

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/BundleContextHolder.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/DynamicServiceHandler.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/Registration.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/RegistrationImpl.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/Registrations.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/RegistrationsHolder.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/RegistrationsImpl.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/Service.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/ServiceImpl.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/ServiceReferenceHandler.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/Services.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/ServicesImpl.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/ServicesProducer.java
Modified:

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/DependencyShotActivator.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/config/DynamicProvider.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/registry/ServiceRegistryImpl.java

/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/scope/DynamicScope.java

=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/BundleContextHolder.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2011 mathieuancelin.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+import javax.inject.Singleton;
+import org.osgi.framework.BundleContext;
+
+/**
+ *
+ * @author mathieuancelin
+ */
+@Singleton
+public class BundleContextHolder {
+
+ private BundleContext context;
+
+ public BundleContext getContext() {
+ return context;
+ }
+
+ public void setContext(BundleContext context) {
+ this.context = context;
+ }
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/DynamicServiceHandler.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,32 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+/**
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+public class DynamicServiceHandler implements InvocationHandler {
+
+ private final String name;
+ private final BundleContext registry;
+
+ public DynamicServiceHandler(String name, BundleContext registry) {
+ this.name = name;
+ this.registry = registry;
+ }
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
+ ServiceReference reference = registry.getServiceReference(name);
+ Object instanceToUse = registry.getService(reference);
+ try {
+ return method.invoke(instanceToUse, args);
+ } finally {
+ registry.ungetService(reference);
+ }
+ }
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/Registration.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,13 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+/**
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+public interface Registration<T> {
+
+ void unregister();
+
+ <T> Service<T> getServiceReference();
+
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/RegistrationImpl.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,35 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+/**
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+public class RegistrationImpl<T> implements Registration<T> {
+
+ private final ServiceRegistration reg;
+ private final Class<T> contract;
+ private final BundleContext registry;
+ private final RegistrationsHolder holder;
+
+ public RegistrationImpl(Class<T> contract,
+ ServiceRegistration reg, BundleContext registry,
RegistrationsHolder holder) {
+ this.reg = reg;
+ this.contract = contract;
+ this.registry = registry;
+ this.holder = holder;
+ }
+
+ @Override
+ public void unregister() {
+ holder.removeRegistration(reg);
+ reg.unregister();
+ }
+
+ @Override
+ public <T> Service<T> getServiceReference() {
+ return new ServiceImpl<T>(contract, contract, registry);
+ }
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/Registrations.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,10 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+/**
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+public interface Registrations<T> extends Iterable<Registration<T>> {
+
+ int size();
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/RegistrationsHolder.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,33 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.inject.Singleton;
+import org.osgi.framework.ServiceRegistration;
+
+/**
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+@Singleton
+public class RegistrationsHolder {
+
+ private List<ServiceRegistration> registrations = new
ArrayList<ServiceRegistration>();
+
+ public List<ServiceRegistration> getRegistrations() {
+ return registrations;
+ }
+
+ public void addRegistration(ServiceRegistration reg) {
+ registrations.add(reg);
+ }
+
+ public void removeRegistration(ServiceRegistration reg) {
+ registrations.remove(reg);
+ }
+
+ public void clear() {
+ registrations.clear();
+ }
+
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/RegistrationsImpl.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,58 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+/**
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+public class RegistrationsImpl<T> implements Registrations<T> {
+
+ private Class<T> type;
+
+ private List<Registration<T>> registrations = new
ArrayList<Registration<T>>();
+
+ private BundleContext registry;
+
+ private RegistrationsHolder holder;
+
+ @Override
+ public Iterator<Registration<T>> iterator() {
+ populate();
+ return registrations.iterator();
+ }
+
+ @Override
+ public int size() {
+ List<ServiceRegistration> regs = holder.getRegistrations();
+ return regs.size();
+ }
+
+ private void populate() {
+ registrations.clear();
+ try {
+ List<ServiceRegistration> regs = holder.getRegistrations();
+ for (ServiceRegistration reg : regs) {
+ registrations.add(new RegistrationImpl<T>(type, reg,
registry, holder));
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ public void setType(Class<T> type) {
+ this.type = type;
+ }
+
+ public void setHolder(RegistrationsHolder holder) {
+ this.holder = holder;
+ }
+
+ public void setRegistry(BundleContext registry) {
+ this.registry = registry;
+ }
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/Service.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,11 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+/**
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+public interface Service<T> {
+
+ T get();
+
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/ServiceImpl.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,62 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+import java.lang.reflect.Proxy;
+import java.lang.reflect.Type;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+/**
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+public class ServiceImpl<T> implements Service<T> {
+
+ private final Class serviceClass;
+ private final Class declaringClass;
+ private final String serviceName;
+ private final BundleContext registry;
+ private T service;
+
+ public ServiceImpl(Type t, Class declaring, BundleContext registry) {
+ serviceClass = (Class) t;
+ serviceName = serviceClass.getName();
+ declaringClass = declaring;
+ this.registry = registry;
+ }
+
+ public ServiceImpl(Type t, Bundle bundle, BundleContext registry) {
+ serviceClass = (Class) t;
+ serviceName = serviceClass.getName();
+ declaringClass = null;
+ this.registry = registry;
+ }
+
+ @Override
+ public T get() {
+ if (service == null) {
+ try {
+ populateService();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ return service;
+ }
+
+ private void populateService() throws Exception {
+ ServiceReference ref = registry.getServiceReference(serviceName);
+ if (ref != null) {
+ if (!serviceClass.isInterface()) {
+ service = (T) registry.getService(ref);
+ } else {
+ service = (T) Proxy.newProxyInstance(
+ getClass().getClassLoader(),
+ new Class[]{(Class) serviceClass},
+ new DynamicServiceHandler(serviceName,
registry));
+ }
+ } else {
+ throw new IllegalStateException("Can't load service from OSGi
registry : " + serviceName);
+ }
+ }
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/ServiceReferenceHandler.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,31 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+/**
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+public class ServiceReferenceHandler implements InvocationHandler {
+
+ private final ServiceReference ref;
+ private final BundleContext registry;
+
+ public ServiceReferenceHandler(ServiceReference ref, BundleContext
registry) {
+ this.ref = ref;
+ this.registry = registry;
+ }
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
+ Object instanceToUse = registry.getService(ref);
+ try {
+ return method.invoke(instanceToUse, args);
+ } finally {
+ registry.ungetService(ref);
+ }
+ }
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/Services.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,10 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+/**
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+public interface Services<T> extends Iterable<T> {
+
+ int size();
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/ServicesImpl.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,78 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+import java.lang.reflect.Proxy;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+/**
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+public class ServicesImpl<T> implements Services<T> {
+
+ private final Class serviceClass;
+ private final Class declaringClass;
+ private final String serviceName;
+ private final BundleContext registry;
+
+ private List<T> services = new ArrayList<T>();
+
+ public ServicesImpl(Type t, Class declaring, BundleContext registry) {
+ serviceClass = (Class) t;
+ serviceName = serviceClass.getName();
+ declaringClass = declaring;
+ this.registry = registry;
+ }
+
+ @Override
+ public Iterator<T> iterator() {
+ try {
+ populateServiceRef();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ services = Collections.emptyList();
+ }
+ return services.iterator();
+ }
+
+ private void populateServiceRef() throws Exception {
+ services.clear();
+
+ ServiceReference[] refs =
registry.getServiceReferences(serviceName, null);
+ if (refs != null) {
+ for (ServiceReference ref : refs) {
+ if (!serviceClass.isInterface()) {
+ services.add((T) registry.getService(ref));
+ } else {
+ services.add((T) Proxy.newProxyInstance(
+ getClass().getClassLoader(),
+ new Class[]{(Class) serviceClass},
+ new ServiceReferenceHandler(ref,
registry)));
+ }
+ }
+ } else {
+ services = Collections.emptyList();
+ }
+ }
+
+ @Override
+ public int size() {
+ try {
+ ServiceReference[] refs =
registry.getServiceReferences(serviceName, null);
+ if (refs == null) {
+ return 0;
+ } else {
+ return refs.length;
+ }
+ } catch (InvalidSyntaxException ex) {
+ ex.printStackTrace();
+ return -1;
+ }
+ }
+}
=======================================
--- /dev/null
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/integration/ServicesProducer.java
Fri Apr 8 02:49:37 2011
@@ -0,0 +1,78 @@
+package cx.ath.mancel01.dependencyshot.dynamic.integration;
+
+import cx.ath.mancel01.dependencyshot.api.InjectionPoint;
+import cx.ath.mancel01.dependencyshot.injection.util.EnhancedProvider;
+import java.lang.reflect.ParameterizedType;
+import javax.inject.Inject;
+import javax.inject.Provider;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Producers for Specific injected types;
+ *
+ * @author Mathieu ANCELIN - SERLI (mathieu...@serli.com)
+ */
+public class ServicesProducer {
+
+ public static class ContextProvider implements Provider<BundleContext>
{
+
+ @Inject BundleContextHolder holder;
+
+ @Override
+ public BundleContext get() {
+ return holder.getContext();
+ }
+ }
+
+ public static class OSGiServicesProvider implements
EnhancedProvider<ServicesImpl> {
+
+ @Inject BundleContext context;
+
+ @Override
+ public ServicesImpl enhancedGet(InjectionPoint p) {
+ return new
ServicesImpl(((ParameterizedType)p.getType()).getActualTypeArguments()[0],
+ p.getMember().getDeclaringClass(), context);
+ }
+
+ @Override
+ public Object get() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ }
+
+ public static class OSGiServiceProvider implements
EnhancedProvider<ServiceImpl> {
+
+ @Inject BundleContext context;
+
+ @Override
+ public ServiceImpl enhancedGet(InjectionPoint p) {
+ return new
ServiceImpl(((ParameterizedType)p.getType()).getActualTypeArguments()[0],
+ p.getMember().getDeclaringClass(), context);
+ }
+
+ @Override
+ public Object get() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ }
+
+ public static class RegistrationsProvider implements
EnhancedProvider<Registrations> {
+
+ @Inject BundleContext context;
+ @Inject RegistrationsHolder holder;
+
+ @Override
+ public Registrations enhancedGet(InjectionPoint p) {
+ RegistrationsImpl registration = new RegistrationsImpl();
+ registration.setType(((Class)
((ParameterizedType)p.getType()).getActualTypeArguments()[0]));
+ registration.setHolder(holder);
+ registration.setRegistry(context);
+ return registration;
+ }
+
+ @Override
+ public Object get() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ }
+}
=======================================
---
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/DependencyShotActivator.java
Thu Apr 7 09:13:58 2011
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/DependencyShotActivator.java
Fri Apr 8 02:49:37 2011
@@ -27,6 +27,7 @@
import cx.ath.mancel01.dependencyshot.dynamic.event.ServiceArrival;
import cx.ath.mancel01.dependencyshot.dynamic.event.ServiceChanged;
import cx.ath.mancel01.dependencyshot.dynamic.event.ServiceDeparture;
+import
cx.ath.mancel01.dependencyshot.dynamic.integration.BundleContextHolder;
import cx.ath.mancel01.dependencyshot.dynamic.registry.ServiceRegistry;
import cx.ath.mancel01.dependencyshot.event.InjectorStoppedEvent;
import cx.ath.mancel01.dependencyshot.injection.InjectorImpl;
@@ -179,6 +180,7 @@
} catch (ClassNotFoundException ex) {
}
}
+
injector.getInstance(BundleContextHolder.class).setContext(bundle.getBundleContext());
injector.fire(new
BundleContainerInitialized(bundle.getBundleContext()));
injectors.put(bundle.getBundleId(), injector);
}
=======================================
---
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/config/DynamicProvider.java
Thu Apr 7 09:13:58 2011
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/config/DynamicProvider.java
Fri Apr 8 02:49:37 2011
@@ -17,6 +17,13 @@

package cx.ath.mancel01.dependencyshot.dynamic.config;

+import cx.ath.mancel01.dependencyshot.dynamic.integration.Registrations;
+import cx.ath.mancel01.dependencyshot.dynamic.integration.Service;
+import cx.ath.mancel01.dependencyshot.dynamic.integration.Services;
+import
cx.ath.mancel01.dependencyshot.dynamic.integration.ServicesProducer.ContextProvider;
+import
cx.ath.mancel01.dependencyshot.dynamic.integration.ServicesProducer.OSGiServiceProvider;
+import
cx.ath.mancel01.dependencyshot.dynamic.integration.ServicesProducer.OSGiServicesProvider;
+import
cx.ath.mancel01.dependencyshot.dynamic.integration.ServicesProducer.RegistrationsProvider;
import cx.ath.mancel01.dependencyshot.dynamic.registry.ServiceRegistry;
import
cx.ath.mancel01.dependencyshot.dynamic.registry.ServiceRegistryProvider;
import cx.ath.mancel01.dependencyshot.graph.Binding;
@@ -25,6 +32,7 @@
import cx.ath.mancel01.dependencyshot.spi.BindingsProvider;
import java.util.ArrayList;
import java.util.Collection;
+import org.osgi.framework.BundleContext;

/**
*
@@ -42,11 +50,36 @@
.bind(ServiceRegistry.class)
.providedBy(new ServiceRegistryProvider())
.build());
+
bindings.add(BindingBuilder
.prepareBindingThat()
.bind(ServiceRegistryProvider.OSGiEnvHolder.class)
.build());

+ bindings.add(BindingBuilder
+ .prepareBindingThat()
+ .bind(BundleContext.class)
+ .providedBy(new ContextProvider())
+ .build());
+
+ bindings.add(BindingBuilder
+ .prepareBindingThat()
+ .bind(Services.class)
+ .providedBy(new OSGiServicesProvider())
+ .build());
+
+ bindings.add(BindingBuilder
+ .prepareBindingThat()
+ .bind(Service.class)
+ .providedBy(new OSGiServiceProvider())
+ .build());
+
+ bindings.add(BindingBuilder
+ .prepareBindingThat()
+ .bind(Registrations.class)
+ .providedBy(new RegistrationsProvider())
+ .build());
+
return bindings;
}

=======================================
---
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/registry/ServiceRegistryImpl.java
Thu Apr 7 09:13:58 2011
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/registry/ServiceRegistryImpl.java
Fri Apr 8 02:49:37 2011
@@ -75,9 +75,9 @@

@Override
public <T> ServiceRegistration registerService(Class<T> clazz,
Class<?> service) {
- if(!service.isAnnotationPresent(Dynamic.class)) {
- throw new DSIllegalStateException("You can't register non
dynamic implementation for a service");
- }
+// if(!service.isAnnotationPresent(Dynamic.class)) {
+// throw new DSIllegalStateException("You can't register non
dynamic implementation for a service");
+// }
services.putIfAbsent(clazz, new ArrayList<Class<?>>());
ArrayList<Class<?>> classes = (ArrayList<Class<?>>)
services.get(clazz);
if (!classes.contains(service)) {
@@ -144,9 +144,9 @@
}

public void registerServiceAndSwap(Class<?> from, Class<?> to) {
- if(!to.isAnnotationPresent(Dynamic.class)) {
- throw new DSIllegalStateException("You can't register non
dynamic implementation for a service");
- }
+// if(!to.isAnnotationPresent(Dynamic.class)) {
+// throw new DSIllegalStateException("You can't register non
dynamic implementation for a service");
+// }
services.putIfAbsent(from, new ArrayList<Class<?>>());
ArrayList<Class<?>> classes = (ArrayList<Class<?>>)
services.get(from);
if (!classes.contains(to)) {
=======================================
---
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/scope/DynamicScope.java
Thu Apr 7 09:13:58 2011
+++
/trunk/dependency-shot-dynamic/src/main/java/cx/ath/mancel01/dependencyshot/dynamic/scope/DynamicScope.java
Fri Apr 8 02:49:37 2011
@@ -20,10 +20,13 @@
import cx.ath.mancel01.dependencyshot.dynamic.registry.ServiceRegistry;
import cx.ath.mancel01.dependencyshot.api.InjectionPoint;
import cx.ath.mancel01.dependencyshot.dynamic.Dynamic;
+import
cx.ath.mancel01.dependencyshot.dynamic.integration.DynamicServiceHandler;
+import
cx.ath.mancel01.dependencyshot.dynamic.registry.ServiceRegistryProvider.OSGiEnvHolder;
import cx.ath.mancel01.dependencyshot.injection.InjectorImpl;
import cx.ath.mancel01.dependencyshot.spi.CustomScopeHandler;
import java.lang.annotation.Annotation;
import java.lang.reflect.Proxy;
+import org.osgi.framework.BundleContext;

/**
*
@@ -31,6 +34,8 @@
*/
public class DynamicScope extends CustomScopeHandler {

+ private OSGiEnvHolder holder;
+
@Override
public Class<? extends Annotation> getScope() {
return Dynamic.class;
@@ -39,13 +44,20 @@
@Override
public <T> T getScopedInstance(Class<T> interf, Class<? extends T>
clazz,
InjectionPoint point, InjectorImpl injector) {
-
- DynamicProxy proxy = new DynamicProxy(interf, point,
- injector, injector.getInstance(ServiceRegistry.class));
-
- return (T) Proxy.newProxyInstance(
- getClass().getClassLoader(), new Class[] {interf}, proxy);
- //return (T) ProxyHelper.createProxy(proxy);
+ if (holder == null) {
+ holder = injector.getInstance(OSGiEnvHolder.class);
+ }
+ if (holder.isOsgi()) {
+ DynamicServiceHandler handler = new
DynamicServiceHandler(interf.getName()
+ , injector.getInstance(BundleContext.class));
+ return (T) Proxy.newProxyInstance(
+ getClass().getClassLoader(), new Class[] {interf},
handler);
+ } else {
+ DynamicProxy proxy = new DynamicProxy(interf, point,
+ injector, injector.getInstance(ServiceRegistry.class));
+ return (T) Proxy.newProxyInstance(
+ getClass().getClassLoader(), new Class[] {interf},
proxy);
+ }
}

@Override

Reply all
Reply to author
Forward
0 new messages