Search in sources :

Example 1 with Logger

use of org.apache.aries.jmx.Logger in project aries by apache.

the class Activator method start.

public void start(BundleContext context) throws Exception {
    ctx = context;
    logger = new Logger(ctx);
    Filter filter = getFilter(context, PACKAGE_ADMIN, START_LEVEL, PERMISSION_ADMIN, CONFIG_ADMIN, USER_ADMIN, PROVISIONING_SERVICE);
    tracker = new ServiceTracker(context, filter, this);
    tracker.open();
    stateConfig = StateConfig.register(context);
    registerMBean(ServiceStateMBean.class.getName(), new Factory<ServiceStateMBean>() {

        public ServiceStateMBean create() {
            return new ServiceState(ctx, stateConfig, logger);
        }
    }, ServiceStateMBean.OBJECTNAME, _serviceStateMbean);
}
Also used : ServiceState(org.apache.aries.jmx.framework.ServiceState) Filter(org.osgi.framework.Filter) ServiceTracker(org.osgi.util.tracker.ServiceTracker) ServiceStateMBean(org.osgi.jmx.framework.ServiceStateMBean) Logger(org.apache.aries.jmx.Logger)

Example 2 with Logger

use of org.apache.aries.jmx.Logger in project aries by apache.

the class BundleStateMBeanHandlerTest method testOpenAndClose.

@Test
public void testOpenAndClose() throws Exception {
    BundleContext context = mock(BundleContext.class);
    when(context.getProperty(Constants.FRAMEWORK_UUID)).thenReturn("some-uuid");
    Logger logger = mock(Logger.class);
    Bundle mockSystemBundle = mock(Bundle.class);
    when(mockSystemBundle.getSymbolicName()).thenReturn("the.sytem.bundle");
    when(context.getBundle(0)).thenReturn(mockSystemBundle);
    ServiceReference packageAdminRef = mock(ServiceReference.class);
    PackageAdmin packageAdmin = mock(PackageAdmin.class);
    when(context.getServiceReference(PackageAdmin.class.getName())).thenReturn(packageAdminRef);
    when(context.getService(packageAdminRef)).thenReturn(packageAdmin);
    ServiceReference startLevelRef = mock(ServiceReference.class);
    StartLevel startLevel = mock(StartLevel.class);
    when(context.getServiceReference(StartLevel.class.getName())).thenReturn(startLevelRef);
    when(context.getService(startLevelRef)).thenReturn(startLevel);
    JMXAgent agent = mock(JMXAgent.class);
    JMXAgentContext agentContext = new JMXAgentContext(context, agent, logger);
    BundleStateMBeanHandler handler = new BundleStateMBeanHandler(agentContext, new StateConfig());
    handler.open();
    assertNotNull(handler.getMbean());
    handler.close();
    verify(context).ungetService(packageAdminRef);
    verify(context).ungetService(startLevelRef);
}
Also used : PackageAdmin(org.osgi.service.packageadmin.PackageAdmin) JMXAgent(org.apache.aries.jmx.agent.JMXAgent) Bundle(org.osgi.framework.Bundle) StartLevel(org.osgi.service.startlevel.StartLevel) JMXAgentContext(org.apache.aries.jmx.agent.JMXAgentContext) Logger(org.apache.aries.jmx.Logger) BundleContext(org.osgi.framework.BundleContext) ServiceReference(org.osgi.framework.ServiceReference) Test(org.junit.Test)

Example 3 with Logger

use of org.apache.aries.jmx.Logger in project aries by apache.

the class BundleStateTest method createBundle.

