You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ff...@apache.org on 2012/10/29 05:07:13 UTC

svn commit: r1403170 - in /karaf/trunk/instance: command/src/main/java/org/apache/karaf/instance/command/ core/src/main/java/org/apache/karaf/instance/core/ core/src/main/java/org/apache/karaf/instance/core/internal/

Author: ffang
Date: Mon Oct 29 04:07:13 2012
New Revision: 1403170

URL: http://svn.apache.org/viewvc?rev=1403170&view=rev
Log:
[KARAF-1978]if use script to start a child instance then using karaf console admin:list can't get the instance correct status 

Modified:
    karaf/trunk/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java
    karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/Instance.java
    karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/InstanceService.java
    karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java
    karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java

Modified: karaf/trunk/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java
URL: http://svn.apache.org/viewvc/karaf/trunk/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java?rev=1403170&r1=1403169&r2=1403170&view=diff
==============================================================================
--- karaf/trunk/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java (original)
+++ karaf/trunk/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java Mon Oct 29 04:07:13 2012
@@ -31,6 +31,7 @@ public class ListCommand extends Instanc
     boolean javaOpts;
 
     protected Object doExecute() throws Exception {
+        getInstanceService().refreshInstance();
         Instance[] instances = getInstanceService().getInstances();
         ShellTable table = new ShellTable();
         table.column("SSH Port").alignRight();

Modified: karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/Instance.java
URL: http://svn.apache.org/viewvc/karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/Instance.java?rev=1403170&r1=1403169&r2=1403170&view=diff
==============================================================================
--- karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/Instance.java (original)
+++ karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/Instance.java Mon Oct 29 04:07:13 2012
@@ -59,4 +59,5 @@ public interface Instance {
 
     String getState() throws Exception;
 
+    boolean isAttached();
 }

Modified: karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/InstanceService.java
URL: http://svn.apache.org/viewvc/karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/InstanceService.java?rev=1403170&r1=1403169&r2=1403170&view=diff
==============================================================================
--- karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/InstanceService.java (original)
+++ karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/InstanceService.java Mon Oct 29 04:07:13 2012
@@ -22,6 +22,8 @@ public interface InstanceService {
 
     void renameInstance(String name, String newName, boolean printOutput) throws Exception;
 
+    void refreshInstance() throws Exception;
+
     Instance cloneInstance(String name, String cloneName, InstanceSettings settings, boolean printOutput) throws Exception;
 
     Instance[] getInstances();

Modified: karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java?rev=1403170&r1=1403169&r2=1403170&view=diff
==============================================================================
--- karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java (original)
+++ karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java Mon Oct 29 04:07:13 2012
@@ -422,4 +422,9 @@ public class InstanceImpl implements Ins
         }
     }
 
+    public boolean isAttached() {
+        return (process != null);
+    }
+
+
 }

Modified: karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java?rev=1403170&r1=1403169&r2=1403170&view=diff
==============================================================================
--- karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java (original)
+++ karaf/trunk/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java Mon Oct 29 04:07:13 2012
@@ -136,7 +136,38 @@ public class InstanceServiceImpl impleme
             LOGGER.warn("Unable to reload Karaf instance list", e);
         }
     }
+   
+    public synchronized void refreshInstance() throws Exception {
+        try {
+            File storageFile = new File(storageLocation, STORAGE_FILE);
+            if (!storageFile.isFile()) {
+                if (storageFile.exists()) {
+                    LOGGER.error("Instances storage location should be a file: " + storageFile);
+                }
+                return;
+            }
+            Properties storage = loadStorage(storageFile);
+            int count = Integer.parseInt(storage.getProperty("count", "0"));
+            for (int i = 0; i < count; i++) {
+                String name = storage.getProperty("item." + i + ".name", null);
+                int pid = Integer.parseInt(storage.getProperty("item." + i + ".pid", "0"));
+                if (name != null) {
+                    InstanceImpl instance = (InstanceImpl)instances.get(name);
+                    if (pid > 0 && instance != null && !instance.isAttached()) {
+                        try {
+                            instance.attach(pid);
+                        } catch (IOException e) {
+                            // Ignore
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            LOGGER.warn("Unable to reload Karaf instance list", e);
+        }
+    }
     
+ 
     private void logInfo(String message, boolean printOutput, Object... args) {
         if (LOGGER.isInfoEnabled() || printOutput) {
             String formatted = String.format(message, args);