You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2015/08/25 14:32:41 UTC
svn commit: r1697665 - in /aries/trunk/jmx:
jmx-core-whiteboard/src/main/java/org/apache/aries/jmx/core/whiteboard/
jmx-core/src/main/java/org/apache/aries/jmx/
jmx-core/src/main/java/org/apache/aries/jmx/agent/
jmx-core/src/main/java/org/apache/aries/...
Author: davidb
Date: Tue Aug 25 12:32:40 2015
New Revision: 1697665
URL: http://svn.apache.org/r1697665
Log:
ARIES-1365 ServiceState attribute notifications slow down startup/shutdown time considerably
Committing this patch on behalf of Joel Richard with many thanks.
Added:
aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/StateConfig.java
Modified:
aries/trunk/jmx/jmx-core-whiteboard/src/main/java/org/apache/aries/jmx/core/whiteboard/Activator.java
aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Activator.java
aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java
aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java
aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleStateMBeanHandler.java
aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceState.java
aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandler.java
aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanHandlerTest.java
aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateTest.java
aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandlerTest.java
aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateTest.java
Modified: aries/trunk/jmx/jmx-core-whiteboard/src/main/java/org/apache/aries/jmx/core/whiteboard/Activator.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core-whiteboard/src/main/java/org/apache/aries/jmx/core/whiteboard/Activator.java?rev=1697665&r1=1697664&r2=1697665&view=diff
==============================================================================
--- aries/trunk/jmx/jmx-core-whiteboard/src/main/java/org/apache/aries/jmx/core/whiteboard/Activator.java (original)
+++ aries/trunk/jmx/jmx-core-whiteboard/src/main/java/org/apache/aries/jmx/core/whiteboard/Activator.java Tue Aug 25 12:32:40 2015
@@ -28,6 +28,7 @@ import org.apache.aries.jmx.framework.Bu
import org.apache.aries.jmx.framework.Framework;
import org.apache.aries.jmx.framework.PackageState;
import org.apache.aries.jmx.framework.ServiceState;
+import org.apache.aries.jmx.framework.StateConfig;
import org.apache.aries.jmx.util.ObjectNameUtils;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
@@ -80,6 +81,7 @@ public class Activator implements Bundle
private static final String PROVISIONING_SERVICE = "org.osgi.service.provisioning.ProvisioningService";
private Logger logger;
+ private StateConfig stateConfig;
private class MBeanServiceProxy<T> implements ServiceFactory
{
@@ -150,10 +152,12 @@ public class Activator implements Bundle
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, logger);
+ return new ServiceState(ctx, stateConfig, logger);
}
}, ServiceStateMBean.OBJECTNAME, _serviceStateMbean );
}
@@ -176,6 +180,7 @@ public class Activator implements Bundle
public void stop(BundleContext context) throws Exception
{
+ stateConfig = null;
tracker.close();
}
@@ -339,7 +344,7 @@ public class Activator implements Bundle
@Override
public BundleStateMBean create(PackageAdmin pa, StartLevel sl)
{
- return new BundleState(ctx, pa, sl, logger);
+ return new BundleState(ctx, pa, sl, stateConfig, logger);
}
}, BundleStateMBean.OBJECTNAME, _bundleState);
}
Modified: aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Activator.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Activator.java?rev=1697665&r1=1697664&r2=1697665&view=diff
==============================================================================
--- aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Activator.java (original)
+++ aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Activator.java Tue Aug 25 12:32:40 2015
@@ -18,6 +18,7 @@ package org.apache.aries.jmx;
import org.apache.aries.jmx.agent.JMXAgent;
import org.apache.aries.jmx.agent.JMXAgentImpl;
+import org.apache.aries.jmx.framework.StateConfig;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.service.log.LogService;
@@ -39,11 +40,12 @@ public class Activator implements Bundle
* @see org.osgi.framework.BundleActivator#start(BundleContext)
*/
public void start(BundleContext context) throws Exception {
+ StateConfig stateConfig = StateConfig.register(context);
logger = new Logger(context);
//starting logger
logger.open();
logger.log(LogService.LOG_DEBUG, "Starting JMX OSGi bundle");
- agent = new JMXAgentImpl(context, logger);
+ agent = new JMXAgentImpl(context, stateConfig, logger);
agent.start();
}
Modified: aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java?rev=1697665&r1=1697664&r2=1697665&view=diff
==============================================================================
--- aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java (original)
+++ aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java Tue Aug 25 12:32:40 2015
@@ -40,6 +40,7 @@ import org.apache.aries.jmx.framework.Bu
import org.apache.aries.jmx.framework.FrameworkMBeanHandler;
import org.apache.aries.jmx.framework.PackageStateMBeanHandler;
import org.apache.aries.jmx.framework.ServiceStateMBeanHandler;
+import org.apache.aries.jmx.framework.StateConfig;
import org.apache.aries.jmx.framework.wiring.BundleWiringStateMBeanHandler;
import org.apache.aries.jmx.permissionadmin.PermissionAdminMBeanHandler;
import org.apache.aries.jmx.provisioning.ProvisioningServiceMBeanHandler;
@@ -66,16 +67,19 @@ public class JMXAgentImpl implements JMX
*/
private Map<MBeanServer, Boolean> mbeanServers;
private Map<MBeanHandler, Boolean> mbeansHandlers;
+ private StateConfig stateConfig;
private BundleContext context;
private Logger logger;
/**
* Constructs new JMXAgent.
*
+ * @param stateConfig
* @param logger @see org.apache.aries.jmx.Logger
*/
- public JMXAgentImpl(BundleContext context, Logger logger) {
+ public JMXAgentImpl(BundleContext context, StateConfig stateConfig, Logger logger) {
this.context = context;
+ this.stateConfig = stateConfig;
this.logger = logger;
this.mbeanServers = new IdentityHashMap<MBeanServer, Boolean>();
this.mbeansHandlers = new IdentityHashMap<MBeanHandler, Boolean>();
@@ -92,13 +96,13 @@ public class JMXAgentImpl implements JMX
MBeanHandler frameworkHandler = new FrameworkMBeanHandler(agentContext);
mbeansHandlers.put(frameworkHandler, Boolean.FALSE);
frameworkHandler.open();
- MBeanHandler bundleStateHandler = new BundleStateMBeanHandler(agentContext);
+ MBeanHandler bundleStateHandler = new BundleStateMBeanHandler(agentContext, stateConfig);
mbeansHandlers.put(bundleStateHandler, Boolean.FALSE);
bundleStateHandler.open();
MBeanHandler revisionsStateHandler = new BundleWiringStateMBeanHandler(agentContext);
mbeansHandlers.put(revisionsStateHandler, Boolean.FALSE);
revisionsStateHandler.open();
- MBeanHandler serviceStateHandler = new ServiceStateMBeanHandler(agentContext);
+ MBeanHandler serviceStateHandler = new ServiceStateMBeanHandler(agentContext, stateConfig);
mbeansHandlers.put(serviceStateHandler, Boolean.FALSE);
serviceStateHandler.open();
MBeanHandler packageStateHandler = new PackageStateMBeanHandler(agentContext);
Modified: aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java?rev=1697665&r1=1697664&r2=1697665&view=diff
==============================================================================
--- aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java (original)
+++ aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java Tue Aug 25 12:32:40 2015
@@ -81,6 +81,7 @@ public class BundleState extends Notific
protected BundleContext bundleContext;
protected PackageAdmin packageAdmin;
protected StartLevel startLevel;
+ protected StateConfig stateConfig;
protected ExecutorService eventDispatcher;
protected BundleListener bundleListener;
@@ -92,10 +93,11 @@ public class BundleState extends Notific
// notification type description
public static String BUNDLE_EVENT = "org.osgi.bundle.event";
- public BundleState(BundleContext bundleContext, PackageAdmin packageAdmin, StartLevel startLevel, Logger logger) {
+ public BundleState(BundleContext bundleContext, PackageAdmin packageAdmin, StartLevel startLevel, StateConfig stateConfig, Logger logger) {
this.bundleContext = bundleContext;
this.packageAdmin = packageAdmin;
this.startLevel = startLevel;
+ this.stateConfig = stateConfig;
this.logger = logger;
}
@@ -433,6 +435,10 @@ public class BundleState extends Notific
}
protected AttributeChangeNotification getAttributeChangeNotification(BundleEvent event) throws IOException {
+ if (stateConfig != null && !stateConfig.isAttributeChangeNotificationEnabled()) {
+ return null;
+ }
+
int eventType = event.getType();
switch (eventType) {
case BundleEvent.INSTALLED:
Modified: aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleStateMBeanHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleStateMBeanHandler.java?rev=1697665&r1=1697664&r2=1697665&view=diff
==============================================================================
--- aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleStateMBeanHandler.java (original)
+++ aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleStateMBeanHandler.java Tue Aug 25 12:32:40 2015
@@ -45,6 +45,7 @@ import org.osgi.service.startlevel.Start
public class BundleStateMBeanHandler implements MBeanHandler {
private JMXAgentContext agentContext;
+ private StateConfig stateConfig;
private Logger logger;
private String name;
private StandardMBean mbean;
@@ -54,8 +55,9 @@ public class BundleStateMBeanHandler imp
private ServiceReference startLevelRef;
- public BundleStateMBeanHandler(JMXAgentContext agentContext) {
+ public BundleStateMBeanHandler(JMXAgentContext agentContext, StateConfig stateConfig) {
this.agentContext = agentContext;
+ this.stateConfig = stateConfig;
this.bundleContext = agentContext.getBundleContext();
this.logger = agentContext.getLogger();
this.name = ObjectNameUtils.createFullObjectName(bundleContext, OBJECTNAME);
@@ -69,7 +71,7 @@ public class BundleStateMBeanHandler imp
PackageAdmin packageAdmin = (PackageAdmin) bundleContext.getService(packageAdminRef);
startLevelRef = bundleContext.getServiceReference(StartLevel.class.getName());
StartLevel startLevel = (StartLevel) bundleContext.getService(startLevelRef);
- bundleStateMBean = new BundleState(bundleContext, packageAdmin, startLevel, logger);
+ bundleStateMBean = new BundleState(bundleContext, packageAdmin, startLevel, stateConfig, logger);
try {
mbean = new RegistrableStandardEmitterMBean(bundleStateMBean, BundleStateMBean.class);
} catch (NotCompliantMBeanException e) {
Modified: aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceState.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceState.java?rev=1697665&r1=1697664&r2=1697665&view=diff
==============================================================================
--- aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceState.java (original)
+++ aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceState.java Tue Aug 25 12:32:40 2015
@@ -69,6 +69,7 @@ public class ServiceState extends Notifi
protected Logger logger;
private BundleContext bundleContext;
+ private StateConfig stateConfig;
protected ExecutorService eventDispatcher;
protected AllServiceListener serviceListener;
@@ -80,11 +81,12 @@ public class ServiceState extends Notifi
// notification type description
public static String SERVICE_EVENT = "org.osgi.service.event";
- public ServiceState(BundleContext bundleContext, Logger logger) {
+ public ServiceState(BundleContext bundleContext, StateConfig stateConfig, Logger logger) {
if (bundleContext == null) {
throw new IllegalArgumentException("Argument bundleContext cannot be null");
}
this.bundleContext = bundleContext;
+ this.stateConfig = stateConfig;
this.logger = logger;
}
@@ -287,6 +289,10 @@ public class ServiceState extends Notifi
}
protected AttributeChangeNotification getAttributeChangeNotification(ServiceEvent serviceevent) throws IOException {
+ if (stateConfig != null && !stateConfig.isAttributeChangeNotificationEnabled()) {
+ return null;
+ }
+
int eventType = serviceevent.getType();
switch (eventType) {
case ServiceEvent.REGISTERED:
Modified: aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandler.java?rev=1697665&r1=1697664&r2=1697665&view=diff
==============================================================================
--- aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandler.java (original)
+++ aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandler.java Tue Aug 25 12:32:40 2015
@@ -42,6 +42,7 @@ import org.osgi.service.log.LogService;
public class ServiceStateMBeanHandler implements MBeanHandler {
private JMXAgentContext agentContext;
+ private StateConfig stateConfig;
private String name;
private StandardMBean mbean;
private ServiceState serviceStateMBean;
@@ -49,8 +50,9 @@ public class ServiceStateMBeanHandler im
private Logger logger;
- public ServiceStateMBeanHandler(JMXAgentContext agentContext) {
+ public ServiceStateMBeanHandler(JMXAgentContext agentContext, StateConfig stateConfig) {
this.agentContext = agentContext;
+ this.stateConfig = stateConfig;
this.bundleContext = agentContext.getBundleContext();
this.logger = agentContext.getLogger();
this.name = ObjectNameUtils.createFullObjectName(bundleContext, OBJECTNAME);
@@ -60,7 +62,7 @@ public class ServiceStateMBeanHandler im
* @see org.apache.aries.jmx.MBeanHandler#open()
*/
public void open() {
- serviceStateMBean = new ServiceState(bundleContext, logger);
+ serviceStateMBean = new ServiceState(bundleContext, stateConfig, logger);
try {
mbean = new RegistrableStandardEmitterMBean(serviceStateMBean, ServiceStateMBean.class);
} catch (NotCompliantMBeanException e) {
Added: aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/StateConfig.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/StateConfig.java?rev=1697665&view=auto
==============================================================================
--- aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/StateConfig.java (added)
+++ aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/StateConfig.java Tue Aug 25 12:32:40 2015
@@ -0,0 +1,95 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.aries.jmx.framework;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedService;
+
+import java.io.IOException;
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+/**
+ * Configuration for {@link BundleState} and {@link ServiceState}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class StateConfig implements ManagedService {
+
+ private static final String PID = StateConfig.class.getName();
+
+ private static final String ATTRIBUTE_CHANGE_NOTIFICATION_ENABLED = "attributeChangeNotificationEnabled";
+ private static final boolean DEFAULT_ATTRIBUTE_CHANGE_NOTIFICATION_ENABLED = true;
+
+ private boolean attributeChangeNotificationEnabled;
+
+ public StateConfig() {
+ this(DEFAULT_ATTRIBUTE_CHANGE_NOTIFICATION_ENABLED);
+ }
+
+ StateConfig(boolean attributeChangeNotificationEnabled) {
+ this.attributeChangeNotificationEnabled = attributeChangeNotificationEnabled;
+ }
+
+ /**
+ * Registers this service and returns an instance.
+ *
+ * @param context the bundle context
+ * @return the service instance
+ * @throws IOException
+ */
+ public static StateConfig register(BundleContext context) throws IOException {
+ Dictionary<String, Object> serviceProps = new Hashtable<String, Object>();
+ serviceProps.put("service.pid", PID);
+
+ StateConfig stateConfig = new StateConfig();
+ context.registerService(ManagedService.class, stateConfig, serviceProps);
+ return stateConfig;
+ }
+
+ @Override
+ public void updated(Dictionary<String, ?> dictionary) throws ConfigurationException {
+ attributeChangeNotificationEnabled = getBoolean(dictionary, ATTRIBUTE_CHANGE_NOTIFICATION_ENABLED,
+ DEFAULT_ATTRIBUTE_CHANGE_NOTIFICATION_ENABLED);
+ }
+
+ /**
+ * Whether or not JMX attribute change notifications should be triggered when attributes change.
+ *
+ * @return <code>true</code> if attribute change notifications are enabled
+ */
+ public boolean isAttributeChangeNotificationEnabled() {
+ return attributeChangeNotificationEnabled;
+ }
+
+ private static boolean getBoolean(Dictionary<String, ?> dictionary, String propertyName, boolean defaultValue) {
+ Object object = (dictionary != null) ? dictionary.get(propertyName) : null;
+ if (object == null) {
+ return defaultValue;
+ } else if (object instanceof Boolean) {
+ return (Boolean) object;
+ } else {
+ String string = object.toString();
+ return !string.isEmpty() ? Boolean.parseBoolean(string) : defaultValue;
+ }
+ }
+
+}
Modified: aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanHandlerTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanHandlerTest.java?rev=1697665&r1=1697664&r2=1697665&view=diff
==============================================================================
--- aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanHandlerTest.java (original)
+++ aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanHandlerTest.java Tue Aug 25 12:32:40 2015
@@ -64,7 +64,7 @@ public class BundleStateMBeanHandlerTest
JMXAgent agent = mock(JMXAgent.class);
JMXAgentContext agentContext = new JMXAgentContext(context, agent, logger);
- BundleStateMBeanHandler handler = new BundleStateMBeanHandler(agentContext);
+ BundleStateMBeanHandler handler = new BundleStateMBeanHandler(agentContext, new StateConfig());
handler.open();
assertNotNull(handler.getMbean());
Modified: aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateTest.java?rev=1697665&r1=1697664&r2=1697665&view=diff
==============================================================================
--- aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateTest.java (original)
+++ aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateTest.java Tue Aug 25 12:32:40 2015
@@ -53,16 +53,15 @@ import org.osgi.service.startlevel.Start
public class BundleStateTest {
- @Test
- public void testNotificationsForBundleEvents() throws Exception {
-
+ 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, logger);
+ BundleState bundleState = new BundleState(context, admin, startLevel, stateConfig, logger);
Bundle b1 = mock(Bundle.class);
when(b1.getBundleId()).thenReturn(new Long(9));
@@ -84,10 +83,6 @@ public class BundleStateTest {
bundleState.preRegister(server, objectName);
bundleState.postRegister(true);
- //holders for Notifications captured
- final List<Notification> received = new LinkedList<Notification>();
- final List<AttributeChangeNotification> attributeChanges = new LinkedList<AttributeChangeNotification>();
-
//add NotificationListener to receive the events
bundleState.addNotificationListener(new NotificationListener() {
public void handleNotification(Notification notification, Object handback) {
@@ -117,6 +112,17 @@ public class BundleStateTest {
assertTrue(dispatcher.isShutdown());
dispatcher.awaitTermination(2, TimeUnit.SECONDS);
assertTrue(dispatcher.isTerminated());
+ }
+
+ @Test
+ public void testNotificationsForBundleEvents() throws Exception {
+ StateConfig stateConfig = new StateConfig();
+
+ //holders for Notifications captured
+ List<Notification> received = new LinkedList<Notification>();
+ List<AttributeChangeNotification> attributeChanges = new LinkedList<AttributeChangeNotification>();
+
+ createBundle(stateConfig, received, attributeChanges);
assertEquals(2, received.size());
Notification installed = received.get(0);
@@ -153,7 +159,7 @@ public class BundleStateTest {
StartLevel startLevel = mock(StartLevel.class);
Logger logger = mock(Logger.class);
- BundleState bundleState = new BundleState(context, admin, startLevel, logger);
+ BundleState bundleState = new BundleState(context, admin, startLevel, new StateConfig(), logger);
MBeanServer server1 = mock(MBeanServer.class);
MBeanServer server2 = mock(MBeanServer.class);
@@ -198,4 +204,17 @@ public class BundleStateTest {
}
+
+ @Test
+ public void testAttributeNotificationDisabled() throws Exception {
+ StateConfig stateConfig = new StateConfig(false);
+
+ //holders for Notifications captured
+ List<AttributeChangeNotification> attributeChanges = new LinkedList<AttributeChangeNotification>();
+ createBundle(stateConfig, new LinkedList<Notification>(), attributeChanges);
+
+ assertEquals(0, attributeChanges.size());
+ }
+
+
}
Modified: aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandlerTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandlerTest.java?rev=1697665&r1=1697664&r2=1697665&view=diff
==============================================================================
--- aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandlerTest.java (original)
+++ aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandlerTest.java Tue Aug 25 12:32:40 2015
@@ -51,7 +51,7 @@ public class ServiceStateMBeanHandlerTes
JMXAgent agent = mock(JMXAgent.class);
JMXAgentContext agentContext = new JMXAgentContext(context, agent, logger);
- ServiceStateMBeanHandler handler = new ServiceStateMBeanHandler(agentContext);
+ ServiceStateMBeanHandler handler = new ServiceStateMBeanHandler(agentContext, new StateConfig());
handler.open();
assertNotNull(handler.getMbean());
Modified: aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateTest.java?rev=1697665&r1=1697664&r2=1697665&view=diff
==============================================================================
--- aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateTest.java (original)
+++ aries/trunk/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateTest.java Tue Aug 25 12:32:40 2015
@@ -64,13 +64,12 @@ import org.osgi.framework.ServiceReferen
public class ServiceStateTest {
- @Test
- public void testNotificationsForServiceEvents() throws Exception {
-
+ private void createService(StateConfig stateConfig, final List<Notification> received,
+ final List<AttributeChangeNotification> attributeChanges) throws Exception {
BundleContext context = mock(BundleContext.class);
Logger logger = mock(Logger.class);
- ServiceState serviceState = new ServiceState(context, logger);
+ ServiceState serviceState = new ServiceState(context, stateConfig, logger);
ServiceReference reference = mock(ServiceReference.class);
Bundle b1 = mock(Bundle.class);
@@ -99,9 +98,6 @@ public class ServiceStateTest {
serviceState.preRegister(server, objectName);
serviceState.postRegister(true);
- //holders for Notifications captured
- final List<Notification> received = new LinkedList<Notification>();
- final List<AttributeChangeNotification> attributeChanges = new LinkedList<AttributeChangeNotification>();
//add NotificationListener to receive the events
serviceState.addNotificationListener(new NotificationListener() {
@@ -132,6 +128,17 @@ public class ServiceStateTest {
assertTrue(dispatcher.isShutdown());
dispatcher.awaitTermination(2, TimeUnit.SECONDS);
assertTrue(dispatcher.isTerminated());
+ }
+
+ @Test
+ public void testNotificationsForServiceEvents() throws Exception {
+ StateConfig stateConfig = new StateConfig();
+
+ //holders for Notifications captured
+ List<Notification> received = new LinkedList<Notification>();
+ List<AttributeChangeNotification> attributeChanges = new LinkedList<AttributeChangeNotification>();
+
+ createService(stateConfig, received, attributeChanges);
assertEquals(2, received.size());
Notification registered = received.get(0);
@@ -168,7 +175,7 @@ public class ServiceStateTest {
BundleContext context = mock(BundleContext.class);
Logger logger = mock(Logger.class);
- ServiceState serviceState = new ServiceState(context, logger);
+ ServiceState serviceState = new ServiceState(context, new StateConfig(), logger);
MBeanServer server1 = mock(MBeanServer.class);
MBeanServer server2 = mock(MBeanServer.class);
@@ -213,4 +220,15 @@ public class ServiceStateTest {
}
+ @Test
+ public void testAttributeNotificationDisabled() throws Exception {
+ StateConfig stateConfig = new StateConfig(false);
+
+ //holders for Notifications captured
+ List<AttributeChangeNotification> attributeChanges = new LinkedList<AttributeChangeNotification>();
+ createService(stateConfig, new LinkedList<Notification>(), attributeChanges);
+
+ assertEquals(0, attributeChanges.size());
+ }
+
}