private void createBundle(StateConfig stateConfig, final List<Notification> received, final List<AttributeChangeNotification> attributeChanges) throws Exception {
    BundleContext context = mock(BundleContext.class);
    when(context.getBundles()).thenReturn(new Bundle[] {});
    PackageAdmin admin = mock(PackageAdmin.class);
    StartLevel startLevel = mock(StartLevel.class);
    Logger logger = mock(Logger.class);
    BundleState bundleState = new BundleState(context, admin, startLevel, stateConfig, logger);
    Bundle b1 = mock(Bundle.class);
    when(b1.getBundleId()).thenReturn(new Long(9));
    when(b1.getSymbolicName()).thenReturn("bundle");
    when(b1.getLocation()).thenReturn("file:/location");
    BundleEvent installedEvent = mock(BundleEvent.class);
    when(installedEvent.getBundle()).thenReturn(b1);
    when(installedEvent.getType()).thenReturn(BundleEvent.INSTALLED);
    BundleEvent resolvedEvent = mock(BundleEvent.class);
    when(resolvedEvent.getBundle()).thenReturn(b1);
    when(resolvedEvent.getType()).thenReturn(BundleEvent.RESOLVED);
    MBeanServer server = mock(MBeanServer.class);
    //setup for notification
    ObjectName objectName = new ObjectName(OBJECTNAME);
    bundleState.preRegister(server, objectName);
    bundleState.postRegister(true);
    //add NotificationListener to receive the events
    bundleState.addNotificationListener(new NotificationListener() {

        public void handleNotification(Notification notification, Object handback) {
            if (notification instanceof AttributeChangeNotification) {
                attributeChanges.add((AttributeChangeNotification) notification);
            } else {
                received.add(notification);
            }
        }
    }, null, null);
    // capture the BundleListener registered with BundleContext to issue BundleEvents
    ArgumentCaptor<BundleListener> argument = ArgumentCaptor.forClass(BundleListener.class);
    verify(context).addBundleListener(argument.capture());
    //send events
    BundleListener listener = argument.getValue();
    listener.bundleChanged(installedEvent);
    listener.bundleChanged(resolvedEvent);
    //shutdown dispatcher via unregister callback
    bundleState.postDeregister();
    //check the BundleListener is cleaned up
    verify(context).removeBundleListener(listener);
    ExecutorService dispatcher = bundleState.getEventDispatcher();
    assertTrue(dispatcher.isShutdown());
    dispatcher.awaitTermination(2, TimeUnit.SECONDS);
    assertTrue(dispatcher.isTerminated());
}
Also used : AttributeChangeNotification(javax.management.AttributeChangeNotification) Bundle(org.osgi.framework.Bundle) Logger(org.apache.aries.jmx.Logger) AttributeChangeNotification(javax.management.AttributeChangeNotification) Notification(javax.management.Notification) ObjectName(javax.management.ObjectName) PackageAdmin(org.osgi.service.packageadmin.PackageAdmin) ExecutorService(java.util.concurrent.ExecutorService) StartLevel(org.osgi.service.startlevel.StartLevel) BundleEvent(org.osgi.framework.BundleEvent) BundleListener(org.osgi.framework.BundleListener) BundleContext(org.osgi.framework.BundleContext) MBeanServer(javax.management.MBeanServer) NotificationListener(javax.management.NotificationListener)

Example 4 with Logger

use of org.apache.aries.jmx.Logger in project aries by apache.

the class ServiceStateMBeanHandlerTest method testOpen.

@Test
public void testOpen() throws Exception {
    BundleContext context = mock(BundleContext.class);
    when(context.getProperty(Constants.FRAMEWORK_UUID)).thenReturn("some-uuid");
    Logger logger = mock(Logger.class);
    Bundle mockSystemBundle = mock(Bundle.class);
    when(mockSystemBundle.getSymbolicName()).thenReturn("the.sytem.bundle");
    when(context.getBundle(0)).thenReturn(mockSystemBundle);
    JMXAgent agent = mock(JMXAgent.class);
    JMXAgentContext agentContext = new JMXAgentContext(context, agent, logger);
    ServiceStateMBeanHandler handler = new ServiceStateMBeanHandler(agentContext, new StateConfig());
    handler.open();
    assertNotNull(handler.getMbean());
}
Also used : JMXAgent(org.apache.aries.jmx.agent.JMXAgent) Bundle(org.osgi.framework.Bundle) JMXAgentContext(org.apache.aries.jmx.agent.JMXAgentContext) Logger(org.apache.aries.jmx.Logger) BundleContext(org.osgi.framework.BundleContext) Test(org.junit.Test)

