You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2011/04/27 01:20:08 UTC

svn commit: r1096955 - in /geronimo/server/trunk/framework/modules/geronimo-kernel: ./ src/main/java/org/apache/geronimo/kernel/command/ src/main/java/org/apache/geronimo/kernel/config/ src/main/resources/OSGI-INF/ src/main/resources/OSGI-INF/blueprint/

Author: djencks
Date: Tue Apr 26 23:20:08 2011
New Revision: 1096955

URL: http://svn.apache.org/viewvc?rev=1096955&view=rev
Log:
Add a gbeans:list console command.  Don't stop gbeans that successfully started in a configuration

Added:
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/KernelCommandSupport.java   (with props)
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/ListGBeansCommand.java   (with props)
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/resources/OSGI-INF/
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/resources/OSGI-INF/blueprint/
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/resources/OSGI-INF/blueprint/kernel-command.xml   (with props)
Modified:
    geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationUtil.java

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml?rev=1096955&r1=1096954&r2=1096955&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/pom.xml Tue Apr 26 23:20:08 2011
@@ -80,6 +80,12 @@
             <groupId>org.apache.xbean</groupId>
             <artifactId>xbean-reflect</artifactId>
         </dependency>
+        <!-- commands -->
+        <dependency>
+            <groupId>org.apache.karaf.shell</groupId>
+            <artifactId>org.apache.karaf.shell.console</artifactId>
+            <scope>provided</scope>
+        </dependency>
 
         <!--<dependency>-->
             <!--<groupId>org.apache.geronimo.specs</groupId>-->

