Author: rmannibucau
Date: Sat Dec 24 13:00:23 2011
New Revision: 1222965

URL: http://svn.apache.org/viewvc?rev=1222965&view=rev
Log:
OPENEJB-1719 adding deploy and undeploy karaf commands

Added:
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/Deploy.java
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/DeployedBundles.java
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/DeploymentCommand.java
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/JndiOsgiCommand.java
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/ListEJBs.java
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/Undeploy.java
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/table/
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/table/Line.java
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/table/Lines.java
Removed:
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/DeployedBundles.java
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/ListEJBs.java
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/table/
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
    
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java
    
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/resources/OSGI-INF/blueprint/openejb-commands.xml

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java?rev=1222965&r1=1222964&r2=1222965&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
 Sat Dec 24 13:00:23 2011
@@ -19,7 +19,6 @@ package org.apache.openejb.assembler;
 import java.io.File;
 import java.io.IOException;
 import java.math.BigInteger;
-import java.net.URL;
 import java.security.SecureRandom;
 import java.util.Collection;
 import java.util.Map;
@@ -40,14 +39,14 @@ import org.apache.openejb.config.AppModu
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.DeploymentLoader;
 import org.apache.openejb.config.DeploymentModule;
-import org.apache.openejb.config.ValidationException;
 import org.apache.openejb.loader.SystemInstance;
