You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2012/04/02 13:54:26 UTC

svn commit: r1308312 - in /karaf/trunk: ./ assemblies/features/standard/src/main/feature/ package/ package/core/src/main/java/org/apache/karaf/packages/core/ package/core/src/main/java/org/apache/karaf/packages/core/internal/ package/core/src/main/reso...

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>