You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by tj...@apache.org on 2014/06/30 18:55:06 UTC
svn commit: r1606837 [11/27] - in /aries/branches/subsystemsR6: ./
application/ application/application-api/ application/application-bundle/
application/application-converters/
application/application-default-local-platform/
application/application-dep...
Modified: aries/branches/subsystemsR6/jmx/jmx-core-whiteboard/pom.xml
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core-whiteboard/pom.xml?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core-whiteboard/pom.xml (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core-whiteboard/pom.xml Mon Jun 30 16:54:57 2014
@@ -1,26 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
<!--
- 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.
+ 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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
<modelVersion>4.0.0</modelVersion>
+
<parent>
<groupId>org.apache.aries</groupId>
- <artifactId>java5-parent</artifactId>
- <version>1.0.0</version>
- <relativePath />
+ <artifactId>parent</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../../parent/pom.xml</relativePath>
</parent>
<groupId>org.apache.aries.jmx</groupId>
@@ -34,11 +39,11 @@
used to register the MBeans.
</description>
- <scm>
- <connection>scm:svn:http://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-core-whiteboard</connection>
- <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-core-whiteboard</developerConnection>
- <url>http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core-whiteboard</url>
- </scm>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-core-whiteboard</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-core-whiteboard</developerConnection>
+ <url>http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core-whiteboard</url>
+ </scm>
<properties>
<aries.osgi.activator>
@@ -61,6 +66,7 @@
org.osgi.service.provisioning;version="[1.2,2)",
org.osgi.service.useradmin;version="[1.1,2)"
</aries.osgi.dynamic>
+ <lastReleaseVersion>1.1.1</lastReleaseVersion>
</properties>
<dependencies>
@@ -100,7 +106,6 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
-
</dependencies>
<build>
@@ -108,7 +113,6 @@
<plugin>
<groupId>org.apache.aries.versioning</groupId>
<artifactId>org.apache.aries.versioning.plugin</artifactId>
- <version>0.1.0</version>
<executions>
<execution>
<id>default-verify</id>
@@ -116,9 +120,6 @@
<goals>
<goal>version-check</goal>
</goals>
- <configuration>
- <oldArtifact>org.apache.aries.jmx:org.apache.aries.jmx.core.whiteboard:1.1.0</oldArtifact>
- </configuration>
</execution>
</executions>
</plugin>
Modified: aries/branches/subsystemsR6/jmx/jmx-core/pom.xml
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/pom.xml?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/pom.xml (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/pom.xml Mon Jun 30 16:54:57 2014
@@ -1,26 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
<!--
- 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.
+ 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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
<modelVersion>4.0.0</modelVersion>
+
<parent>
<groupId>org.apache.aries</groupId>
- <artifactId>java5-parent</artifactId>
- <version>1.0.0</version>
- <relativePath />
+ <artifactId>parent</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../../parent/pom.xml</relativePath>
</parent>
<groupId>org.apache.aries.jmx</groupId>
@@ -33,11 +38,11 @@
of the JMX Control specification
</description>
- <scm>
- <connection>scm:svn:http://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-core</connection>
- <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-core</developerConnection>
- <url>http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core</url>
- </scm>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-core</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-core</developerConnection>
+ <url>http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-core</url>
+ </scm>
<properties>
<aries.osgi.activator>
@@ -70,6 +75,7 @@
<aries.osgi.import.service>
javax.management.MBeanServer
</aries.osgi.import.service>
+ <lastReleaseVersion>1.1.1</lastReleaseVersion>
</properties>
<dependencies>
@@ -81,7 +87,6 @@
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
- <version>4.3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -105,15 +110,18 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
-
</dependencies>
<build>
<plugins>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.1</version>
+ </plugin>
+ <plugin>
<groupId>org.apache.aries.versioning</groupId>
<artifactId>org.apache.aries.versioning.plugin</artifactId>
- <version>0.1.0</version>
<executions>
<execution>
<id>default-verify</id>
@@ -121,12 +129,10 @@
<goals>
<goal>version-check</goal>
</goals>
- <configuration>
- <oldArtifact>org.apache.aries.jmx:org.apache.aries.jmx.core:1.1.0</oldArtifact>
- </configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
+
</project>
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/AbstractCompendiumHandler.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/AbstractCompendiumHandler.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/AbstractCompendiumHandler.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/AbstractCompendiumHandler.java Mon Jun 30 16:54:57 2014
@@ -16,7 +16,8 @@
*/
package org.apache.aries.jmx;
-import java.util.concurrent.ExecutorService;
+import java.util.concurrent.atomic.AtomicLong;
+
import javax.management.StandardMBean;
import org.apache.aries.jmx.agent.JMXAgentContext;
@@ -39,11 +40,12 @@ import org.osgi.util.tracker.ServiceTrac
*
* @version $Rev$ $Date$
*/
+@SuppressWarnings({"rawtypes", "unchecked"})
public abstract class AbstractCompendiumHandler extends ServiceTracker implements MBeanHandler {
protected final JMXAgentContext agentContext;
protected StandardMBean mbean;
- protected Long trackedId;
+ protected final AtomicLong trackedId = new AtomicLong();
/**
*
@@ -73,25 +75,19 @@ public abstract class AbstractCompendium
public Object addingService(ServiceReference reference) {
Logger logger = agentContext.getLogger();
Object trackedService = null;
- Long serviceId = (Long) reference.getProperty(Constants.SERVICE_ID);
+ long serviceId = (Long) reference.getProperty(Constants.SERVICE_ID);
//API stipulates versions for compendium services with static ObjectName
//This shouldn't happen but added as a consistency check
- if (trackedId != null) {
- String serviceDescription = getServiceDescription(reference);
- logger.log(LogService.LOG_WARNING, "Detected secondary ServiceReference for [" + serviceDescription
- + "] with " + Constants.SERVICE_ID + " [" + serviceId + "] Only 1 instance will be JMX managed");
- } else {
+ if (trackedId.compareAndSet(0, serviceId)) {
logger.log(LogService.LOG_INFO, "Registering MBean with ObjectName [" + getName() + "] for service with "
+ Constants.SERVICE_ID + " [" + serviceId + "]");
trackedService = context.getService(reference);
mbean = constructInjectMBean(trackedService);
- ExecutorService executor = agentContext.getRegistrationExecutor();
- executor.submit(new Runnable() {
- public void run() {
- agentContext.registerMBean(AbstractCompendiumHandler.this);
- }
- });
- trackedId = serviceId;
+ agentContext.registerMBean(AbstractCompendiumHandler.this);
+ } else {
+ String serviceDescription = getServiceDescription(reference);
+ logger.log(LogService.LOG_WARNING, "Detected secondary ServiceReference for [" + serviceDescription
+ + "] with " + Constants.SERVICE_ID + " [" + serviceId + "] Only 1 instance will be JMX managed");
}
return trackedService;
}
@@ -103,22 +99,16 @@ public abstract class AbstractCompendium
*/
public void removedService(ServiceReference reference, Object service) {
Logger logger = agentContext.getLogger();
- Long serviceID = (Long) reference.getProperty(Constants.SERVICE_ID);
- if (trackedId != null && !trackedId.equals(serviceID)) {
- String serviceDescription = getServiceDescription(reference);
- logger.log(LogService.LOG_WARNING, "ServiceReference for [" + serviceDescription + "] with "
- + Constants.SERVICE_ID + " [" + serviceID + "] is not currently JMX managed");
- } else {
+ long serviceID = (Long) reference.getProperty(Constants.SERVICE_ID);
+ if (trackedId.compareAndSet(serviceID, 0)) {
logger.log(LogService.LOG_INFO, "Unregistering MBean with ObjectName [" + getName() + "] for service with "
+ Constants.SERVICE_ID + " [" + serviceID + "]");
- ExecutorService executor = agentContext.getRegistrationExecutor();
- executor.submit(new Runnable() {
- public void run() {
- agentContext.unregisterMBean(AbstractCompendiumHandler.this);
- }
- });
- trackedId = null;
+ agentContext.unregisterMBean(AbstractCompendiumHandler.this);
context.ungetService(reference);
+ } else {
+ String serviceDescription = getServiceDescription(reference);
+ logger.log(LogService.LOG_WARNING, "ServiceReference for [" + serviceDescription + "] with "
+ + Constants.SERVICE_ID + " [" + serviceID + "] is not currently JMX managed");
}
}
@@ -126,7 +116,7 @@ public abstract class AbstractCompendium
String serviceDescription = (String) reference.getProperty(Constants.SERVICE_DESCRIPTION);
if (serviceDescription == null) {
Object obj = reference.getProperty(Constants.OBJECTCLASS);
- if (obj instanceof String) {
+ if (obj instanceof String[]) {
StringBuilder sb = new StringBuilder();
for (String s : (String[]) obj) {
if (sb.length() > 0) {
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Activator.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Activator.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Activator.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Activator.java Mon Jun 30 16:54:57 2014
@@ -18,7 +18,6 @@ package org.apache.aries.jmx;
import org.apache.aries.jmx.agent.JMXAgent;
import org.apache.aries.jmx.agent.JMXAgentImpl;
-import org.apache.aries.jmx.agent.JMXAgentContext;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.service.log.LogService;
@@ -44,9 +43,7 @@ public class Activator implements Bundle
//starting logger
logger.open();
logger.log(LogService.LOG_DEBUG, "Starting JMX OSGi bundle");
- agent = new JMXAgentImpl(logger);
- JMXAgentContext agentContext = new JMXAgentContext(context, agent, logger);
- agent.setAgentContext(agentContext);
+ agent = new JMXAgentImpl(context, logger);
agent.start();
}
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Logger.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Logger.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Logger.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/Logger.java Mon Jun 30 16:54:57 2014
@@ -29,18 +29,17 @@ import org.osgi.util.tracker.ServiceTrac
* @see org.osgi.util.tracker.ServiceTracker
* @version $Rev$ $Date$
*/
+@SuppressWarnings("rawtypes")
public class Logger extends ServiceTracker implements LogService {
- private String bundleLocation;
-
/**
* Constructs new Logger(ServiceTracker for LogService).
*
* @param context bundle context.
*/
- public Logger(BundleContext context) {
+ @SuppressWarnings("unchecked")
+ public Logger(BundleContext context) {
super(context, LogService.class.getName(), null);
- this.bundleLocation = context.getBundle().getLocation();
}
/**
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/MBeanServiceTracker.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/MBeanServiceTracker.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/MBeanServiceTracker.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/MBeanServiceTracker.java Mon Jun 30 16:54:57 2014
@@ -16,8 +16,6 @@
*/
package org.apache.aries.jmx;
-import java.util.concurrent.ExecutorService;
-
import javax.management.MBeanServer;
import org.apache.aries.jmx.agent.JMXAgentContext;
@@ -32,6 +30,7 @@ import org.osgi.util.tracker.ServiceTrac
* @see ServiceTracker
* @version $Rev$ $Date$
*/
+@SuppressWarnings({"rawtypes", "unchecked"})
public class MBeanServiceTracker extends ServiceTracker {
private JMXAgentContext agentContext;
@@ -40,7 +39,7 @@ public class MBeanServiceTracker extends
* Constructs new MBeanServiceTracker.
* @param agentContext agent context.
*/
- public MBeanServiceTracker(JMXAgentContext agentContext) {
+ public MBeanServiceTracker(JMXAgentContext agentContext) {
super(agentContext.getBundleContext(), MBeanServer.class.getName(), null);
this.agentContext = agentContext;
}
@@ -51,19 +50,11 @@ public class MBeanServiceTracker extends
* @see ServiceTracker#addingService(ServiceReference)
*/
public Object addingService(final ServiceReference reference) {
- final MBeanServer mbeanServer = (MBeanServer) context.getService(reference);
+ final MBeanServer mbeanServer = (MBeanServer) super.addingService(reference);
Logger logger = agentContext.getLogger();
logger.log(LogService.LOG_DEBUG, "Discovered MBean server " + mbeanServer);
- ExecutorService executor = agentContext.getRegistrationExecutor();
- executor.submit(new Runnable() {
-
- public void run() {
- agentContext.registerMBeans(mbeanServer);
-
- }
- });
-
- return super.addingService(reference);
+ agentContext.registerMBeans(mbeanServer);
+ return mbeanServer;
}
/**
@@ -73,16 +64,10 @@ public class MBeanServiceTracker extends
* @see ServiceTracker#removedService(ServiceReference, Object)
*/
public void removedService(final ServiceReference reference, Object service) {
- final MBeanServer mbeanServer = (MBeanServer) context.getService(reference);
+ final MBeanServer mbeanServer = (MBeanServer) service;
Logger logger = agentContext.getLogger();
- logger.log(LogService.LOG_DEBUG, "MBean server " + mbeanServer+ " is unregistered from SeviceRegistry");
- ExecutorService executor = agentContext.getRegistrationExecutor();
- executor.submit(new Runnable() {
-
- public void run() {
- agentContext.unregisterMBeans(mbeanServer);
- }
- });
+ logger.log(LogService.LOG_DEBUG, "MBean server " + mbeanServer+ " is unregistered from ServiceRegistry");
+ agentContext.unregisterMBeans(mbeanServer);
super.removedService(reference, service);
}
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgent.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgent.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgent.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgent.java Mon Jun 30 16:54:57 2014
@@ -16,8 +16,6 @@
*/
package org.apache.aries.jmx.agent;
-import java.util.concurrent.ExecutorService;
-
import javax.management.MBeanServer;
import org.apache.aries.jmx.MBeanHandler;
@@ -62,34 +60,9 @@ public interface JMXAgent {
void unregisterMBean(final MBeanHandler mBeanHandler);
/**
- * Unregisters MBean with all available MBeanServers.
- * @param name of MBean to be unregistered.
- * @deprecated
- */
- void unregisterMBean(final String name);
-
- /**
* Stops JMXAgent.
* This method stops MBeanServiceTracker and all MBean handlers.
*/
void stop();
- /**
- * Gets JMXAgentContext @see {@link JMXAgentContext}.
- * @return JMXAgentContext instance.
- */
- JMXAgentContext getAgentContext();
-
- /**
- * Sets JMXAgentContext for this agent.
- * @param agentContext JMXAgentContext instance created for this agent.
- */
- void setAgentContext(JMXAgentContext agentContext);
-
- /**
- * Gets registration {@link ExecutorService}.
- * @return registration executor.
- */
- ExecutorService getRegistrationExecutor();
-
}
\ No newline at end of file
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentContext.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentContext.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentContext.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentContext.java Mon Jun 30 16:54:57 2014
@@ -16,8 +16,6 @@
*/
package org.apache.aries.jmx.agent;
-import java.util.concurrent.ExecutorService;
-
import javax.management.MBeanServer;
import org.apache.aries.jmx.Logger;
@@ -83,15 +81,6 @@ public class JMXAgentContext {
}
/**
- * Delegates invocation to JMX agent.
- * @see org.apache.aries.jmx.agent.JMXAgent#unregisterMBean(String)
- * @deprecated
- */
- public void unregisterMBean(final String name) {
- agent.unregisterMBean(name);
- }
-
- /**
* Gets bundle context.
* @return bundle context.
*/
@@ -107,11 +96,4 @@ public class JMXAgentContext {
return logger;
}
- /**
- * Delegates invocation to JMX agent.
- * @see org.apache.aries.jmx.agent.JMXAgent#getRegistrationExecutor()
- */
- public ExecutorService getRegistrationExecutor() {
- return agent.getRegistrationExecutor();
- }
}
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java Mon Jun 30 16:54:57 2014
@@ -16,11 +16,11 @@
*/
package org.apache.aries.jmx.agent;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
+
import javax.management.InstanceAlreadyExistsException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanRegistrationException;
@@ -30,7 +30,6 @@ import javax.management.NotCompliantMBea
import javax.management.ObjectName;
import javax.management.StandardMBean;
-import org.apache.aries.jmx.JMXThreadFactory;
import org.apache.aries.jmx.Logger;
import org.apache.aries.jmx.MBeanHandler;
import org.apache.aries.jmx.MBeanServiceTracker;
@@ -58,28 +57,26 @@ import org.osgi.util.tracker.ServiceTrac
*/
public class JMXAgentImpl implements JMXAgent {
- private ServiceTracker mbeanServiceTracker;
+ @SuppressWarnings("rawtypes")
+ private ServiceTracker mbeanServiceTracker;
/**
* {@link MBeanHandler} store.
*/
+ private List<MBeanServer> mbeanServers;
private Map<MBeanHandler, Boolean> mbeansHandlers;
- private JMXAgentContext agentContext;
+ private BundleContext context;
private Logger logger;
/**
- * Registration {@link ExecutorService}.
- */
- private ExecutorService registrationExecutor;
-
- /**
* Constructs new JMXAgent.
*
* @param logger @see org.apache.aries.jmx.Logger
*/
- public JMXAgentImpl(Logger logger) {
+ public JMXAgentImpl(BundleContext context, Logger logger) {
+ this.context = context;
this.logger = logger;
+ this.mbeanServers = new ArrayList<MBeanServer>();
this.mbeansHandlers = new HashMap<MBeanHandler, Boolean>();
- this.registrationExecutor = Executors.newSingleThreadExecutor(new JMXThreadFactory("JMX OSGi Agent"));
}
/**
@@ -87,20 +84,22 @@ public class JMXAgentImpl implements JMX
*/
public synchronized void start() {
logger.log(LogService.LOG_INFO, "Starting JMX OSGi agent");
- BundleContext bc = agentContext.getBundleContext();
- MBeanHandler frameworkHandler = new FrameworkMBeanHandler(bc, logger);
+ // Initialize static handlers
+ // Those handlers do not track dependencies
+ JMXAgentContext agentContext = new JMXAgentContext(context, this, logger);
+ MBeanHandler frameworkHandler = new FrameworkMBeanHandler(agentContext);
mbeansHandlers.put(frameworkHandler, Boolean.FALSE);
frameworkHandler.open();
- MBeanHandler bundleStateHandler = new BundleStateMBeanHandler(bc, logger);
+ MBeanHandler bundleStateHandler = new BundleStateMBeanHandler(agentContext);
mbeansHandlers.put(bundleStateHandler, Boolean.FALSE);
bundleStateHandler.open();
- MBeanHandler revisionsStateHandler = new BundleWiringStateMBeanHandler(bc, logger);
+ MBeanHandler revisionsStateHandler = new BundleWiringStateMBeanHandler(agentContext);
mbeansHandlers.put(revisionsStateHandler, Boolean.FALSE);
revisionsStateHandler.open();
- MBeanHandler serviceStateHandler = new ServiceStateMBeanHandler(bc, logger);
+ MBeanHandler serviceStateHandler = new ServiceStateMBeanHandler(agentContext);
mbeansHandlers.put(serviceStateHandler, Boolean.FALSE);
serviceStateHandler.open();
- MBeanHandler packageStateHandler = new PackageStateMBeanHandler(bc, logger);
+ MBeanHandler packageStateHandler = new PackageStateMBeanHandler(agentContext);
mbeansHandlers.put(packageStateHandler, Boolean.FALSE);
packageStateHandler.open();
MBeanHandler permissionAdminHandler = new PermissionAdminMBeanHandler(agentContext);
@@ -115,6 +114,7 @@ public class JMXAgentImpl implements JMX
MBeanHandler provServiceHandler = new ProvisioningServiceMBeanHandler(agentContext);
mbeansHandlers.put(provServiceHandler, Boolean.FALSE);
provServiceHandler.open();
+ // Track mbean servers
mbeanServiceTracker = new MBeanServiceTracker(agentContext);
mbeanServiceTracker.open();
}
@@ -124,7 +124,7 @@ public class JMXAgentImpl implements JMX
*/
public synchronized void registerMBeans(final MBeanServer server) {
for (MBeanHandler mbeanHandler : mbeansHandlers.keySet()) {
- if (mbeansHandlers.get(mbeanHandler) == Boolean.FALSE) {
+ if (mbeansHandlers.get(mbeanHandler) == Boolean.TRUE) {
String name = mbeanHandler.getName();
StandardMBean mbean = mbeanHandler.getMbean();
if (mbean != null) {
@@ -132,7 +132,6 @@ public class JMXAgentImpl implements JMX
logger.log(LogService.LOG_INFO, "Registering " + mbean.getMBeanInterface().getName()
+ " to MBeanServer " + server + " with name " + name);
server.registerMBean(mbean, new ObjectName(name));
- mbeansHandlers.put(mbeanHandler, Boolean.TRUE);
} catch (InstanceAlreadyExistsException e) {
logger.log(LogService.LOG_ERROR, "MBean is already registered", e);
} catch (MBeanRegistrationException e) {
@@ -147,6 +146,7 @@ public class JMXAgentImpl implements JMX
}
}
}
+ mbeanServers.add(server);
}
/**
@@ -163,7 +163,6 @@ public class JMXAgentImpl implements JMX
logger.log(LogService.LOG_INFO, "Unregistering " + mbean.getMBeanInterface().getName()
+ " to MBeanServer " + server + " with name " + name);
server.unregisterMBean(new ObjectName(name));
- mbeansHandlers.put(mBeanHandler, Boolean.FALSE);
}
} catch (MBeanRegistrationException e) {
logger.log(LogService.LOG_ERROR, "Can't unregister MBean", e);
@@ -178,22 +177,21 @@ public class JMXAgentImpl implements JMX
}
}
}
+ mbeanServers.remove(server);
}
/**
* @see org.apache.aries.jmx.agent.JMXAgent#registerMBean(org.apache.aries.jmx.MBeanHandler)
*/
public synchronized void registerMBean(final MBeanHandler mBeanHandler) {
- Object[] servers = getMBeanServers();
- for (Object server : servers) {
+ for (MBeanServer server : mbeanServers) {
String name = mBeanHandler.getName();
StandardMBean mbean = mBeanHandler.getMbean();
try {
logger.log(LogService.LOG_INFO, "Registering " + mbean.getMBeanInterface().getName()
+ " to MBeanServer " + server + " with name " + name);
- ((MBeanServer) server).registerMBean(mbean, new ObjectName(name));
+ server.registerMBean(mbean, new ObjectName(name));
- mbeansHandlers.put(mBeanHandler, Boolean.TRUE);
} catch (InstanceAlreadyExistsException e) {
logger.log(LogService.LOG_ERROR, "MBean is already registered", e);
} catch (MBeanRegistrationException e) {
@@ -209,45 +207,19 @@ public class JMXAgentImpl implements JMX
return;
}
}
+ mbeansHandlers.put(mBeanHandler, Boolean.TRUE);
}
/**
* @see org.apache.aries.jmx.agent.JMXAgent#unregisterMBean(org.apache.aries.jmx.MBeanHandler)
*/
public synchronized void unregisterMBean(final MBeanHandler mBeanHandler) {
- Object[] servers = getMBeanServers();
- for (Object server : servers) {
+ for (MBeanServer server : mbeanServers) {
String name = mBeanHandler.getName();
try {
logger.log(LogService.LOG_INFO, "Unregistering mbean " + " to MBeanServer " + server + " with name "
+ name);
- ((MBeanServer) server).unregisterMBean(new ObjectName(name));
- mbeansHandlers.put(mBeanHandler, Boolean.FALSE);
- } catch (MBeanRegistrationException e) {
- logger.log(LogService.LOG_ERROR, "Can't register MBean", e);
- } catch (InstanceNotFoundException e) {
- logger.log(LogService.LOG_ERROR, "MBean doesn't exist in the repository", e);
- } catch (MalformedObjectNameException e) {
- logger.log(LogService.LOG_ERROR, "Try to register with no valid objectname, Stopping registration", e);
- return;
- } catch (NullPointerException e) {
- logger.log(LogService.LOG_ERROR, "Name of objectname can't be null, Stopping registration", e);
- return;
- }
-
- }
- }
-
- /**
- * @see org.apache.aries.jmx.agent.JMXAgent#unregisterMBean(java.lang.String)
- */
- public synchronized void unregisterMBean(final String name) {
- Object[] servers = getMBeanServers();
- for (Object server : servers) {
- try {
- logger.log(LogService.LOG_INFO, "Unregistering mbean " + " to MBeanServer " + server + " with name "
- + name);
- ((MBeanServer) server).unregisterMBean(new ObjectName(name));
+ server.unregisterMBean(new ObjectName(name));
} catch (MBeanRegistrationException e) {
logger.log(LogService.LOG_ERROR, "Can't register MBean", e);
} catch (InstanceNotFoundException e) {
@@ -260,6 +232,7 @@ public class JMXAgentImpl implements JMX
return;
}
}
+ mbeansHandlers.put(mBeanHandler, Boolean.FALSE);
}
/**
@@ -273,45 +246,6 @@ public class JMXAgentImpl implements JMX
mBeanHandler.close();
}
}
- if (registrationExecutor != null && !registrationExecutor.isShutdown()) {
- registrationExecutor.shutdown();
- try {
- registrationExecutor.awaitTermination(5 * 60, TimeUnit.SECONDS);
- } catch (InterruptedException e) {
- logger.log(LogService.LOG_WARNING, "Interrupted while waiting for executor shutdown", e);
- }
- }
- }
-
- /**
- * @see org.apache.aries.jmx.agent.JMXAgent#getAgentContext()
- */
- public JMXAgentContext getAgentContext() {
- return agentContext;
- }
-
- /**
- * @see org.apache.aries.jmx.agent.JMXAgent#setAgentContext(org.apache.aries.jmx.agent.JMXAgentContext)
- */
- public void setAgentContext(JMXAgentContext agentContext) {
- this.agentContext = agentContext;
- }
-
- /**
- * Gets all MBeanServers from MBeanServiceTracker.
- *
- * @return array of MBean servers.
- */
- private Object[] getMBeanServers() {
- Object[] servers = mbeanServiceTracker.getServices();
- return servers != null ? servers : new Object[0];
- }
-
- /**
- * @see org.apache.aries.jmx.agent.JMXAgent#getRegistrationExecutor()
- */
- public ExecutorService getRegistrationExecutor() {
- return registrationExecutor;
}
}
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/cm/ConfigurationAdmin.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/cm/ConfigurationAdmin.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/cm/ConfigurationAdmin.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/cm/ConfigurationAdmin.java Mon Jun 30 16:54:57 2014
@@ -172,7 +172,6 @@ public class ConfigurationAdmin implemen
/**
* @see org.osgi.jmx.service.cm.ConfigurationAdminMBean#getPropertiesForLocation(java.lang.String, java.lang.String)
*/
- @SuppressWarnings("unchecked")
public TabularData getPropertiesForLocation(String pid, String location) throws IOException {
if (pid == null || pid.length() < 1) {
throw new IOException("Argument pid cannot be null or empty");
@@ -227,7 +226,7 @@ public class ConfigurationAdmin implemen
Dictionary<String, Object> configurationProperties = new Hashtable<String, Object>();
Collection<CompositeData> compositeData = (Collection<CompositeData>) configurationTable.values();
for (CompositeData row: compositeData) {
- PropertyData<? extends Class> propertyData = PropertyData.from(row);
+ PropertyData<? extends Class<?>> propertyData = PropertyData.from(row);
configurationProperties.put(propertyData.getKey(), propertyData.getValue());
}
Configuration config = configurationAdmin.getConfiguration(pid, location);
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleData.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleData.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleData.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleData.java Mon Jun 30 16:54:57 2014
@@ -84,6 +84,7 @@ import org.osgi.service.startlevel.Start
*
* @version $Rev$ $Date$
*/
+@SuppressWarnings("deprecation")
public class BundleData {
/**
@@ -190,7 +191,6 @@ public class BundleData {
super();
}
- @SuppressWarnings("unchecked")
public BundleData(BundleContext localBundleContext, Bundle bundle, PackageAdmin packageAdmin, StartLevel startLevel) {
if (bundle == null) {
throw new IllegalArgumentException("Argument bundle cannot be null");
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/GroupData.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/GroupData.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/GroupData.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/GroupData.java Mon Jun 30 16:54:57 2014
@@ -82,7 +82,8 @@ public class GroupData extends UserData
* @param members basic members.
* @param requiredMembers required members.
*/
- public GroupData(String name, Dictionary properties, Dictionary credentials, String[] members, String[] requiredMembers) {
+ @SuppressWarnings("rawtypes")
+ public GroupData(String name, Dictionary properties, Dictionary credentials, String[] members, String[] requiredMembers) {
super(name, Role.GROUP, properties, credentials);
this.members = (members == null) ? new String[0] : members;
this.requiredMembers = (requiredMembers == null) ? new String[0] : requiredMembers;
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/PackageData.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/PackageData.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/PackageData.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/PackageData.java Mon Jun 30 16:54:57 2014
@@ -38,6 +38,7 @@ import org.osgi.service.packageadmin.Exp
*
* @version $Rev$ $Date$
*/
+@SuppressWarnings("deprecation")
public class PackageData {
/**
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/RoleData.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/RoleData.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/RoleData.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/RoleData.java Mon Jun 30 16:54:57 2014
@@ -83,7 +83,8 @@ public class RoleData {
* @param type role type.
* @param properties role properties.
*/
- public RoleData(String name, int type, Dictionary properties) {
+ @SuppressWarnings("rawtypes")
+ public RoleData(String name, int type, Dictionary properties) {
this.name = name;
this.type = type;
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleStateMBeanHandler.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleStateMBeanHandler.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleStateMBeanHandler.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleStateMBeanHandler.java Mon Jun 30 16:54:57 2014
@@ -23,6 +23,7 @@ import javax.management.StandardMBean;
import org.apache.aries.jmx.Logger;
import org.apache.aries.jmx.MBeanHandler;
+import org.apache.aries.jmx.agent.JMXAgentContext;
import org.apache.aries.jmx.util.ObjectNameUtils;
import org.apache.aries.jmx.util.shared.RegistrableStandardEmitterMBean;
import org.osgi.framework.BundleContext;
@@ -43,6 +44,7 @@ import org.osgi.service.startlevel.Start
*/
public class BundleStateMBeanHandler implements MBeanHandler {
+ private JMXAgentContext agentContext;
private Logger logger;
private String name;
private StandardMBean mbean;
@@ -52,9 +54,10 @@ public class BundleStateMBeanHandler imp
private ServiceReference startLevelRef;
- public BundleStateMBeanHandler(BundleContext bundleContext, Logger logger) {
- this.bundleContext = bundleContext;
- this.logger = logger;
+ public BundleStateMBeanHandler(JMXAgentContext agentContext) {
+ this.agentContext = agentContext;
+ this.bundleContext = agentContext.getBundleContext();
+ this.logger = agentContext.getLogger();
this.name = ObjectNameUtils.createFullObjectName(bundleContext, OBJECTNAME);
}
@@ -72,6 +75,7 @@ public class BundleStateMBeanHandler imp
} catch (NotCompliantMBeanException e) {
logger.log(LogService.LOG_ERROR, "Failed to instantiate MBean for " + BundleStateMBean.class.getName(), e);
}
+ agentContext.registerMBean(this);
}
/**
@@ -93,6 +97,7 @@ public class BundleStateMBeanHandler imp
* @see org.apache.aries.jmx.MBeanHandler#close()
*/
public void close() {
+ agentContext.unregisterMBean(this);
if (packageAdminRef != null) {
try {
bundleContext.ungetService(packageAdminRef);
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/FrameworkMBeanHandler.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/FrameworkMBeanHandler.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/FrameworkMBeanHandler.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/FrameworkMBeanHandler.java Mon Jun 30 16:54:57 2014
@@ -21,6 +21,7 @@ import javax.management.StandardMBean;
import org.apache.aries.jmx.Logger;
import org.apache.aries.jmx.MBeanHandler;
+import org.apache.aries.jmx.agent.JMXAgentContext;
import org.apache.aries.jmx.util.ObjectNameUtils;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@@ -40,6 +41,7 @@ import org.osgi.service.startlevel.Start
*/
public class FrameworkMBeanHandler implements MBeanHandler {
+ private JMXAgentContext agentContext;
private String name;
private StandardMBean mbean;
private BundleContext context;
@@ -48,13 +50,13 @@ public class FrameworkMBeanHandler imple
/**
* Constructs new FrameworkMBeanHandler.
*
- * @param context bundle context of JMX bundle.
- * @param logger @see {@link Logger}.
+ * @param agentContext agent context
*/
- public FrameworkMBeanHandler(BundleContext context, Logger logger) {
- this.context = context;
+ public FrameworkMBeanHandler(JMXAgentContext agentContext) {
+ this.agentContext = agentContext;
+ this.context = agentContext.getBundleContext();
+ this.logger = agentContext.getLogger();
this.name = ObjectNameUtils.createFullObjectName(context, FrameworkMBean.OBJECTNAME);
- this.logger = logger;
}
/**
@@ -78,13 +80,14 @@ public class FrameworkMBeanHandler imple
} catch (NotCompliantMBeanException e) {
logger.log(LogService.LOG_ERROR, "Not compliant MBean", e);
}
+ agentContext.registerMBean(this);
}
/**
* @see org.apache.aries.jmx.MBeanHandler#close()
*/
public void close() {
- //not used
+ agentContext.unregisterMBean(this);
}
/**
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/PackageStateMBeanHandler.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/PackageStateMBeanHandler.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/PackageStateMBeanHandler.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/PackageStateMBeanHandler.java Mon Jun 30 16:54:57 2014
@@ -21,6 +21,7 @@ import javax.management.StandardMBean;
import org.apache.aries.jmx.Logger;
import org.apache.aries.jmx.MBeanHandler;
+import org.apache.aries.jmx.agent.JMXAgentContext;
import org.apache.aries.jmx.util.ObjectNameUtils;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@@ -39,6 +40,7 @@ import org.osgi.service.packageadmin.Pac
*/
public class PackageStateMBeanHandler implements MBeanHandler {
+ private JMXAgentContext agentContext;
private String name;
private StandardMBean mbean;
private BundleContext context;
@@ -46,14 +48,12 @@ public class PackageStateMBeanHandler im
/**
* Constructs new PackageStateMBeanHandler.
-S *
- * @param context bundle context of JMX bundle.
- * @param logger @see {@link Logger}.
*/
- public PackageStateMBeanHandler(BundleContext context, Logger logger) {
- this.context = context;
+ public PackageStateMBeanHandler(JMXAgentContext agentContext) {
+ this.agentContext = agentContext;
+ this.context = agentContext.getBundleContext();
+ this.logger = agentContext.getLogger();
this.name = ObjectNameUtils.createFullObjectName(context, PackageStateMBean.OBJECTNAME);
- this.logger = logger;
}
/**
@@ -75,13 +75,14 @@ S *
} catch (NotCompliantMBeanException e) {
logger.log(LogService.LOG_ERROR, "Not compliant MBean", e);
}
+ agentContext.registerMBean(this);
}
/**
* @see org.apache.aries.jmx.MBeanHandler#close()
*/
public void close() {
- //not used
+ agentContext.unregisterMBean(this);
}
/**
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandler.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandler.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandler.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandler.java Mon Jun 30 16:54:57 2014
@@ -23,6 +23,7 @@ import javax.management.StandardMBean;
import org.apache.aries.jmx.Logger;
import org.apache.aries.jmx.MBeanHandler;
+import org.apache.aries.jmx.agent.JMXAgentContext;
import org.apache.aries.jmx.util.ObjectNameUtils;
import org.apache.aries.jmx.util.shared.RegistrableStandardEmitterMBean;
import org.osgi.framework.BundleContext;
@@ -40,6 +41,7 @@ import org.osgi.service.log.LogService;
*/
public class ServiceStateMBeanHandler implements MBeanHandler {
+ private JMXAgentContext agentContext;
private String name;
private StandardMBean mbean;
private ServiceState serviceStateMBean;
@@ -47,9 +49,10 @@ public class ServiceStateMBeanHandler im
private Logger logger;
- public ServiceStateMBeanHandler(BundleContext bundleContext, Logger logger) {
- this.bundleContext = bundleContext;
- this.logger = logger;
+ public ServiceStateMBeanHandler(JMXAgentContext agentContext) {
+ this.agentContext = agentContext;
+ this.bundleContext = agentContext.getBundleContext();
+ this.logger = agentContext.getLogger();
this.name = ObjectNameUtils.createFullObjectName(bundleContext, OBJECTNAME);
}
@@ -63,6 +66,7 @@ public class ServiceStateMBeanHandler im
} catch (NotCompliantMBeanException e) {
logger.log(LogService.LOG_ERROR, "Failed to instantiate MBean for " + ServiceStateMBean.class.getName(), e);
}
+ agentContext.registerMBean(this);
}
/**
@@ -83,6 +87,7 @@ public class ServiceStateMBeanHandler im
* @see org.apache.aries.jmx.MBeanHandler#close()
*/
public void close() {
+ agentContext.unregisterMBean(this);
// ensure dispatcher is shutdown even if postDeRegister is not honored
if (serviceStateMBean != null) {
serviceStateMBean.shutDownDispatcher();
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/wiring/BundleWiringStateMBeanHandler.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/wiring/BundleWiringStateMBeanHandler.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/wiring/BundleWiringStateMBeanHandler.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/wiring/BundleWiringStateMBeanHandler.java Mon Jun 30 16:54:57 2014
@@ -21,6 +21,7 @@ import javax.management.StandardMBean;
import org.apache.aries.jmx.Logger;
import org.apache.aries.jmx.MBeanHandler;
+import org.apache.aries.jmx.agent.JMXAgentContext;
import org.apache.aries.jmx.util.ObjectNameUtils;
import org.apache.aries.jmx.util.shared.RegistrableStandardEmitterMBean;
import org.osgi.framework.BundleContext;
@@ -28,6 +29,8 @@ import org.osgi.jmx.framework.wiring.Bun
import org.osgi.service.log.LogService;
public class BundleWiringStateMBeanHandler implements MBeanHandler {
+
+ private JMXAgentContext agentContext;
private final String name;
private final BundleContext bundleContext;
private final Logger logger;
@@ -35,9 +38,10 @@ public class BundleWiringStateMBeanHandl
private StandardMBean mbean;
private BundleWiringState revisionsStateMBean;
- public BundleWiringStateMBeanHandler(BundleContext bundleContext, Logger logger) {
- this.bundleContext = bundleContext;
- this.logger = logger;
+ public BundleWiringStateMBeanHandler(JMXAgentContext agentContext) {
+ this.agentContext = agentContext;
+ this.bundleContext = agentContext.getBundleContext();
+ this.logger = agentContext.getLogger();
this.name = ObjectNameUtils.createFullObjectName(bundleContext, BundleWiringStateMBean.OBJECTNAME);
}
@@ -51,6 +55,7 @@ public class BundleWiringStateMBeanHandl
} catch (NotCompliantMBeanException e) {
logger.log(LogService.LOG_ERROR, "Failed to instantiate MBean for " + BundleWiringStateMBean.class.getName(), e);
}
+ agentContext.registerMBean(this);
}
/* (non-Javadoc)
@@ -65,7 +70,7 @@ public class BundleWiringStateMBeanHandl
* @see org.apache.aries.jmx.MBeanHandler#close()
*/
public void close() {
- // not used
+ agentContext.unregisterMBean(this);
}
/* (non-Javadoc)
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/CompendiumHandlerTest.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/CompendiumHandlerTest.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/CompendiumHandlerTest.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/CompendiumHandlerTest.java Mon Jun 30 16:54:57 2014
@@ -55,6 +55,9 @@ public class CompendiumHandlerTest {
Object service = new Object();
ServiceReference reference = mock(ServiceReference.class);
+ when(reference.getProperty(Constants.SERVICE_ID)).thenReturn(1L);
+ when(reference.getProperty(Constants.OBJECTCLASS)).thenReturn("the class");
+
BundleContext bundleContext = mock(BundleContext.class);
when(bundleContext.getProperty(Constants.FRAMEWORK_UUID)).thenReturn("some-uuid");
when(bundleContext.getService(reference)).thenReturn(service);
@@ -64,17 +67,12 @@ public class CompendiumHandlerTest {
JMXAgentContext agentContext = mock(JMXAgentContext.class);
when(agentContext.getBundleContext()).thenReturn(bundleContext);
when(agentContext.getLogger()).thenReturn(agentLogger);
- ExecutorService executor = Executors.newSingleThreadExecutor();
- when(agentContext.getRegistrationExecutor()).thenReturn(executor);
AbstractCompendiumHandler concreteHandler = new CompendiumHandler(agentContext, "org.osgi.service.Xxx");
target = spy(concreteHandler);
target.addingService(reference);
- executor.shutdown();
- executor.awaitTermination(2, TimeUnit.SECONDS);
-
//service only got once
verify(bundleContext).getService(reference);
//template method is invoked
@@ -89,26 +87,24 @@ public class CompendiumHandlerTest {
Object service = new Object();
ServiceReference reference = mock(ServiceReference.class);
+ when(reference.getProperty(Constants.SERVICE_ID)).thenReturn(1L);
+ when(reference.getProperty(Constants.OBJECTCLASS)).thenReturn("the class");
BundleContext bundleContext = mock(BundleContext.class);
Logger agentLogger = mock(Logger.class);
JMXAgentContext agentContext = mock(JMXAgentContext.class);
when(agentContext.getBundleContext()).thenReturn(bundleContext);
when(agentContext.getLogger()).thenReturn(agentLogger);
- ExecutorService executor = Executors.newSingleThreadExecutor();
- when(agentContext.getRegistrationExecutor()).thenReturn(executor);
AbstractCompendiumHandler concreteHandler = new CompendiumHandler(agentContext, "org.osgi.service.Xxx");
target = spy(concreteHandler);
+ target.trackedId.set(1);
String name = "osgi.compendium:service=xxx,version=1.0";
doReturn(name).when(target).getName();
target.removedService(reference, service);
- executor.shutdown();
- executor.awaitTermination(2, TimeUnit.SECONDS);
-
//service unget
verify(bundleContext).ungetService(reference);
//unregister is invoked on context
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanHandlerTest.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanHandlerTest.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanHandlerTest.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanHandlerTest.java Mon Jun 30 16:54:57 2014
@@ -22,6 +22,8 @@ import static org.mockito.Mockito.verify
import static org.mockito.Mockito.when;
import org.apache.aries.jmx.Logger;
+import org.apache.aries.jmx.agent.JMXAgent;
+import org.apache.aries.jmx.agent.JMXAgentContext;
import org.junit.Test;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
@@ -59,7 +61,10 @@ public class BundleStateMBeanHandlerTest
when(context.getServiceReference(StartLevel.class.getName())).thenReturn(startLevelRef);
when(context.getService(startLevelRef)).thenReturn(startLevel);
- BundleStateMBeanHandler handler = new BundleStateMBeanHandler(context, logger);
+ JMXAgent agent = mock(JMXAgent.class);
+ JMXAgentContext agentContext = new JMXAgentContext(context, agent, logger);
+
+ BundleStateMBeanHandler handler = new BundleStateMBeanHandler(agentContext);
handler.open();
assertNotNull(handler.getMbean());
Modified: aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandlerTest.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandlerTest.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandlerTest.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-core/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanHandlerTest.java Mon Jun 30 16:54:57 2014
@@ -21,6 +21,8 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.apache.aries.jmx.Logger;
+import org.apache.aries.jmx.agent.JMXAgent;
+import org.apache.aries.jmx.agent.JMXAgentContext;
import org.junit.Test;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
@@ -46,7 +48,10 @@ public class ServiceStateMBeanHandlerTes
when(mockSystemBundle.getSymbolicName()).thenReturn("the.sytem.bundle");
when(context.getBundle(0)).thenReturn(mockSystemBundle);
- ServiceStateMBeanHandler handler = new ServiceStateMBeanHandler(context, logger);
+ JMXAgent agent = mock(JMXAgent.class);
+ JMXAgentContext agentContext = new JMXAgentContext(context, agent, logger);
+
+ ServiceStateMBeanHandler handler = new ServiceStateMBeanHandler(agentContext);
handler.open();
assertNotNull(handler.getMbean());
Modified: aries/branches/subsystemsR6/jmx/jmx-itests/pom.xml
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-itests/pom.xml?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-itests/pom.xml (original)
+++ aries/branches/subsystemsR6/jmx/jmx-itests/pom.xml Mon Jun 30 16:54:57 2014
@@ -1,26 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
<!--
- 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.
+ 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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
<modelVersion>4.0.0</modelVersion>
+
<parent>
<groupId>org.apache.aries</groupId>
- <artifactId>java5-parent</artifactId>
- <version>1.0.0</version>
- <relativePath />
+ <artifactId>parent</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../../parent/pom.xml</relativePath>
</parent>
<groupId>org.apache.aries.jmx</groupId>
@@ -32,23 +37,42 @@
Integration tests for the JMX component (using the standalone composite jmx-bundle)
</description>
- <scm>
- <connection>scm:svn:http://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-itests</connection>
- <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-itests</developerConnection>
- <url>http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-itests</url>
- </scm>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-itests</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-itests</developerConnection>
+ <url>http://svn.apache.org/viewvc/aries/trunk/jmx/jmx-itests</url>
+ </scm>
+
+ <properties>
+ <exam.version>3.4.0</exam.version>
+ <url.version>1.6.0</url.version>
+ </properties>
<dependencies>
+ <!--
<dependency>
<groupId>org.apache.aries.jmx</groupId>
<artifactId>org.apache.aries.jmx</artifactId>
- <version>1.1.0</version>
+ <version>1.1.2-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ -->
+ <dependency>
+ <groupId>org.apache.aries.jmx</groupId>
+ <artifactId>org.apache.aries.jmx.api</artifactId>
+ <version>1.1.1-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.aries.jmx</groupId>
+ <artifactId>org.apache.aries.jmx.core</artifactId>
+ <version>1.1.2-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.aries.jmx</groupId>
<artifactId>org.apache.aries.jmx.blueprint</artifactId>
- <version>1.1.0</version>
+ <version>1.1.2-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -56,17 +80,13 @@
<artifactId>org.apache.aries.jmx.whiteboard</artifactId>
<version>1.1.0-SNAPSHOT</version>
</dependency>
+ <!--
<dependency>
<groupId>org.apache.aries.jmx</groupId>
<artifactId>org.apache.aries.jmx.core.whiteboard</artifactId>
- <version>1.1.0</version>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- <version>4.3.0</version>
- <scope>provided</scope>
+ <version>1.1.2-SNAPSHOT</version>
</dependency>
+ -->
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
@@ -75,9 +95,9 @@
<dependency>
<groupId>org.apache.aries.testsupport</groupId>
<artifactId>org.apache.aries.testsupport.unit</artifactId>
- <version>1.0.0</version>
+ <version>2.0.0-SNAPSHOT</version>
<scope>test</scope>
- </dependency>
+ </dependency>
<dependency>
<groupId>org.apache.aries.blueprint</groupId>
<artifactId>org.apache.aries.blueprint.sample</artifactId>
@@ -99,19 +119,19 @@
<dependency>
<groupId>org.apache.aries.proxy</groupId>
<artifactId>org.apache.aries.proxy</artifactId>
- <version>1.0.0</version>
+ <version>1.0.2-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
- <artifactId>asm-all</artifactId>
- <version>4.0</version>
+ <artifactId>asm-debug-all</artifactId>
+ <version>5.0.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.configadmin</artifactId>
- <version>1.2.4</version>
+ <version>1.8.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.felix</groupId>
@@ -135,41 +155,77 @@
<version>1.0.0</version>
<scope>test</scope>
</dependency>
+
+ <!-- pax exam -->
<dependency>
- <groupId>org.ops4j.pax.logging</groupId>
- <artifactId>pax-logging-api</artifactId>
- <scope>test</scope>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.7</version>
</dependency>
<dependency>
- <groupId>org.ops4j.pax.logging</groupId>
- <artifactId>pax-logging-service</artifactId>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam</artifactId>
+ <version>${exam.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.ops4j.pax.exam</groupId>
- <artifactId>pax-exam</artifactId>
+ <artifactId>pax-exam-container-forked</artifactId>
+ <version>${exam.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.ops4j.pax.exam</groupId>
- <artifactId>pax-exam-junit</artifactId>
+ <artifactId>pax-exam-junit4</artifactId>
+ <version>${exam.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.ops4j.pax.exam</groupId>
- <artifactId>pax-exam-container-default</artifactId>
+ <artifactId>pax-exam-link-mvn</artifactId>
+ <version>${exam.version}</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.ops4j.pax.swissbox</groupId>
- <artifactId>pax-swissbox-tinybundles</artifactId>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>org.ops4j.pax.url</groupId>
- <artifactId>pax-url-mvn</artifactId>
+ <artifactId>pax-url-aether</artifactId>
+ <version>${url.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-core</artifactId>
+ <version>0.9.29</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <version>0.9.29</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.ops4j.pax.tinybundles</groupId>
+ <artifactId>tinybundles</artifactId>
+ <version>2.0.0</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>org.osgi.core</artifactId>
+ <groupId>org.osgi</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse</groupId>
+ <artifactId>org.eclipse.osgi</artifactId>
+ <version>3.8.0.v20120529-1548</version>
</dependency>
- </dependencies>
+ </dependencies>
<build>
<plugins>
@@ -192,14 +248,6 @@
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>pertest</forkMode>
- <excludes>
- <exclude>**/*$*</exclude>
- <exclude>**/Abstract*.java</exclude>
- </excludes>
- <includes>
- <include>**/Test*.java</include>
- <include>**/*Test.java</include>
- </includes>
</configuration>
</plugin>
</plugins>
Modified: aries/branches/subsystemsR6/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/AbstractIntegrationTest.java
URL: http://svn.apache.org/viewvc/aries/branches/subsystemsR6/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/AbstractIntegrationTest.java?rev=1606837&r1=1606836&r2=1606837&view=diff
==============================================================================
--- aries/branches/subsystemsR6/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/AbstractIntegrationTest.java (original)
+++ aries/branches/subsystemsR6/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/AbstractIntegrationTest.java Mon Jun 30 16:54:57 2014
@@ -17,106 +17,197 @@
package org.apache.aries.jmx;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
+import static org.ops4j.pax.exam.CoreOptions.composite;
+import static org.ops4j.pax.exam.CoreOptions.junitBundles;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.provision;
+import static org.ops4j.pax.exam.CoreOptions.streamBundle;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+import static org.ops4j.pax.exam.CoreOptions.vmOption;
+import static org.ops4j.pax.exam.CoreOptions.when;
+import static org.ops4j.pax.tinybundles.core.TinyBundles.bundle;
+import static org.ops4j.pax.tinybundles.core.TinyBundles.withBnd;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
import java.util.Set;
+import javax.inject.Inject;
import javax.management.MBeanServer;
-import javax.management.MBeanServerFactory;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
-import org.junit.After;
-import org.junit.Before;
+import org.apache.aries.jmx.test.MbeanServerActivator;
import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.options.MavenArtifactProvisionOption;
+import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
+import org.ops4j.pax.exam.spi.reactors.PerClass;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
/**
* @version $Rev$ $Date$
*/
-@RunWith(JUnit4TestRunner.class)
-public class AbstractIntegrationTest extends org.apache.aries.itest.AbstractIntegrationTest {
-
- ServiceRegistration registration;
- ServiceReference reference;
+@RunWith(PaxExam.class)
+@ExamReactorStrategy(PerClass.class)
+public abstract class AbstractIntegrationTest extends org.apache.aries.itest.AbstractIntegrationTest {
+ protected ServiceReference reference;
+
+ @Inject
protected MBeanServer mbeanServer;
- @Before
- public void setUp() throws Exception {
- mbeanServer = MBeanServerFactory.createMBeanServer();
-
- registration = bundleContext.registerService(MBeanServer.class
- .getCanonicalName(), mbeanServer, null);
-
- String key = MBeanServer.class.getCanonicalName();
- System.out.println(key);
-
- reference = bundleContext.getServiceReference(key);
- assertNotNull(reference);
- MBeanServer mbeanService = (MBeanServer) bundleContext.getService(reference);
- assertNotNull(mbeanService);
-
- doSetUp();
- }
-
- /**
- * A hook for subclasses.
- *
- * @throws Exception
- */
- protected void doSetUp() throws Exception {}
+ public Option baseOptions() {
+ String localRepo = System.getProperty("maven.repo.local");
+ if (localRepo == null) {
+ localRepo = System.getProperty("org.ops4j.pax.url.mvn.localRepository");
+ }
+ return composite(
+ junitBundles(),
+ // this is how you set the default log level when using pax
+ // logging (logProfile)
+ systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"),
+ when(localRepo != null).useOptions(vmOption("-Dorg.ops4j.pax.url.mvn.localRepository=" + localRepo))
+ );
+ }
+
+ protected Option jmxRuntime() {
+ return composite(
+ baseOptions(),
+ mavenBundle("org.osgi", "org.osgi.compendium").versionAsInProject(),
+ mavenBundle("org.apache.aries", "org.apache.aries.util").versionAsInProject(),
+ mavenBundle("org.apache.felix", "org.apache.felix.configadmin").versionAsInProject(),
+ mavenBundle("org.apache.aries.jmx", "org.apache.aries.jmx").version("1.1.2-SNAPSHOT"),
+ mavenBundle("org.apache.aries.jmx", "org.apache.aries.jmx.core.whiteboard").version("1.1.2-SNAPSHOT"),
+ mavenBundle("org.apache.aries.jmx", "org.apache.aries.jmx.api").versionAsInProject(),
+ mavenBundle("org.apache.aries.jmx", "org.apache.aries.jmx.whiteboard").versionAsInProject(),
+ mavenBundle("org.apache.aries.testsupport", "org.apache.aries.testsupport.unit").versionAsInProject(),
+ mbeanServerBundle()
+ );
+ }
+
+ protected Option mbeanServerBundle() {
+ return provision(bundle()
+ .add(MbeanServerActivator.class)
+ .set(Constants.BUNDLE_ACTIVATOR, MbeanServerActivator.class.getName())
+ .build(withBnd()));
+ }
+
+ protected Option bundlea() {
+ return provision(bundle()
+ .add(org.apache.aries.jmx.test.bundlea.Activator.class)
+ .add(org.apache.aries.jmx.test.bundlea.api.InterfaceA.class)
+ .add(org.apache.aries.jmx.test.bundlea.impl.A.class)
+ .set(Constants.BUNDLE_SYMBOLICNAME, "org.apache.aries.jmx.test.bundlea")
+ .set(Constants.BUNDLE_VERSION, "2.0.0")
+ .set(Constants.EXPORT_PACKAGE, "org.apache.aries.jmx.test.bundlea.api;version=2.0.0")
+ .set(Constants.IMPORT_PACKAGE,
+ "org.osgi.framework;version=1.5.0,org.osgi.util.tracker,org.apache.aries.jmx.test.bundleb.api;version=1.1.0;resolution:=optional" +
+ ",org.osgi.service.cm")
+ .set(Constants.BUNDLE_ACTIVATOR,
+ org.apache.aries.jmx.test.bundlea.Activator.class.getName())
+ .build(withBnd()));
+ }
+
+ protected Option bundleb() {
+ return provision(bundle()
+ .add(org.apache.aries.jmx.test.bundleb.Activator.class)
+ .add(org.apache.aries.jmx.test.bundleb.api.InterfaceB.class)
+ .add(org.apache.aries.jmx.test.bundleb.api.MSF.class)
+ .add(org.apache.aries.jmx.test.bundleb.impl.B.class)
+ .set(Constants.BUNDLE_SYMBOLICNAME,"org.apache.aries.jmx.test.bundleb")
+ .set(Constants.BUNDLE_VERSION, "1.0.0")
+ .set(Constants.EXPORT_PACKAGE,"org.apache.aries.jmx.test.bundleb.api;version=1.1.0")
+ .set(Constants.IMPORT_PACKAGE,"org.osgi.framework;version=1.5.0,org.osgi.util.tracker," +
+ "org.osgi.service.cm,org.apache.aries.jmx.test.fragmentc")
+ .set(Constants.BUNDLE_ACTIVATOR,
+ org.apache.aries.jmx.test.bundleb.Activator.class.getName())
+ .build(withBnd()));
+ }
+
+ protected Option fragmentc() {
+ return streamBundle(bundle()
+ .add(org.apache.aries.jmx.test.fragmentc.C.class)
+ .set(Constants.BUNDLE_SYMBOLICNAME, "org.apache.aries.jmx.test.fragc")
+ .set(Constants.FRAGMENT_HOST, "org.apache.aries.jmx.test.bundlea")
+ .set(Constants.EXPORT_PACKAGE, "org.apache.aries.jmx.test.fragmentc")
+ .build(withBnd())).noStart();
+ }
+
+ protected Option bundled() {
+ return provision(bundle()
+ .set(Constants.BUNDLE_SYMBOLICNAME, "org.apache.aries.jmx.test.bundled")
+ .set(Constants.BUNDLE_VERSION, "3.0.0")
+ .set(Constants.REQUIRE_BUNDLE, "org.apache.aries.jmx.test.bundlea;bundle-version=2.0.0")
+ .build(withBnd()));
+ }
+
+ protected Option bundlee() {
+ return provision(bundle()
+ .set(Constants.BUNDLE_SYMBOLICNAME, "org.apache.aries.jmx.test.bundlee")
+ .set(Constants.BUNDLE_DESCRIPTION, "%desc")
+ .add("OSGI-INF/l10n/bundle.properties", getBundleProps("desc", "Description"))
+ .add("OSGI-INF/l10n/bundle_nl.properties", getBundleProps("desc", "Omschrijving"))
+ .build(withBnd()));
+ }
- @After
- public void tearDown() throws Exception {
- bundleContext.ungetService(reference);
- //plainRegistration.unregister();
+ private InputStream getBundleProps(String key, String value) {
+ try {
+ Properties p = new Properties();
+ p.put(key, value);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ p.store(baos, "");
+ return new ByteArrayInputStream(baos.toByteArray());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
-
- protected ObjectName waitForMBean(ObjectName name) throws Exception {
- return waitForMBean(name, 10);
+
+ protected ObjectName waitForMBean(String name) {
+ return waitForMBean(name, 20);
}
- protected ObjectName waitForMBean(ObjectName name, int timeoutInSeconds) throws Exception {
+ protected ObjectName waitForMBean(String name, int timeoutInSeconds) {
int i=0;
while (true) {
- ObjectName queryName = new ObjectName(name.toString() + ",*");
+ ObjectName queryName;
+ try {
+ queryName = new ObjectName(name.toString() + ",*");
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Invalid name " + name, e);
+ }
Set<ObjectName> result = mbeanServer.queryNames(queryName, null);
if (result.size() > 0)
return result.iterator().next();
- if (i == timeoutInSeconds)
- throw new Exception(name + " mbean is not available after waiting " + timeoutInSeconds + " seconds");
+ if (i == timeoutInSeconds * 10)
+ throw new RuntimeException(name + " mbean is not available after waiting " + timeoutInSeconds + " seconds");
i++;
- Thread.sleep(1000);
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ }
}
}
- @SuppressWarnings("unchecked")
protected <T> T getMBean(String name, Class<T> type) {
- ObjectName objectName = null;
- try {
- objectName = new ObjectName(name + ",*");
- } catch (Exception e) {
- fail(e.toString());
- }
- assertNotNull(mbeanServer);
- assertNotNull(objectName);
-
- Set<ObjectName> names = mbeanServer.queryNames(objectName, null);
- if (names.size() == 0) {
- fail("Object name not found: " + objectName);
- }
-
- T mbean = MBeanServerInvocationHandler.newProxyInstance(mbeanServer, names.iterator().next(),
- type, false);
- return mbean;
+ ObjectName objectName = waitForMBean(name);
+ return getMBean(objectName, type);
}
protected <T> T getMBean(ObjectName objectName, Class<T> type) {
- T mbean = MBeanServerInvocationHandler.newProxyInstance(mbeanServer, objectName, type, false);
- return mbean;
+ return MBeanServerInvocationHandler.newProxyInstance(mbeanServer, objectName, type, false);
+ }
+
+ protected Bundle getBundleByName(String symName) {
+ Bundle b = context().getBundleByName(symName);
+ assertNotNull("Bundle " + symName + "should be installed", b);
+ return b;
}
}
\ No newline at end of file