Example 5 with Logger

use of org.apache.aries.jmx.Logger in project aries by apache.

the class BundleStateTest method testLifeCycleOfNotificationSupport.

@Test
public void testLifeCycleOfNotificationSupport() throws Exception {
    BundleContext context = mock(BundleContext.class);
    PackageAdmin admin = mock(PackageAdmin.class);
    StartLevel startLevel = mock(StartLevel.class);
    Logger logger = mock(Logger.class);
    BundleState bundleState = new BundleState(context, admin, startLevel, new StateConfig(), logger);
    MBeanServer server1 = mock(MBeanServer.class);
    MBeanServer server2 = mock(MBeanServer.class);
    ObjectName objectName = new ObjectName(OBJECTNAME);
    bundleState.preRegister(server1, objectName);
    bundleState.postRegister(true);
    // capture the BundleListener registered with BundleContext
    ArgumentCaptor<BundleListener> argument = ArgumentCaptor.forClass(BundleListener.class);
    verify(context).addBundleListener(argument.capture());
    assertEquals(1, argument.getAllValues().size());
    BundleListener listener = argument.getValue();
    assertNotNull(listener);
    ExecutorService dispatcher = bundleState.getEventDispatcher();
    //do registration with another server
    bundleState.preRegister(server2, objectName);
    bundleState.postRegister(true);
    // check no more actions on BundleContext
    argument = ArgumentCaptor.forClass(BundleListener.class);
    verify(context, atMost(1)).addBundleListener(argument.capture());
    assertEquals(1, argument.getAllValues().size());
    //do one unregister
    bundleState.postDeregister();
    //verify bundleListener not invoked
    verify(context, never()).removeBundleListener(listener);
    assertFalse(dispatcher.isShutdown());
    //do second unregister and check cleanup
    bundleState.postDeregister();
    verify(context).removeBundleListener(listener);
    assertTrue(dispatcher.isShutdown());
    dispatcher.awaitTermination(2, TimeUnit.SECONDS);
    assertTrue(dispatcher.isTerminated());
}
Also used : PackageAdmin(org.osgi.service.packageadmin.PackageAdmin) ExecutorService(java.util.concurrent.ExecutorService) StartLevel(org.osgi.service.startlevel.StartLevel) BundleListener(org.osgi.framework.BundleListener) Logger(org.apache.aries.jmx.Logger) BundleContext(org.osgi.framework.BundleContext) MBeanServer(javax.management.MBeanServer) ObjectName(javax.management.ObjectName) Test(org.junit.Test)

Aggregations

Logger (org.apache.aries.jmx.Logger)13 BundleContext (org.osgi.framework.BundleContext)8 StandardMBean (javax.management.StandardMBean)6 Test (org.junit.Test)6 ExecutorService (java.util.concurrent.ExecutorService)4 MBeanServer (javax.management.MBeanServer)4 NotCompliantMBeanException (javax.management.NotCompliantMBeanException)4 ObjectName (javax.management.ObjectName)4 JMXAgentContext (org.apache.aries.jmx.agent.JMXAgentContext)4 Bundle (org.osgi.framework.Bundle)4 PackageAdmin (org.osgi.service.packageadmin.PackageAdmin)3 StartLevel (org.osgi.service.startlevel.StartLevel)3 AttributeChangeNotification (javax.management.AttributeChangeNotification)2 Notification (javax.management.Notification)2 NotificationListener (javax.management.NotificationListener)2 JMXAgent (org.apache.aries.jmx.agent.JMXAgent)2 AllServiceListener (org.osgi.framework.AllServiceListener)2 BundleListener (org.osgi.framework.BundleListener)2 ServiceReference (org.osgi.framework.ServiceReference)2 ServiceState (org.apache.aries.jmx.framework.ServiceState)1