You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ja...@apache.org on 2014/01/31 11:20:11 UTC
svn commit: r1563102 -
/ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/DeploymentHandlerImpl.java
Author: jawi
Date: Fri Jan 31 10:20:11 2014
New Revision: 1563102
URL: http://svn.apache.org/r1563102
Log:
Compiler warnings fixed & some clarifying(?) comments added
Modified:
ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/DeploymentHandlerImpl.java
Modified: ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/DeploymentHandlerImpl.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/DeploymentHandlerImpl.java?rev=1563102&r1=1563101&r2=1563102&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/DeploymentHandlerImpl.java (original)
+++ ace/trunk/org.apache.ace.agent/src/org/apache/ace/agent/impl/DeploymentHandlerImpl.java Fri Jan 31 10:20:11 2014
@@ -24,7 +24,6 @@ import static org.apache.ace.agent.impl.
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
@@ -38,7 +37,6 @@ import org.apache.ace.agent.Installation
import org.apache.ace.agent.RetryAfterException;
import org.apache.felix.deploymentadmin.DeploymentAdminImpl;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.Version;
import org.osgi.service.deploymentadmin.DeploymentAdmin;
@@ -52,9 +50,9 @@ import org.osgi.service.packageadmin.Pac
public class DeploymentHandlerImpl extends UpdateHandlerBase implements DeploymentHandler {
/**
- * Internal EventAdmin that delegates to actual InternalEvents. Used to inject into the DeploymentAdmin only.
- * If it can find an EventAdmin service in the framework, it will also send events to that service. It does so
- * without ever trying to import any API, because of two reasons:
+ * Internal EventAdmin that delegates to actual InternalEvents. Used to inject into the DeploymentAdmin only. If it
+ * can find an EventAdmin service in the framework, it will also send events to that service. It does so without
+ * ever trying to import any API, because of two reasons:
* <ol>
* <li>We want to isolate the management agent as well as possible from the rest of the framework.</li>
* <li>We have an internal copy of the EventAdmin API, which means we cannot be exposed to another version anyway.</li>
@@ -66,7 +64,7 @@ public class DeploymentHandlerImpl exten
public EventAdminBridge(BundleContext context) {
m_context = context;
}
-
+
@Override
public void postEvent(Event event) {
getEventsHandler().postEvent(event.getTopic(), getPayload(event));
@@ -79,6 +77,11 @@ public class DeploymentHandlerImpl exten
eventAdminInvoke("sendEvent", event);
}
+ /**
+ * Bridges events from out local event-handling methods to the first EventAdmin service. As we do not have a
+ * dependency on the (external!) EventAdmin API we cannot always call like we normally would do for
+ * OSGi-services. Instead, we need to do some advanced reflection trickery in order to call an EventAdmin.
+ */
private void eventAdminInvoke(String method, Event event) {
try {
// try to find an EventAdmin service
@@ -90,9 +93,9 @@ public class DeploymentHandlerImpl exten
try {
// if the service is still around, we use the instance to find its classloader
// and obtain a reference to its "Event" class
- Class clazz = svc.getClass().getClassLoader().loadClass(Event.class.getName());
+ Class<?> clazz = svc.getClass().getClassLoader().loadClass(Event.class.getName());
// and try to find a constructor
- Constructor ctor = clazz.getConstructor(String.class, Map.class);
+ Constructor<?> ctor = clazz.getConstructor(String.class, Map.class);
// instantiate the event, using the topic and payload
Object eventAdminEvent = ctor.newInstance(event.getTopic(), getPayload(event));
// and now try to find the supplied method (either postEvent or sendEvent)
@@ -113,7 +116,7 @@ public class DeploymentHandlerImpl exten
logError("Failed to invoke EventAdmin: %s", e, e.getMessage());
}
}
-
+
private Map<String, String> getPayload(Event event) {
Map<String, String> payload = new HashMap<String, String>();
for (String propertyName : event.getPropertyNames()) {