Repository: karaf Updated Branches: refs/heads/master bde4f3ea1 -> 270fd4ce9
[KARAF-4081] Provide informations about missing services for diag Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/270fd4ce Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/270fd4ce Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/270fd4ce Branch: refs/heads/master Commit: 270fd4ce981dda8844e19dd44a2d63971064caf9 Parents: bde4f3e Author: Christian Schneider <[email protected]> Authored: Tue Oct 27 14:52:20 2015 +0100 Committer: Christian Schneider <[email protected]> Committed: Tue Oct 27 14:52:20 2015 +0100 ---------------------------------------------------------------------- .../bundle/state/spring/internal/Activator.java | 21 ++++----- .../spring/internal/SpringStateService.java | 46 +++++++++++++------- 2 files changed, 40 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/270fd4ce/bundle/springstate/src/main/java/org/apache/karaf/bundle/state/spring/internal/Activator.java ---------------------------------------------------------------------- diff --git a/bundle/springstate/src/main/java/org/apache/karaf/bundle/state/spring/internal/Activator.java b/bundle/springstate/src/main/java/org/apache/karaf/bundle/state/spring/internal/Activator.java index 09a4949..bcc1b63 100644 --- a/bundle/springstate/src/main/java/org/apache/karaf/bundle/state/spring/internal/Activator.java +++ b/bundle/springstate/src/main/java/org/apache/karaf/bundle/state/spring/internal/Activator.java @@ -19,24 +19,21 @@ package org.apache.karaf.bundle.state.spring.internal; import org.apache.karaf.bundle.core.BundleStateService; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; import org.springframework.osgi.context.event.OsgiBundleApplicationContextListener; public class Activator implements BundleActivator { - private ServiceRegistration registration; - public void start(BundleContext bundleContext) { - SpringStateService services = new SpringStateService(); - String[] classes = new String[] { - OsgiBundleApplicationContextListener.class.getName(), - BundleStateService.class.getName() - }; - registration = bundleContext.registerService(classes, services, null); - } + SpringStateService services = new SpringStateService(); + String[] classes = new String[] { + OsgiBundleApplicationContextListener.class.getName(), + BundleStateService.class.getName() + }; + bundleContext.registerService(classes, services, null); + } public void stop(BundleContext context) { - registration.unregister(); + // unregister happens automatically } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/karaf/blob/270fd4ce/bundle/springstate/src/main/java/org/apache/karaf/bundle/state/spring/internal/SpringStateService.java ---------------------------------------------------------------------- diff --git a/bundle/springstate/src/main/java/org/apache/karaf/bundle/state/spring/internal/SpringStateService.java b/bundle/springstate/src/main/java/org/apache/karaf/bundle/state/spring/internal/SpringStateService.java index e09e6e1..fb7d4f0 100644 --- a/bundle/springstate/src/main/java/org/apache/karaf/bundle/state/spring/internal/SpringStateService.java +++ b/bundle/springstate/src/main/java/org/apache/karaf/bundle/state/spring/internal/SpringStateService.java @@ -35,9 +35,11 @@ import org.springframework.osgi.context.event.OsgiBundleApplicationContextListen import org.springframework.osgi.context.event.OsgiBundleContextFailedEvent; import org.springframework.osgi.context.event.OsgiBundleContextRefreshedEvent; import org.springframework.osgi.extender.event.BootstrappingDependencyEvent; +import org.springframework.osgi.service.importer.OsgiServiceDependency; +import org.springframework.osgi.service.importer.event.OsgiServiceDependencyEvent; -public class SpringStateService implements OsgiBundleApplicationContextListener, - BundleListener, BundleStateService { +public class SpringStateService + implements OsgiBundleApplicationContextListener, BundleListener, BundleStateService { private static final Logger LOG = LoggerFactory.getLogger(SpringStateService.class); @@ -56,17 +58,20 @@ public class SpringStateService implements OsgiBundleApplicationContextListener, BundleState state = mapEventToState(event); return (bundle.getState() != Bundle.ACTIVE) ? BundleState.Unknown : state; } - + public String getDiag(Bundle bundle) { - OsgiBundleApplicationContextEvent event = states.get(bundle.getBundleId()); + OsgiBundleApplicationContextEvent event = states.get(bundle.getBundleId()); if (event == null) { return null; } - + StringBuilder message = new StringBuilder(); Date date = new Date(event.getTimestamp()); SimpleDateFormat df = new SimpleDateFormat(); message.append(df.format(date) + "\n"); + if (event instanceof BootstrappingDependencyEvent) { + message.append(getServiceInfo((BootstrappingDependencyEvent)event)); + } Throwable ex = getException(event); if (ex != null) { message.append("Exception: \n"); @@ -74,24 +79,35 @@ public class SpringStateService implements OsgiBundleApplicationContextListener, } return message.toString(); } - + + private String getServiceInfo(BootstrappingDependencyEvent event) { + OsgiServiceDependencyEvent depEvent = event.getDependencyEvent(); + if (depEvent == null || depEvent.getServiceDependency() == null) { + return ""; + } + OsgiServiceDependency dep = depEvent.getServiceDependency(); + return String.format("Bean %s is wating for OSGi service with filter %s", + dep.getBeanName(), + dep.getServiceFilter()); + } + private void addMessages(StringBuilder message, Throwable ex) { - if (ex != null) { - message.append(ex.getMessage()); - message.append("\n"); + if (ex != null) { + message.append(ex.getMessage()); + message.append("\n"); StringWriter errorWriter = new StringWriter(); ex.printStackTrace(new PrintWriter(errorWriter)); message.append(errorWriter.toString()); message.append("\n"); - } + } } - + private Throwable getException(OsgiBundleApplicationContextEvent event) { - if (!(event instanceof OsgiBundleContextFailedEvent)) { - return null; + if (!(event instanceof OsgiBundleContextFailedEvent)) { + return null; } - OsgiBundleContextFailedEvent failureEvent = (OsgiBundleContextFailedEvent) event; - return failureEvent.getFailureCause(); + OsgiBundleContextFailedEvent failureEvent = (OsgiBundleContextFailedEvent)event; + return failureEvent.getFailureCause(); } public void onOsgiApplicationEvent(OsgiBundleApplicationContextEvent event) {