-import org.apache.xbean.finder.ResourceFinder;
 
 @Stateless(name = "openejb/Deployer")
 @Remote(Deployer.class)
 @TransactionManagement(BEAN)
 public class DeployerEjb implements Deployer {
+    public static final String OPENEJB_DEPLOYER_FORCED_APP_ID_PROP = 
"openejb.deployer.forced.appId";
+
     private final static File uniqueFile;
 
     static {
@@ -147,6 +146,9 @@ public class DeployerEjb implements Depl
             }
 
             AppInfo appInfo = 
configurationFactory.configureApplication(appModule);
+            if (properties != null && 
properties.containsKey(OPENEJB_DEPLOYER_FORCED_APP_ID_PROP)) {
+                appInfo.appId = 
properties.getProperty(OPENEJB_DEPLOYER_FORCED_APP_ID_PROP);
+            }
             assembler.createApplication(appInfo);
 
             return appInfo;

Modified: 
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java?rev=1222965&r1=1222964&r2=1222965&view=diff
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java
 (original)
+++ 
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java
 Sat Dec 24 13:00:23 2011
@@ -126,6 +126,7 @@ public class Deployer implements BundleL
 
                     final ConfigurationFactory configurationFactory = new 
ConfigurationFactory();
                     final AppInfo appInfo = 
configurationFactory.configureApplication(appModule);
+                    appInfo.appId = "bundle_" + bundle.getBundleId();
 
                     final Assembler assembler = 
SystemInstance.get().getComponent(Assembler.class);
                     final AppContext appContext = 
assembler.createApplication(appInfo, osgiCl);

Added: 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/Deploy.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/Deploy.java?rev=1222965&view=auto
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/Deploy.java
 (added)
+++ 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/Deploy.java
 Sat Dec 24 13:00:23 2011
@@ -0,0 +1,25 @@
+package org.apache.openejb.karaf.command;
+
+import org.apache.felix.gogo.commands.Argument;
+import org.apache.felix.gogo.commands.Command;
+import org.apache.openejb.assembler.Deployer;
+
+import java.io.File;
+
+@Command(scope = "openejb", name = "deploy", description = "deploy a JEE 
file/directory")
+public class Deploy extends DeploymentCommand {
+    @Argument(index = 0, name = "path", description = "location of the archive 
file/directory", required = true, multiValued = false)
+    private String path;
+
+    @Override
+    protected Object doExecute() throws Exception {
+        if (!new File(path).exists()) {
+            System.out.println(path + " doesn't exist");
+            return null;
+        }
+
+        lookup(Deployer.class, "openejb/DeployerBusinessRemote").deploy(path, 
properties(path));
+
+        return null;
+    }
+}

Added: 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/DeployedBundles.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/DeployedBundles.java?rev=1222965&view=auto
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/DeployedBundles.java
 (added)
+++ 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/DeployedBundles.java
 Sat Dec 24 13:00:23 2011
@@ -0,0 +1,23 @@
+package org.apache.openejb.karaf.command;
+
+import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.openejb.core.osgi.impl.Deployer;
+import org.apache.openejb.karaf.console.table.Line;
+import org.apache.openejb.karaf.console.table.Lines;
+import org.osgi.framework.Bundle;
+
+@Command(scope = "openejb", name = "bundles", description = "Lists all 
deployed bundles")
+public class DeployedBundles extends OsgiCommandSupport {
+    @Override
+    protected Object doExecute() throws Exception {
+        Lines lines = new Lines();
+        lines.add(new Line("Id", "Symbolic name", "Version"));
+        for (Bundle bundle : Deployer.instance().deployedBundles()) {
+            lines.add(new Line(Long.toString(bundle.getBundleId()), 
bundle.getSymbolicName(), bundle.getVersion().toString()));
+        }
+
+        lines.print(System.out);
+        return null;
+    }
+}

Added: 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/DeploymentCommand.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/DeploymentCommand.java?rev=1222965&view=auto
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/DeploymentCommand.java
 (added)
+++ 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/DeploymentCommand.java
 Sat Dec 24 13:00:23 2011
@@ -0,0 +1,18 @@
+package org.apache.openejb.karaf.command;
+
+import org.apache.openejb.assembler.DeployerEjb;
+
+import java.io.File;
+import java.util.Properties;
+
+public abstract class DeploymentCommand extends JndiOsgiCommand {
+    protected Properties properties(final String path) {
+        final Properties properties = new Properties();
+        
properties.setProperty(DeployerEjb.OPENEJB_DEPLOYER_FORCED_APP_ID_PROP, 
moduleId(path));
+        return properties;
+    }
+
+    protected final String moduleId(String path) {
+        return path.replace("/", "_").replace(File.pathSeparatorChar, '_');
+    }
+}

Added: 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/JndiOsgiCommand.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/JndiOsgiCommand.java?rev=1222965&view=auto
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/JndiOsgiCommand.java
 (added)
+++ 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/JndiOsgiCommand.java
 Sat Dec 24 13:00:23 2011
@@ -0,0 +1,24 @@
+package org.apache.openejb.karaf.command;
+
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.openejb.localclient.LocalInitialContextFactory;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.util.Properties;
+
+public abstract class JndiOsgiCommand extends OsgiCommandSupport {
+    public <T> T lookup(final Class<T> clazz, final String jndiName) throws 
NamingException {
+        Properties p = new Properties();
+        p.setProperty(Context.INITIAL_CONTEXT_FACTORY, 
LocalInitialContextFactory.class.getName());
+
+        ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
+        
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+        try {
+            return (T) new InitialContext(p).lookup(jndiName);
+        } finally {
+            Thread.currentThread().setContextClassLoader(oldCl);
+        }
+    }
+}

Added: 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/ListEJBs.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/ListEJBs.java?rev=1222965&view=auto
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/ListEJBs.java
 (added)
+++ 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/ListEJBs.java
 Sat Dec 24 13:00:23 2011
@@ -0,0 +1,55 @@
+package org.apache.openejb.karaf.command;
+
+import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.karaf.console.table.Line;
+import org.apache.openejb.karaf.console.table.Lines;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+
+import java.util.Arrays;
+
+@Command(scope = "openejb", name = "list", description = "Lists all EJBs.")
+public class ListEJBs extends OsgiCommandSupport {
+    @Override
+    protected Object doExecute() throws Exception {
+        final ContainerSystem cs = 
SystemInstance.get().getComponent(ContainerSystem.class);
+        Lines lines = new Lines();
+        lines.add(new Line("Name", "Class", "Type"));
+        for (BeanContext bc : cs.deployments()) {
+            if (BeanContext.Comp.class.equals(bc.getBeanClass())) {
+                continue;
+            }
+
+            lines.add(new Line(bc.getEjbName(), bc.getBeanClass().getName(), 
getType(bc)));
+        }
+
+        lines.print(System.out);
+
+        return null;
+    }
+
+    private static String getType(final BeanContext bc) {
+        boolean empty = true;
+        final StringBuilder sb = new StringBuilder();
+        if (bc.isLocalbean()) {
+            sb.append("LocalBean[").append(bc.getBeanClass()).append("]");
+            empty = false;
+        }
+        if (bc.getBusinessLocalInterface() != null) {
+            if (!empty) {
+                sb.append(", ");
+            }
+            
sb.append("Local").append(Arrays.asList(bc.getBusinessLocalInterfaces()));
+            empty = false;
+        }
+        if (bc.getBusinessRemoteInterface() != null) {
+            if (!empty) {
+                sb.append(", ");
+            }
+            
sb.append("Remote").append(Arrays.asList(bc.getBusinessRemoteInterfaces()));
+        }
+        return sb.toString();
+    }
+}

Added: 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/Undeploy.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/Undeploy.java?rev=1222965&view=auto
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/Undeploy.java
 (added)
+++ 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/command/Undeploy.java
 Sat Dec 24 13:00:23 2011
@@ -0,0 +1,29 @@
+package org.apache.openejb.karaf.command;
+
+import org.apache.felix.gogo.commands.Argument;
+import org.apache.felix.gogo.commands.Command;
+import org.apache.openejb.AppContext;
+import org.apache.openejb.assembler.Deployer;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+
+@Command(scope = "openejb", name = "undeploy", description = "undeploy a JEE 
file/directory")
+public class Undeploy extends DeploymentCommand {
+    @Argument(index = 0, name = "path", description = "location of the archive 
file/directory", required = true, multiValued = false)
+    private String path;
+
+    @Override
+    protected Object doExecute() throws Exception {
+        final String moduleId = moduleId(path);
+        for (AppContext app : 
SystemInstance.get().getComponent(ContainerSystem.class).getAppContexts()) {
+            if (moduleId.equals(app.getId())) { // module id is used only to 
check the correct app is deployed
+                lookup(Deployer.class, 
"openejb/DeployerBusinessRemote").undeploy(path);
+                return null;
+            }
+        }
+
+        System.out.println(path + " application not found");
+
+        return null;
+    }
+}

Added: 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/table/Line.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/table/Line.java?rev=1222965&view=auto
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/table/Line.java
 (added)
+++ 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/table/Line.java
 Sat Dec 24 13:00:23 2011
@@ -0,0 +1,64 @@
+package org.apache.openejb.karaf.console.table;
+
+import java.io.PrintStream;
+
+public class Line {
+    public static final String COL_SEP = "|";
+    public static final String HEADER_CHAR = "=";
+    public static final String LINE_CHAR = "-";
+    public static final char EMPTY_CHAR = ' ';
+
+    private String[] columns;
+
+    public Line(String... columns) {
+        this.columns = columns;
+    }
+
+    public String[] getColumns() {
+        return columns;
+    }
+
+    public void print(final int[] max, final PrintStream out) {
+        print(max, out, false);
+    }
+
+    public void print(final int[] max, final PrintStream out, boolean header) {
+        final StringBuilder sb = new StringBuilder("");
+        for (int i = 0; i < max.length; i++) {
+            sb.append(EMPTY_CHAR);
+            int spaces = max[i] - columns[i].length();
+            for (int k = 0; k < spaces / 2; k++) {
+                sb.append(EMPTY_CHAR);
+            }
+            sb.append(columns[i]);
+            for (int k = 0; k < spaces - (spaces / 2); k++) {
+                sb.append(EMPTY_CHAR);
+            }
+            sb.append(EMPTY_CHAR).append(COL_SEP);
+        }
+
+        final String lineStr = sb.toString();
+
+        final StringBuilder sep = new StringBuilder("");
+        final String s;
+        if (header) {
+            s = HEADER_CHAR;
+        } else {
+            s = LINE_CHAR;
+        }
+        for (int i = 0; i < lineStr.length(); i++) {
+            sep.append(s);
+        }
+
+        if (header) {
+            printLine(out, sep.toString());
+        }
+
+        printLine(out, lineStr);
+        printLine(out, sep.toString());
+    }
+
+    private static void printLine(final PrintStream out, final String s) {
+        out.println(s);
+    }
+}

Added: 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/table/Lines.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/table/Lines.java?rev=1222965&view=auto
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/table/Lines.java
 (added)
+++ 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/java/org/apache/openejb/karaf/console/table/Lines.java
 Sat Dec 24 13:00:23 2011
@@ -0,0 +1,49 @@
+package org.apache.openejb.karaf.console.table;
+
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class Lines {
+    private List<Line> lines = new ArrayList<Line>();
+
+    public void add(Line line) {
+        if (!lines.isEmpty() && lines.iterator().next().getColumns().length != 
line.getColumns().length) {
+            throw new IllegalArgumentException("columns should have all the 
same size");
+        }
+        lines.add(line);
+    }
+
+    public void print(final PrintStream out) {
+        print(out, true);
+    }
+
+    public void print(final PrintStream out, boolean headers) {
+        final Iterator<Line> it = lines.iterator();
+        if (!it.hasNext()) {
+            return;
+        }
+
+        int[] max = max(lines);
+        it.next().print(max, out, headers);
+        while (it.hasNext()) {
+            it.next().print(max, out);
+        }
+    }
+
+    private static int[] max(final List<Line> lines) {
+        int[] max = new int[lines.iterator().next().getColumns().length];
+        for (Line line : lines) {
+            for (int i = 0; i < max.length; i++) {
+                int ll = line.getColumns()[i].length();
+                if (max[i] == 0) { // init
+                    max[i] = ll;
+                } else if (max[i] < ll) {
+                    max[i] = ll;
+                }
+            }
+        }
+        return max;
+    }
+}

Modified: 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/resources/OSGI-INF/blueprint/openejb-commands.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/resources/OSGI-INF/blueprint/openejb-commands.xml?rev=1222965&r1=1222964&r2=1222965&view=diff
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/resources/OSGI-INF/blueprint/openejb-commands.xml
 (original)
+++ 
openejb/trunk/openejb/osgi/openejb-karaf-commands/src/main/resources/OSGI-INF/blueprint/openejb-commands.xml
 Sat Dec 24 13:00:23 2011
@@ -2,10 +2,16 @@
 <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="openejb/list">
-      <action class="org.apache.openejb.karaf.ListEJBs"/>
+      <action class="org.apache.openejb.karaf.command.ListEJBs"/>
     </command>
     <command name="openejb/bundles">
-      <action class="org.apache.openejb.karaf.DeployedBundles"/>
+      <action class="org.apache.openejb.karaf.command.DeployedBundles"/>
+    </command>
+    <command name="openejb/deploy">
+      <action class="org.apache.openejb.karaf.command.Deploy"/>
+    </command>
+    <command name="openejb/undeploy">
+      <action class="org.apache.openejb.karaf.command.Undeploy"/>
     </command>
   </command-bundle>
 </blueprint>
\ No newline at end of file


Reply via email to