Added: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/KernelCommandSupport.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/KernelCommandSupport.java?rev=1096955&view=auto
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/KernelCommandSupport.java (added)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/KernelCommandSupport.java Tue Apr 26 23:20:08 2011
@@ -0,0 +1,57 @@
+/*
+ * 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.geronimo.kernel.command;
+
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public abstract class KernelCommandSupport extends OsgiCommandSupport {
+
+    protected Object doExecute() throws Exception {
+        // Get repository admin service.
+        ServiceReference ref = getBundleContext().getServiceReference(Kernel.class.getName());
+        if (ref == null) {
+            System.out.println("FeaturesService service is unavailable.");
+            return null;
+        }
+        try {
+            Kernel admin = (Kernel) getBundleContext().getService(ref);
+            if (admin == null) {
+                System.out.println("FeaturesService service is unavailable.");
+                return null;
+            }
+
+            doExecute(admin);
+        }
+        finally {
+            getBundleContext().ungetService(ref);
+        }
+        return null;
+    }
+
+
+    protected abstract void doExecute(Kernel kernel) throws Exception;
+
+}

Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/KernelCommandSupport.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/KernelCommandSupport.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/KernelCommandSupport.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/ListGBeansCommand.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/ListGBeansCommand.java?rev=1096955&view=auto
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/ListGBeansCommand.java (added)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/ListGBeansCommand.java Tue Apr 26 23:20:08 2011
@@ -0,0 +1,116 @@
+/*
+ * 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.geronimo.kernel.command;
+
+import java.net.URI;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.felix.gogo.commands.Command;
+import org.apache.felix.gogo.commands.Option;
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.gbean.AbstractNameQuery;
+import org.apache.geronimo.gbean.GBeanData;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GReferenceInfo;
+import org.apache.geronimo.gbean.ReferencePatterns;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.management.State;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+@Command(scope = "gbeans", name = "list", description = "Lists all gbeans in the kernel.")
+public class ListGBeansCommand extends KernelCommandSupport {
+
+    @Option(name = "-q", aliases = {"--query"}, description = "Abstract name query URI", required = false, multiValued = false)
+    String queryString = "";
+
+    @Option(name = "-v", aliases = {"--verbose"}, description = "Show the state reason for non-running gbeans", required = false, multiValued = false)
+    boolean verbose;
+
+    @Override
+    protected void doExecute(Kernel kernel) throws Exception {
+        AbstractNameQuery query = new AbstractNameQuery(URI.create(queryString));
+        Collection<AbstractName> names = kernel.listGBeans(query);
+        if (names.isEmpty()) {
+            System.out.println("No gbeans found in kernel");
+            return;
+        }
+
+        LinkedHashMap<AbstractName, Integer> states = new LinkedHashMap<AbstractName, Integer>();
+
+        for (AbstractName name: names) {
+            states.put(name, kernel.getGBeanState(name));
+        }
+        StringBuilder buf = new StringBuilder("State      Name:\n");
+        for (Map.Entry<AbstractName, Integer> entry: states.entrySet()) {
+            AbstractName name = entry.getKey();
+            int state = entry.getValue();
+            buf.append("[").append(State.fromInt(state)).append("]   ").append(name).append("\n");
+            if (verbose) {
+                if (state == State.FAILED_INDEX) {
+                    buf.append("  state reason: ").append(kernel.getStateReason(name)).append("\n\n");
+                } else if (state == State.STOPPED_INDEX) {
+                    GBeanData data = kernel.getGBeanData(name);
+                    if (!data.getDependencies().isEmpty()) {
+                        buf.append(" non-running dependendencies:\n");
+                        for (ReferencePatterns pattern : data.getDependencies()) {
+                            if (pattern.isResolved()) {
+                                AbstractName dependencyName = pattern.getAbstractName();
+                                if (states.get(dependencyName) != State.RUNNING_INDEX) {
+                                    buf.append("   state: ").append(states.get(dependencyName)).append(" resolved: ").append(dependencyName).append("\n");
+                                }
+                            } else {
+                                buf.append("  unresolved: ").append(pattern).append("\n");
+                            }
+                        }
+                    }
+                    if (!data.getReferences().isEmpty()) {
+                        GBeanInfo info = data.getGBeanInfo();
+                        buf.append("  non-running references:\n");
+                        for (Map.Entry<String, ReferencePatterns> refEntry : data.getReferences().entrySet()) {
+                            ReferencePatterns pattern = refEntry.getValue();
+                            GReferenceInfo refInfo = info.getReference(refEntry.getKey());
+                            boolean multivalued = refInfo.getProxyType().equals(Collection.class.getName());
+                            if (!multivalued) {
+                                if (pattern.isResolved()) {
+                                    AbstractName dependencyName = pattern.getAbstractName();
+                                    if (states.get(dependencyName) != State.RUNNING_INDEX) {
+                                        buf.append("   state: [").append(State.fromInt(states.get(dependencyName))).append("] resolved: ").append(dependencyName).append("\n");
+                                    }
+                                } else {
+                                    buf.append("  unresolved: ").append(pattern).append("\n");
+                                }
+                            }
+                        }
+
+                    }
+                }
+            }
+        }
+
+        System.out.println(buf.toString());
+
+    }
+}

Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/ListGBeansCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/ListGBeansCommand.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/command/ListGBeansCommand.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationUtil.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationUtil.java?rev=1096955&r1=1096954&r2=1096955&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationUtil.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationUtil.java Tue Apr 26 23:20:08 2011
@@ -528,15 +528,15 @@ public final class ConfigurationUtil {
                 ConfigurationUtil.startConfigurationGBeans(childConfiguration, kernel);
             }
         } catch (Throwable e) {
-            for (AbstractName gbeanName : started) {
-                try {
-                    kernel.stopGBean(gbeanName);
-                } catch (GBeanNotFoundException ignored) {
-                } catch (IllegalStateException ignored) {
-                } catch (InternalKernelException kernelException) {
-                    log.debug("Error cleaning up after failed start of configuration " + configuration.getId() + " gbean " + gbeanName, kernelException);
-                }
-            }
+//            for (AbstractName gbeanName : started) {
+//                try {
+//                    kernel.stopGBean(gbeanName);
+//                } catch (GBeanNotFoundException ignored) {
+//                } catch (IllegalStateException ignored) {
+//                } catch (InternalKernelException kernelException) {
+//                    log.debug("Error cleaning up after failed start of configuration " + configuration.getId() + " gbean " + gbeanName, kernelException);
+//                }
+//            }
             if (e instanceof Error) {
                 throw (Error) e;
             }

Added: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/resources/OSGI-INF/blueprint/kernel-command.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/resources/OSGI-INF/blueprint/kernel-command.xml?rev=1096955&view=auto
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/resources/OSGI-INF/blueprint/kernel-command.xml (added)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/resources/OSGI-INF/blueprint/kernel-command.xml Tue Apr 26 23:20:08 2011
@@ -0,0 +1,29 @@
+<?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.
+
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
+
+    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
+        <command name="gbean/list">
+            <action class="org.apache.geronimo.kernel.command.ListGBeansCommand"/>
+        </command>
+    </command-bundle>
+
+
+</blueprint>

Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/resources/OSGI-INF/blueprint/kernel-command.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/resources/OSGI-INF/blueprint/kernel-command.xml
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/resources/OSGI-INF/blueprint/kernel-command.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml