You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ma...@apache.org on 2014/02/14 11:49:17 UTC
svn commit: r1568234 - in
/felix/sandbox/marrs/dependencymanager-prototype/dm:
src/dm/impl/ComponentImpl.java src/dm/impl/DependencyImpl.java
src/dm/impl/ServiceDependencyImpl.java test/test/ComponentTest.java
Author: marrs
Date: Fri Feb 14 10:49:17 2014
New Revision: 1568234
URL: http://svn.apache.org/r1568234
Log:
Added some test cases, refactored callbacks to simplify them, and added some more functionality to the ServiceDependencyImpl.
Modified:
felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java
felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/DependencyImpl.java
felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ServiceDependencyImpl.java
felix/sandbox/marrs/dependencymanager-prototype/dm/test/test/ComponentTest.java
Modified: felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java?rev=1568234&r1=1568233&r2=1568234&view=diff
==============================================================================
--- felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java (original)
+++ felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java Fri Feb 14 10:49:17 2014
@@ -271,10 +271,12 @@ public class ComponentImpl implements Co
// if the method does not exist, ignore it
}
catch (InvocationTargetException e) {
+// e.printStackTrace();
// the method itself threw an exception, log that
// m_logger.log(Logger.LOG_WARNING, "Invocation of '" + methodName + "' failed.", e.getCause());
}
catch (Exception e) {
+// e.printStackTrace();
// m_logger.log(Logger.LOG_WARNING, "Could not invoke '" + methodName + "'.", e);
}
}
Modified: felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/DependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/DependencyImpl.java?rev=1568234&r1=1568233&r2=1568234&view=diff
==============================================================================
--- felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/DependencyImpl.java (original)
+++ felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/DependencyImpl.java Fri Feb 14 10:49:17 2014
@@ -8,13 +8,13 @@ import dm.Dependency;
import dm.Event;
public class DependencyImpl implements Dependency {
- private Component m_component;
- private boolean m_available;
- private boolean m_instanceBound;
- private boolean m_required;
- private String m_add;
- private String m_change;
- private String m_remove;
+ protected Component m_component;
+ protected boolean m_available;
+ protected boolean m_instanceBound;
+ protected boolean m_required;
+ protected String m_add;
+ protected String m_change;
+ protected String m_remove;
// TODO when we start injecting the "highest" one, this needs to be sorted at
// some point in time (note that we could choose to only do that if the dependency is
// actually injected (auto config is on for it)
@@ -60,7 +60,7 @@ public class DependencyImpl implements D
// if this is an optional dependency and the component is in an instantiated
// state, we can invoke the callback here
if (m_component.isAvailable()) {
- invokeAdd(e);
+ invoke(m_add, e);
}
m_component.handleChange();
}
@@ -69,7 +69,7 @@ public class DependencyImpl implements D
m_dependencies.remove(e);
m_dependencies.add(e);
if (m_component.isAvailable()) {
- invokeChange(e);
+ invoke(m_change, e);
}
m_component.handleChange();
}
@@ -78,7 +78,7 @@ public class DependencyImpl implements D
m_dependencies.remove(e);
m_available = (!m_dependencies.isEmpty());
if (m_component.isAvailable()) {
- invokeRemove(e);
+ invoke(m_remove, e);
}
m_component.handleChange();
}
@@ -131,20 +131,26 @@ public class DependencyImpl implements D
}
public void invokeAdd() {
- for (Event e : m_dependencies) {
- invokeAdd(e);
+ if (m_add != null) {
+ for (Event e : m_dependencies) {
+ invoke(m_add, e);
+ }
}
}
public void invokeChange() {
- for (Event e : m_dependencies) {
- invokeChange(e);
+ if (m_change != null) {
+ for (Event e : m_dependencies) {
+ invoke(m_change, e);
+ }
}
}
public void invokeRemove() {
- for (Event e : m_dependencies) {
- invokeRemove(e);
+ if (m_remove != null) {
+ for (Event e : m_dependencies) {
+ invoke(m_remove, e);
+ }
}
}
@@ -153,19 +159,11 @@ public class DependencyImpl implements D
return m_component.getInstances();
}
- public void invokeAdd(Event e) {
+ public void invoke(String method, Event e) {
// specific for this type of dependency
- m_component.invokeCallbackMethod(getInstances(), m_add, new Class[][] {{}}, new Object[][] {{}});
+ m_component.invokeCallbackMethod(getInstances(), method, new Class[][] {{}}, new Object[][] {{}});
}
- public void invokeChange(Event e) {
- m_component.invokeCallbackMethod(getInstances(), m_change, new Class[][] {{}}, new Object[][] {{}});
- }
-
- public void invokeRemove(Event e) {
- // specific for this type of dependency
- m_component.invokeCallbackMethod(getInstances(), m_remove, new Class[][] {{}}, new Object[][] {{}});
- }
@Override
public void setRequired(boolean required) {
m_required = required;
Modified: felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ServiceDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ServiceDependencyImpl.java?rev=1568234&r1=1568233&r2=1568234&view=diff
==============================================================================
--- felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ServiceDependencyImpl.java (original)
+++ felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ServiceDependencyImpl.java Fri Feb 14 10:49:17 2014
@@ -4,6 +4,8 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.Filter;
import org.osgi.framework.ServiceReference;
+import dm.Event;
+
import tracker.ServiceTracker;
import tracker.ServiceTrackerCustomizer;
@@ -50,4 +52,14 @@ public class ServiceDependencyImpl exten
public void removedService(ServiceReference reference, Object service) {
remove(new ServiceEventImpl(reference, service));
}
+
+ @Override
+ public void invoke(String method, Event e) {
+ ServiceEventImpl se = (ServiceEventImpl) e;
+ // TODO add the full list of signatures we support
+ m_component.invokeCallbackMethod(getInstances(), method,
+ new Class[][] {{ ServiceReference.class }},
+ new Object[][] {{ se.getReference() }}
+ );
+ }
}
Modified: felix/sandbox/marrs/dependencymanager-prototype/dm/test/test/ComponentTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/marrs/dependencymanager-prototype/dm/test/test/ComponentTest.java?rev=1568234&r1=1568233&r2=1568234&view=diff
==============================================================================
--- felix/sandbox/marrs/dependencymanager-prototype/dm/test/test/ComponentTest.java (original)
+++ felix/sandbox/marrs/dependencymanager-prototype/dm/test/test/ComponentTest.java Fri Feb 14 10:49:17 2014
@@ -84,6 +84,45 @@ public class ComponentTest {
c.stop();
e.step(8);
}
+
+ @Test
+ public void testAddAvailableDependencyFromInitCallback() {
+ final Ensure e = new Ensure();
+ final Dependency d = new DependencyImpl();
+ d.setRequired(true);
+ final Dependency d2 = new DependencyImpl();
+ d2.setRequired(true);
+ Component c = new ComponentImpl();
+ c.setImplementation(new Object() {
+ void init(Component c) {
+ System.out.println("init");
+ e.step(2);
+ c.add(d);
+ d.add(new EventImpl());
+ c.add(d2);
+ }
+ void start() {
+ System.out.println("start");
+ e.step();
+ }
+ void stop() {
+ System.out.println("stop");
+ e.step();
+ }
+ void destroy() {
+ System.out.println("destroy");
+ e.step(7);
+ }
+ });
+ e.step(1);
+ c.start();
+ e.step(5);
+ d2.add(new EventImpl());
+ e.step(7);
+ d.remove(new EventImpl());
+ c.stop();
+ e.step(10);
+ }
@Test
public void createComponentAddDependencyAndStartComponent() {