Adding extra methods to the ServiceStateMBean to enable better support for getting the services of a Bundle
diff --git a/org.eclipse.gemini.mgmt/build.properties b/org.eclipse.gemini.mgmt/build.properties
index 60212e4..e139d50 100644
--- a/org.eclipse.gemini.mgmt/build.properties
+++ b/org.eclipse.gemini.mgmt/build.properties
@@ -1,3 +1,4 @@
source.. = src/main/java/
output.. = target/
bin.includes = META-INF/,.
+src.excludes = src/test/java/
diff --git a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/CustomServiceStateMBean.java b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/CustomServiceStateMBean.java
index 1f88db1..10cc1b2 100644
--- a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/CustomServiceStateMBean.java
+++ b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/CustomServiceStateMBean.java
@@ -25,7 +25,31 @@
*
*/
public interface CustomServiceStateMBean extends ServiceStateMBean {
-
+
+ /**
+ * Answer the list of services representing the services this bundle exports
+ *
+ * @param bundleId - the bundle identifier
+ * @return the list of services
+ * @throws IOException
+ * if the operation fails
+ * @throws IllegalArgumentException
+ * if the bundle indicated does not exist
+ */
+ CompositeData[] getRegisteredServices(long bundleId) throws IOException;
+
+ /**
+ * Answer the list of services which refer to the the services this bundle is using
+ *
+ * @param bundleIdentifier - the bundle identifier
+ * @return the list of servics
+ * @throws IOException
+ * if the operation fails
+ * @throws IllegalArgumentException
+ * if the bundle indicated does not exist
+ */
+ CompositeData[] getServicesInUse(long bundleIdentifier) throws IOException;
+
//New methods from the JMX Update RFC 169
/**
diff --git a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/ServiceState.java b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/ServiceState.java
index 2cee22f..dc44225 100644
--- a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/ServiceState.java
+++ b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/ServiceState.java
@@ -103,6 +103,26 @@
return OSGiService.getBundlesUsing(getServiceReference(serviceId));
}
+ //Local extensions to the API
+
+ /**
+ * {@inheritDoc}
+ */
+ public CompositeData[] getRegisteredServices(long bundleId) throws IOException {
+ Bundle bundle = this.getBundle(bundleId);
+ ServiceReference<?>[] registeredServices = bundle.getRegisteredServices();
+ return this.getServicesAsCompositeDatas(registeredServices);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public CompositeData[] getServicesInUse(long bundleId) throws IOException {
+ Bundle bundle = this.getBundle(bundleId);
+ ServiceReference<?>[] servicesInUse = bundle.getServicesInUse();
+ return this.getServicesAsCompositeDatas(servicesInUse);
+ }
+
//New methods from the JMX Update RFC 169
/**
@@ -188,6 +208,27 @@
throw new IOException(e);
}
}
+
+ private Bundle getBundle(long bundleId){
+ Bundle bundle = bundleContext.getBundle(bundleId);
+ if(bundle == null) {
+ throw new IllegalArgumentException("No such bundle '" + bundleId + "'");
+ }
+ return bundle;
+ }
+
+ private CompositeData[] getServicesAsCompositeDatas(ServiceReference<?>[] services){
+ CompositeData[] servicesInUseCompositeData;
+ if (services != null) {
+ servicesInUseCompositeData = new CompositeData[services.length];
+ for (int i = 0; i < services.length; i++) {
+ servicesInUseCompositeData[i] = new OSGiService(services[i]).asCompositeData();
+ }
+ } else {
+ servicesInUseCompositeData = new CompositeData[0];
+ }
+ return servicesInUseCompositeData;
+ }
private ServiceReference<?> getServiceReference(long serviceId) throws IOException {
Filter filter;