Author: cschneider Date: Mon Apr 2 11:54:26 2012 New Revision: 1308312 URL: http://svn.apache.org/viewvc?rev=1308312&view=rev Log: KARAF-1302 Showing the new whiteboard concept for jmx on the package mbean
Added: karaf/trunk/package/core/src/main/java/org/apache/karaf/packages/core/PackagesMBean.java karaf/trunk/package/core/src/main/java/org/apache/karaf/packages/core/internal/Packages.java karaf/trunk/package/core/src/test/java/org/apache/karaf/packages/core/InstallMBeantest.java Removed: karaf/trunk/package/management/ Modified: karaf/trunk/assemblies/features/standard/src/main/feature/feature.xml karaf/trunk/package/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml karaf/trunk/package/pom.xml karaf/trunk/pom.xml Modified: karaf/trunk/assemblies/features/standard/src/main/feature/feature.xml URL: http://svn.apache.org/viewvc/karaf/trunk/assemblies/features/standard/src/main/feature/feature.xml?rev=1308312&r1=1308311&r2=1308312&view=diff ============================================================================== --- karaf/trunk/assemblies/features/standard/src/main/feature/feature.xml (original) +++ karaf/trunk/assemblies/features/standard/src/main/feature/feature.xml Mon Apr 2 11:54:26 2012 @@ -94,7 +94,6 @@ <feature name="package" version="${project.version}" resolver="(obr)" description="Package commands and mbeans"> <bundle start-level="30">mvn:org.apache.karaf.package/org.apache.karaf.package.core/${project.version}</bundle> <bundle start-level="30">mvn:org.apache.karaf.package/org.apache.karaf.package.command/${project.version}</bundle> - <bundle start-level="30">mvn:org.apache.karaf.package/org.apache.karaf.package.management/${project.version}</bundle> </feature> <feature name="http" version="${project.version}" resolver="(obr)" description="Implementation of the OSGI HTTP Service"> @@ -183,6 +182,7 @@ <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.api/${aries.jmx.version}</bundle> <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.core/${aries.jmx.version}</bundle> <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.blueprint/${aries.jmx.version}</bundle> + <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.whiteboard/${aries.jmx.version}</bundle> <bundle start-level="30">mvn:org.apache.karaf.config/org.apache.karaf.config.management/${project.version}</bundle> </feature> Added: karaf/trunk/package/core/src/main/java/org/apache/karaf/packages/core/PackagesMBean.java URL: http://svn.apache.org/viewvc/karaf/trunk/package/core/src/main/java/org/apache/karaf/packages/core/PackagesMBean.java?rev=1308312&view=auto ============================================================================== --- karaf/trunk/package/core/src/main/java/org/apache/karaf/packages/core/PackagesMBean.java (added) +++ karaf/trunk/package/core/src/main/java/org/apache/karaf/packages/core/PackagesMBean.java Mon Apr 2 11:54:26 2012 @@ -0,0 +1,29 @@ +/* + * 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.karaf.packages.core; + +import javax.management.openmbean.TabularData; + +/** + * Package MBean. + */ +public interface PackagesMBean { + + TabularData getExports(); + TabularData getImports(); + +} Added: karaf/trunk/package/core/src/main/java/org/apache/karaf/packages/core/internal/Packages.java URL: http://svn.apache.org/viewvc/karaf/trunk/package/core/src/main/java/org/apache/karaf/packages/core/internal/Packages.java?rev=1308312&view=auto ============================================================================== --- karaf/trunk/package/core/src/main/java/org/apache/karaf/packages/core/internal/Packages.java (added) +++ karaf/trunk/package/core/src/main/java/org/apache/karaf/packages/core/internal/Packages.java Mon Apr 2 11:54:26 2012 @@ -0,0 +1,129 @@ +/* + * 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.karaf.packages.core.internal; + +import java.util.SortedMap; + +import javax.management.NotCompliantMBeanException; +import javax.management.StandardMBean; +import javax.management.openmbean.CompositeData; +import javax.management.openmbean.CompositeDataSupport; +import javax.management.openmbean.CompositeType; +import javax.management.openmbean.OpenDataException; +import javax.management.openmbean.OpenType; +import javax.management.openmbean.SimpleType; +import javax.management.openmbean.TabularData; +import javax.management.openmbean.TabularDataSupport; +import javax.management.openmbean.TabularType; + +import org.apache.karaf.packages.core.PackageRequirement; +import org.apache.karaf.packages.core.PackageService; +import org.apache.karaf.packages.core.PackageVersion; +import org.apache.karaf.packages.core.PackagesMBean; +import org.osgi.framework.Bundle; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Bundles MBean implementation. + */ +public class Packages extends StandardMBean implements PackagesMBean { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + private final PackageService packageService; + + public Packages(PackageService packageService) throws NotCompliantMBeanException { + super(PackagesMBean.class); + this.packageService = packageService; + } + + public TabularData getExports() { + try { + String[] names = new String[] {"Name", "Version", "ID", "Bundle Name"}; + CompositeType bundleType = new CompositeType("PackageExport", "Exported packages", names, + new String[] {"Package name", "Version of the Package", + "ID of the Bundle", "Bundle symbolic name"}, + new OpenType[] {SimpleType.STRING, SimpleType.STRING, + SimpleType.LONG, SimpleType.STRING}); + TabularType tableType = new TabularType("PackageExports", "Exported packages", bundleType, + new String[] {"Name", "Version", "ID"}); + TabularData table = new TabularDataSupport(tableType); + + SortedMap<String, PackageVersion> exports = packageService.getExports(); + + for (String key : exports.keySet()) { + PackageVersion export = exports.get(key); + for (Bundle bundle : export.getBundles()) { + Object[] data = new Object[] { + export.getPackageName(), + export.getVersion().toString(), + bundle.getBundleId(), + bundle.getSymbolicName()}; + CompositeData comp = new CompositeDataSupport(bundleType, names, data); + table.put(comp); + } + } + return table; + } catch (RuntimeException e) { + // To avoid the exception gets swallowed by jmx + log.error(e.getMessage(), e); + throw e; + } catch (OpenDataException e) { + log.error(e.getMessage(), e); + throw new RuntimeException(e.getMessage(), e); + } + } + + @Override + public TabularData getImports() { + try { + String[] names = new String[] {"PackageName", "Filter", "Optional", "ID", "Bundle Name", "Resolvable"}; + CompositeType bundleType = new CompositeType("PackageImports", "Imported packages", + names, + names, + new OpenType[] {SimpleType.STRING, SimpleType.STRING, SimpleType.BOOLEAN, + SimpleType.LONG, SimpleType.STRING, SimpleType.BOOLEAN}); + TabularType tableType = new TabularType("PackageImports", "Imported packages", bundleType, + new String[] {"Filter", "ID"}); + TabularData table = new TabularDataSupport(tableType); + + SortedMap<String, PackageRequirement> imports = packageService.getImports(); + + for (String key : imports.keySet()) { + PackageRequirement req = imports.get(key); + Object[] data = new Object[] { + req.getPackageName(), + req.getFilter(), + req.isOptional(), + req.getBundle().getBundleId(), + req.getBundle().getSymbolicName(), + req.isResolveable()}; + CompositeData comp = new CompositeDataSupport(bundleType, names, data); + table.put(comp); + } + return table; + } catch (RuntimeException e) { + // To avoid the exception gets swallowed by jmx + log.error(e.getMessage(), e); + throw e; + } catch (OpenDataException e) { + log.error(e.getMessage(), e); + throw new RuntimeException(e.getMessage(), e); + } + } + +} Modified: karaf/trunk/package/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml URL: http://svn.apache.org/viewvc/karaf/trunk/package/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml?rev=1308312&r1=1308311&r2=1308312&view=diff ============================================================================== --- karaf/trunk/package/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml (original) +++ karaf/trunk/package/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml Mon Apr 2 11:54:26 2012 @@ -17,11 +17,24 @@ limitations under the License. --> -<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> +<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" + xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"> + + <ext:property-placeholder/> <bean id="packageService" class="org.apache.karaf.packages.core.internal.PackageServiceImpl"> <argument ref="blueprintBundleContext"/> </bean> <service interface="org.apache.karaf.packages.core.PackageService" ref="packageService"/> + <bean id="packageMBean" class="org.apache.karaf.packages.core.internal.Packages"> + <argument ref="packageService" /> + </bean> + + <service interface="org.apache.karaf.packages.core.PackagesMBean" ref="packageMBean"> + <service-properties> + <entry key="jmx.objectname" value="org.apache.karaf:type=package,name=${karaf.name}"/> + </service-properties> + </service> + </blueprint> Added: karaf/trunk/package/core/src/test/java/org/apache/karaf/packages/core/InstallMBeantest.java URL: http://svn.apache.org/viewvc/karaf/trunk/package/core/src/test/java/org/apache/karaf/packages/core/InstallMBeantest.java?rev=1308312&view=auto ============================================================================== --- karaf/trunk/package/core/src/test/java/org/apache/karaf/packages/core/InstallMBeantest.java (added) +++ karaf/trunk/package/core/src/test/java/org/apache/karaf/packages/core/InstallMBeantest.java Mon Apr 2 11:54:26 2012 @@ -0,0 +1,24 @@ +package org.apache.karaf.packages.core; +import java.lang.management.ManagementFactory; + +import javax.management.MBeanServer; +import javax.management.ObjectName; + +import org.apache.karaf.packages.core.internal.Packages; +import org.junit.Test; + + +/** + * Checks that the PackagesmBean is valid and can be installed in the MBeanServer + * + */ +public class InstallMBeantest { + @Test + public void test() throws Exception { + MBeanServer server = ManagementFactory.getPlatformMBeanServer(); + Packages pack = new Packages(null); + ObjectName oName = new ObjectName("org.apache.karaf:type=package,name=root"); + server.registerMBean(pack, oName); + server.unregisterMBean(oName); + } +} Modified: karaf/trunk/package/pom.xml URL: http://svn.apache.org/viewvc/karaf/trunk/package/pom.xml?rev=1308312&r1=1308311&r2=1308312&view=diff ============================================================================== --- karaf/trunk/package/pom.xml (original) +++ karaf/trunk/package/pom.xml Mon Apr 2 11:54:26 2012 @@ -36,7 +36,6 @@ <modules> <module>core</module> <module>command</module> - <module>management</module> </modules> </project> Modified: karaf/trunk/pom.xml URL: http://svn.apache.org/viewvc/karaf/trunk/pom.xml?rev=1308312&r1=1308311&r2=1308312&view=diff ============================================================================== --- karaf/trunk/pom.xml (original) +++ karaf/trunk/pom.xml Mon Apr 2 11:54:26 2012 @@ -364,11 +364,6 @@ <artifactId>org.apache.karaf.package.command</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>org.apache.karaf.package</groupId> - <artifactId>org.apache.karaf.package.management</artifactId> - <version>${project.version}</version> - </dependency> <dependency> <groupId>org.apache.karaf.config</groupId>