Index: admin/core/src/main/java/org/apache/karaf/admin/internal/InstanceImpl.java =================================================================== --- admin/core/src/main/java/org/apache/karaf/admin/internal/InstanceImpl.java (revision 1072404) +++ admin/core/src/main/java/org/apache/karaf/admin/internal/InstanceImpl.java (working copy) @@ -172,6 +172,29 @@ } } + public int getRmiServerPort() { + InputStream is = null; + try { + File f = new File(location, "etc/org.apache.karaf.management.cfg"); + is = new FileInputStream(f); + Properties props = new Properties(); + props.load(is); + String loc = props.getProperty("rmiServerPort"); + return Integer.parseInt(loc); + } catch (Exception e) { + return 0; + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + // Ignore + } + } + } + } + + public void changeRmiRegistryPort(int port) throws Exception { checkProcess(); if (this.process != null) { @@ -194,6 +217,29 @@ } } + public void changeRmiServerPort(int port) throws Exception { + checkProcess(); + if (this.process != null) { + throw new IllegalStateException("Instance not stopped"); + } + Properties props = new Properties(); + File f = new File(location, "etc/org.apache.karaf.management.cfg"); + InputStream is = new FileInputStream(f); + try { + props.load(is); + } finally { + is.close(); + } + props.setProperty("rmiServerPort", Integer.toString(port)); + OutputStream os = new FileOutputStream(f); + try { + props.store(os, null); + } finally { + os.close(); + } + } + + public String getJavaOpts() { return javaOpts; } Index: admin/core/src/main/java/org/apache/karaf/admin/internal/AdminServiceImpl.java =================================================================== --- admin/core/src/main/java/org/apache/karaf/admin/internal/AdminServiceImpl.java (revision 1072404) +++ admin/core/src/main/java/org/apache/karaf/admin/internal/AdminServiceImpl.java (working copy) @@ -49,6 +49,8 @@ private int defaultRmiPortStart = 1099; + private int defaultRmiServerPortStart = 44444; + private File storageLocation; private long stopTimeout = 30000; @@ -150,6 +152,11 @@ if (rmiRegistryPort <= 0) { rmiRegistryPort = ++defaultRmiPortStart; } + int rmiServerPort = settings.getRmiServerPort(); + if (rmiServerPort <= 0) { + rmiServerPort = ++defaultRmiServerPortStart; + } + println(Ansi.ansi().a("Creating new instance on SSH port ").a(sshPort).a(" and RMI registry port ").a(rmiRegistryPort).a(" at: ").a(Ansi.Attribute.INTENSITY_BOLD).a(karafBase).a(Ansi.Attribute.RESET).toString()); mkdir(karafBase, "bin"); @@ -176,6 +183,7 @@ props.put("${SUBST-KARAF-BASE}", karafBase.getPath()); props.put("${SUBST-SSH-PORT}", Integer.toString(sshPort)); props.put("${SUBST-RMI-REGISTRY-PORT}", Integer.toString(rmiRegistryPort)); + props.put("${SUBST-RMI-SERVER-PORT}", Integer.toString(rmiServerPort)); copyFilteredResourceToDir(karafBase, "etc/system.properties", props); copyFilteredResourceToDir(karafBase, "etc/org.apache.karaf.shell.cfg", props); copyFilteredResourceToDir(karafBase, "etc/org.apache.karaf.management.cfg", props); Index: admin/core/src/main/java/org/apache/karaf/admin/Instance.java =================================================================== --- admin/core/src/main/java/org/apache/karaf/admin/Instance.java (revision 1072404) +++ admin/core/src/main/java/org/apache/karaf/admin/Instance.java (working copy) @@ -40,8 +40,12 @@ void changeSshPort(int port) throws Exception; int getRmiRegistryPort(); + + int getRmiServerPort(); void changeRmiRegistryPort(int port) throws Exception; + + void changeRmiServerPort(int port) throws Exception; String getJavaOpts(); Index: admin/core/src/main/java/org/apache/karaf/admin/InstanceSettings.java =================================================================== --- admin/core/src/main/java/org/apache/karaf/admin/InstanceSettings.java (revision 1072404) +++ admin/core/src/main/java/org/apache/karaf/admin/InstanceSettings.java (working copy) @@ -21,14 +21,16 @@ public class InstanceSettings { private final int sshPort; private final int rmiRegistryPort; + private final int rmiServerPort; private final String location; private final String javaOpts; private final List featureURLs; private final List features; - public InstanceSettings(int sshPort, int rmiRegistryPort, String location, String javaOpts, List featureURLs, List features) { + public InstanceSettings(int sshPort, int rmiRegistryPort, int rmiServerPort, String location, String javaOpts, List featureURLs, List features) { this.sshPort = sshPort; this.rmiRegistryPort = rmiRegistryPort; + this.rmiServerPort = rmiServerPort; this.location = location; this.javaOpts = javaOpts; this.featureURLs = featureURLs; @@ -42,6 +44,10 @@ public int getRmiRegistryPort() { return rmiRegistryPort; } + + public int getRmiServerPort() { + return rmiServerPort; + } public String getLocation() { return location; @@ -70,6 +76,7 @@ InstanceSettings is = (InstanceSettings) o; return is.sshPort == sshPort && is.rmiRegistryPort == rmiRegistryPort && + is.rmiServerPort == rmiServerPort && (location == null ? is.location == null : location.equals(is.location)) && (javaOpts == null ? is.javaOpts == null : javaOpts.equals(is.javaOpts)) && (featureURLs == null ? is.featureURLs == null : featureURLs.equals(is.featureURLs)) && @@ -78,7 +85,7 @@ @Override public int hashCode() { - int result = sshPort + rmiRegistryPort; + int result = sshPort + rmiRegistryPort + rmiServerPort; result = 31 * result + (location != null ? location.hashCode() : 0); result = 31 * result + (javaOpts != null ? javaOpts.hashCode() : 0); result = 31 * result + (featureURLs != null ? featureURLs.hashCode() : 0); Index: admin/core/src/main/resources/org/apache/karaf/admin/etc/org.apache.karaf.management.cfg =================================================================== --- admin/core/src/main/resources/org/apache/karaf/admin/etc/org.apache.karaf.management.cfg (revision 1072404) +++ admin/core/src/main/resources/org/apache/karaf/admin/etc/org.apache.karaf.management.cfg (working copy) @@ -19,7 +19,7 @@ # rmiRegistryPort = ${SUBST-RMI-REGISTRY-PORT} -rmiServerPort = 44444 +rmiServerPort = ${SUBST-RMI-SERVER-PORT} jmxRealm = karaf serviceUrl = service:jmx:rmi://localhost:${rmiServerPort}/jndi/rmi://localhost:${rmiRegistryPort}/karaf-${karaf.name} daemon = true Index: admin/core/src/test/java/org/apache/karaf/admin/internal/AdminServiceImplTest.java =================================================================== --- admin/core/src/test/java/org/apache/karaf/admin/internal/AdminServiceImplTest.java (revision 1072404) +++ admin/core/src/test/java/org/apache/karaf/admin/internal/AdminServiceImplTest.java (working copy) @@ -46,7 +46,7 @@ os.close(); } - InstanceSettings s = new InstanceSettings(8122, 1122, null, null, null, Arrays.asList("test")); + InstanceSettings s = new InstanceSettings(8122, 1122, 44455, null, null, null, Arrays.asList("test")); as.handleFeatures(f, s); Properties p2 = new Properties(); @@ -72,7 +72,7 @@ AdminServiceImpl service = new AdminServiceImpl(); service.setStorageLocation(new File("target/instances/" + System.currentTimeMillis())); - InstanceSettings settings = new InstanceSettings(8122, 1122, getName(), null, null, null); + InstanceSettings settings = new InstanceSettings(8122, 1122, 44455, getName(), null, null, null); Instance instance = service.createInstance(getName(), settings); assertFileExists(instance.getLocation(), "etc/config.properties"); @@ -97,7 +97,7 @@ AdminServiceImpl service = new AdminServiceImpl(); service.setStorageLocation(new File("target/instances/" + System.currentTimeMillis())); - InstanceSettings settings = new InstanceSettings(8122, 1122, getName(), null, null, null); + InstanceSettings settings = new InstanceSettings(8122, 1122, 44455, getName(), null, null, null); Instance instance = service.createInstance(getName(), settings); service.renameInstance(getName(), getName() + "b"); Index: admin/core/src/test/java/org/apache/karaf/admin/InstanceSettingsTest.java =================================================================== --- admin/core/src/test/java/org/apache/karaf/admin/InstanceSettingsTest.java (revision 1072404) +++ admin/core/src/test/java/org/apache/karaf/admin/InstanceSettingsTest.java (working copy) @@ -27,28 +27,29 @@ public class InstanceSettingsTest extends TestCase { public void testInstanceSettings() { InstanceSettings is = - new InstanceSettings(1, 1, null, null, Collections.emptyList(), Arrays.asList("hi")); + new InstanceSettings(1, 1, 2,null, null, Collections.emptyList(), Arrays.asList("hi")); assertEquals(1, is.getSshPort()); assertEquals(1, is.getRmiRegistryPort()); + assertEquals(2, is.getRmiServerPort()); Assert.assertNull(is.getLocation()); assertEquals(Arrays.asList("hi"), is.getFeatures()); assertEquals(0, is.getFeatureURLs().size()); } public void testEqualsHashCode() { - testEqualsHashCode(1, 1, "top", "foo", Collections.emptyList(), Arrays.asList("hi")); - testEqualsHashCode(0, 0, null, null, null, null); + testEqualsHashCode(1, 1, 2, "top", "foo", Collections.emptyList(), Arrays.asList("hi")); + testEqualsHashCode(0, 0, 1, null, null, null, null); } - private void testEqualsHashCode(int sshPort, int rmiPort, String location, String javaOpts, List featureURLs, List features) { - InstanceSettings is = new InstanceSettings(sshPort, rmiPort, location, javaOpts, featureURLs, features); - InstanceSettings is2 = new InstanceSettings(sshPort, rmiPort, location, javaOpts, featureURLs, features); + private void testEqualsHashCode(int sshPort, int rmiPort, int rmiServerPort, String location, String javaOpts, List featureURLs, List features) { + InstanceSettings is = new InstanceSettings(sshPort, rmiPort, rmiServerPort, location, javaOpts, featureURLs, features); + InstanceSettings is2 = new InstanceSettings(sshPort, rmiPort, rmiServerPort, location, javaOpts, featureURLs, features); assertEquals(is, is2); assertEquals(is.hashCode(), is2.hashCode()); } public void testEqualsHashCode2() { - InstanceSettings is = new InstanceSettings(1, 1, "top", "foo", Collections.emptyList(), Arrays.asList("hi")); + InstanceSettings is = new InstanceSettings(1, 1, 2, "top", "foo", Collections.emptyList(), Arrays.asList("hi")); Assert.assertFalse(is.equals(null)); Assert.assertFalse(is.equals(new Object())); assertEquals(is, is); Index: admin/management/src/main/java/org/apache/karaf/admin/management/AdminServiceMBean.java =================================================================== --- admin/management/src/main/java/org/apache/karaf/admin/management/AdminServiceMBean.java (revision 1072404) +++ admin/management/src/main/java/org/apache/karaf/admin/management/AdminServiceMBean.java (working copy) @@ -25,17 +25,19 @@ String INSTANCE_IS_ROOT = "Is Root"; String INSTANCE_SSH_PORT = "SSH Port"; String INSTANCE_RMI_PORT = "RMI Port"; + String INSTANCE_RMI_SERVER_PORT = "RMI Server Port"; String INSTANCE_STATE = "State"; String INSTANCE_LOCATION = "Location"; String INSTANCE_JAVAOPTS = "JavaOpts"; - String[] INSTANCE = {INSTANCE_PID, INSTANCE_NAME, INSTANCE_IS_ROOT, INSTANCE_SSH_PORT, INSTANCE_RMI_PORT, + String[] INSTANCE = {INSTANCE_PID, INSTANCE_NAME, INSTANCE_IS_ROOT, INSTANCE_SSH_PORT, INSTANCE_RMI_PORT, INSTANCE_RMI_SERVER_PORT, INSTANCE_STATE, INSTANCE_LOCATION, INSTANCE_JAVAOPTS }; // Operations - int createInstance(String name, int sshPort, int rmiPort, String location, String javaOpts, String features, String featureURLs) throws Exception; + int createInstance(String name, int sshPort, int rmiPort, int rmiServerPort, String location, String javaOpts, String features, String featureURLs) throws Exception; void changeSshPort(String name, int port) throws Exception; void changeRmiRegistryPort(String name, int port) throws Exception; + void changeRmiServerPort(String name, int port) throws Exception; void changeJavaOpts(String name, String javaopts) throws Exception; void destroyInstance(String name) throws Exception; void startInstance(String name, String opts) throws Exception; Index: admin/management/src/main/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImpl.java =================================================================== --- admin/management/src/main/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImpl.java (revision 1072404) +++ admin/management/src/main/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImpl.java (working copy) @@ -46,7 +46,7 @@ this.adminService = adminService; } - public int createInstance(String name, int sshPort, int rmiPort, String location, String javaOpts, String features, String featureURLs) + public int createInstance(String name, int sshPort, int rmiPort, int rmiServerPort, String location, String javaOpts, String features, String featureURLs) throws Exception { if ("".equals(location)) { location = null; @@ -55,7 +55,7 @@ javaOpts = null; } - InstanceSettings settings = new InstanceSettings(sshPort, rmiPort, location, javaOpts, + InstanceSettings settings = new InstanceSettings(sshPort, rmiPort, rmiServerPort, location, javaOpts, parseStringList(featureURLs), parseStringList(features)); Instance inst = adminService.createInstance(name, settings); @@ -74,6 +74,10 @@ getExistingInstance(name).changeRmiRegistryPort(port); } + public void changeRmiServerPort(String name, int port) throws Exception { + getExistingInstance(name).changeRmiServerPort(port); + } + public void changeJavaOpts(String name, String javaOpts) throws Exception { getExistingInstance(name).changeJavaOpts(javaOpts); } Index: admin/management/src/main/java/org/apache/karaf/admin/management/codec/JmxInstance.java =================================================================== --- admin/management/src/main/java/org/apache/karaf/admin/management/codec/JmxInstance.java (revision 1072404) +++ admin/management/src/main/java/org/apache/karaf/admin/management/codec/JmxInstance.java (working copy) @@ -55,13 +55,14 @@ itemValues[2] = instance.isRoot(); itemValues[3] = instance.getSshPort(); itemValues[4] = instance.getRmiRegistryPort(); + itemValues[5] = instance.getRmiServerPort(); try { - itemValues[5] = instance.getState(); + itemValues[6] = instance.getState(); } catch (Exception e) { - itemValues[5] = "Error"; + itemValues[6] = "Error"; } - itemValues[6] = instance.getLocation(); - itemValues[7] = instance.getJavaOpts(); + itemValues[7] = instance.getLocation(); + itemValues[8] = instance.getJavaOpts(); data = new CompositeDataSupport(INSTANCE, itemNames, itemValues); } catch (OpenDataException e) { @@ -91,14 +92,17 @@ itemTypes[4] = SimpleType.INTEGER; descriptions[4] = "The RMI registry port that can be used to manage the instance."; - itemTypes[5] = SimpleType.STRING; - descriptions[5] = "The state of the instance."; + itemTypes[5] = SimpleType.INTEGER; + descriptions[5] = "The RMI server port that can be used to manage the instance."; itemTypes[6] = SimpleType.STRING; - descriptions[6] = "The location of the instance."; + descriptions[6] = "The state of the instance."; itemTypes[7] = SimpleType.STRING; - descriptions[7] = "The java options of the instance."; + descriptions[7] = "The location of the instance."; + + itemTypes[8] = SimpleType.STRING; + descriptions[8] = "The java options of the instance."; return new CompositeType("Instance", desc, itemNames, descriptions, itemTypes); } catch (OpenDataException e) { Index: admin/management/src/main/resources/OSGI-INF/bundle.info =================================================================== --- admin/management/src/main/resources/OSGI-INF/bundle.info (revision 1072404) +++ admin/management/src/main/resources/OSGI-INF/bundle.info (working copy) @@ -16,6 +16,7 @@ \u001B[36mcreateInstance(name, sshPort, rmiPort, location, javaOpts, features, featureURLs)\u001B[0m Creates a new Karaf instance. \u001B[36mchangeSshPort(name, port)\u001B[0m Changes the SSH port number of an existing Karaf instance. \u001B[36mchangeRmiRegistryPort(name, port)\u001B[0m Changes the RMI registry port number of an existing Karaf instance. + \u001B[36mchangeRmiServerPort(name, port)\u001B[0m Changes the RMI server port number of an existing Karaf instance. \u001B[36mchangeJavaOpts(name, javaopts)\u001B[0m Changes the Java options of an existing Karaf instance. \u001B[36mdestroyInstance(name)\u001B[0m Destroys an existing Karaf instance. \u001B[36mstartInstance(name)\u001B[0m Starts an existing Karaf instance. Index: admin/management/src/test/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImplTest.java =================================================================== --- admin/management/src/test/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImplTest.java (revision 1072404) +++ admin/management/src/test/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImplTest.java (working copy) @@ -31,7 +31,7 @@ public class AdminServiceMBeanImplTest extends TestCase { public void testCreateInstance() throws Exception { - final InstanceSettings is = new InstanceSettings(123, 456, "somewhere", "someopts", + final InstanceSettings is = new InstanceSettings(123, 456, 44455, "somewhere", "someopts", Collections.emptyList(), Arrays.asList("webconsole", "funfeat")); final Instance inst = EasyMock.createMock(Instance.class); @@ -46,11 +46,11 @@ ab.setAdminService(as); Assert.assertSame(as, ab.getAdminService()); - assertEquals(42, ab.createInstance("t1", 123, 456, "somewhere", "someopts", " webconsole, funfeat", "")); + assertEquals(42, ab.createInstance("t1", 123, 456, 44455, "somewhere", "someopts", " webconsole, funfeat", "")); } public void testCreateInstance2() throws Exception { - final InstanceSettings is = new InstanceSettings(0, 0, null, null, + final InstanceSettings is = new InstanceSettings(0, 0, 0, null, null, Collections.emptyList(), Collections.emptyList()); AdminService as = EasyMock.createMock(AdminService.class); @@ -61,7 +61,7 @@ ab.setAdminService(as); Assert.assertSame(as, ab.getAdminService()); - assertEquals(-1, ab.createInstance("t1", 0, 0, "", "", "", "")); + assertEquals(-1, ab.createInstance("t1", 0, 0, 0, "", "", "", "")); } public void testGetInstances() throws Exception { @@ -69,6 +69,7 @@ EasyMock.expect(i1.getPid()).andReturn(1234); EasyMock.expect(i1.getSshPort()).andReturn(8818); EasyMock.expect(i1.getRmiRegistryPort()).andReturn(1122); + EasyMock.expect(i1.getRmiServerPort()).andReturn(44455); EasyMock.expect(i1.getName()).andReturn("i1"); EasyMock.expect(i1.isRoot()).andReturn(true); EasyMock.expect(i1.getLocation()).andReturn("somewhere"); @@ -94,6 +95,7 @@ Assert.assertTrue(cd1.containsValue(1234)); Assert.assertTrue(cd1.containsValue(8818)); Assert.assertTrue(cd1.containsValue(1122)); + Assert.assertTrue(cd1.containsValue(44455)); Assert.assertTrue(cd1.containsValue("somewhere")); Assert.assertTrue(cd1.containsValue("someopts")); Assert.assertTrue(cd1.containsValue("Stopped")); Index: admin/management/src/test/java/org/apache/karaf/admin/management/codec/JmxInstanceTest.java =================================================================== --- admin/management/src/test/java/org/apache/karaf/admin/management/codec/JmxInstanceTest.java (revision 1072404) +++ admin/management/src/test/java/org/apache/karaf/admin/management/codec/JmxInstanceTest.java (working copy) @@ -50,6 +50,7 @@ EasyMock.expect(i.isRoot()).andReturn(false); EasyMock.expect(i.getSshPort()).andReturn(0); EasyMock.expect(i.getRmiRegistryPort()).andReturn(0); + EasyMock.expect(i.getRmiServerPort()).andReturn(0); EasyMock.expect(i.getState()).andThrow(new Exception("gotcha")); EasyMock.expect(i.getLocation()).andReturn("somewhere"); EasyMock.expect(i.getJavaOpts()).andReturn("someopts"); @@ -66,6 +67,7 @@ Assert.assertEquals(false, cd.get("Is Root")); Assert.assertEquals(0, cd.get("SSH Port")); Assert.assertEquals(0, cd.get("RMI Port")); + Assert.assertEquals(0, cd.get("RMI Server Port")); Assert.assertEquals("Error", cd.get("State")); Assert.assertEquals("somewhere", cd.get("Location")); Assert.assertEquals("someopts", cd.get("JavaOpts")); @@ -78,6 +80,7 @@ EasyMock.expect(i.isRoot()).andReturn(true); EasyMock.expect(i.getSshPort()).andReturn(0); EasyMock.expect(i.getRmiRegistryPort()).andReturn(0); + EasyMock.expect(i.getRmiServerPort()).andReturn(0); EasyMock.expect(i.getState()).andReturn("Started"); EasyMock.expect(i.getLocation()).andReturn(null); EasyMock.expect(i.getJavaOpts()).andReturn(null); @@ -94,6 +97,7 @@ Assert.assertEquals(true, cd.get("Is Root")); Assert.assertEquals(0, cd.get("SSH Port")); Assert.assertEquals(0, cd.get("RMI Port")); + Assert.assertEquals(0, cd.get("RMI Server Port")); Assert.assertEquals("Started", cd.get("State")); Assert.assertNull(cd.get("Location")); Assert.assertNull(cd.get("JavaOpts")); Index: admin/command/src/main/java/org/apache/karaf/admin/main/Execute.java =================================================================== --- admin/command/src/main/java/org/apache/karaf/admin/main/Execute.java (revision 1072404) +++ admin/command/src/main/java/org/apache/karaf/admin/main/Execute.java (working copy) @@ -40,7 +40,8 @@ DestroyCommand.class, ListCommand.class, ChangeSshPortCommand.class, - ChangeRmiRegistryPortCommand.class}; + ChangeRmiRegistryPortCommand.class, + ChangeRmiServerPortCommand.class}; private static final Map> COMMANDS = new TreeMap>(); static { for (Class c : COMMAND_CLASSES) { Index: admin/command/src/main/java/org/apache/karaf/admin/command/ChangeRmiServerPortCommand.java =================================================================== --- admin/command/src/main/java/org/apache/karaf/admin/command/ChangeRmiServerPortCommand.java (revision 0) +++ admin/command/src/main/java/org/apache/karaf/admin/command/ChangeRmiServerPortCommand.java (revision 0) @@ -0,0 +1,36 @@ +/* + * 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.admin.command; + +import org.apache.felix.gogo.commands.Argument; +import org.apache.felix.gogo.commands.Command; + +@Command(scope = "admin", name = "change-rmi-server-port", description = "Changes the RMI server port (used by management layer) of an existing container instance.") +public class ChangeRmiServerPortCommand extends AdminCommandSupport { + + @Argument(index = 0, name = "name", description = "The name of the container instance", required = true, multiValued = false) + private String instance = null; + + @Argument(index = 1, name = "port", description = "The new RMI server port to set", required = true, multiValued = false) + private int port = 0; + + protected Object doExecute() throws Exception { + getExistingInstance(instance).changeRmiServerPort(port); + return null; + } + +} Index: admin/command/src/main/java/org/apache/karaf/admin/command/CreateCommand.java =================================================================== --- admin/command/src/main/java/org/apache/karaf/admin/command/CreateCommand.java (revision 1072404) +++ admin/command/src/main/java/org/apache/karaf/admin/command/CreateCommand.java (working copy) @@ -38,6 +38,9 @@ @Option(name = "-r", aliases = {"--rmi-port", "--rmi-registry-port"}, description = "Port number for RMI registry connection", required = false, multiValued = false) int rmiPort = 0; + @Option(name = "-rs", aliases = {"--rmi-server-port"}, description = "Port number for RMI server connection", required = false, multiValued = false) + int rmiServerPort = 0; + @Option(name = "-l", aliases = {"--location"}, description = "Location of the new container instance in the file system", required = false, multiValued = false) String location; @@ -56,7 +59,7 @@ String instance = null; protected Object doExecute() throws Exception { - InstanceSettings settings = new InstanceSettings(sshPort, rmiPort, location, javaOpts, featureURLs, features); + InstanceSettings settings = new InstanceSettings(sshPort, rmiPort, rmiServerPort, location, javaOpts, featureURLs, features); getAdminService().createInstance(instance, settings); return null; } Index: admin/command/src/main/resources/OSGI-INF/blueprint/admin-command.xml =================================================================== --- admin/command/src/main/resources/OSGI-INF/blueprint/admin-command.xml (revision 1072404) +++ admin/command/src/main/resources/OSGI-INF/blueprint/admin-command.xml (working copy) @@ -94,6 +94,15 @@ + + + + + + + + + Index: admin/command/src/test/java/org/apache/karaf/admin/command/CreateCommandTest.java =================================================================== --- admin/command/src/test/java/org/apache/karaf/admin/command/CreateCommandTest.java (revision 1072404) +++ admin/command/src/test/java/org/apache/karaf/admin/command/CreateCommandTest.java (working copy) @@ -34,6 +34,7 @@ cc.setAdminService(adminService); cc.sshPort = 9941; cc.rmiPort = 1122; + cc.rmiServerPort = 44447; cc.location = "top"; cc.javaOpts = "foo"; cc.features = Arrays.asList("abc", "def"); @@ -43,7 +44,7 @@ EasyMock.verify(adminService); // check precondition EasyMock.reset(adminService); InstanceSettings expectedIS = - new InstanceSettings(9941, 1122, "top", "foo", Collections.singletonList("http://something"), Arrays.asList("abc", "def")); + new InstanceSettings(9941, 1122, 44447, "top", "foo", Collections.singletonList("http://something"), Arrays.asList("abc", "def")); EasyMock.expect(adminService.createInstance("myInstance", expectedIS)).andReturn(null); EasyMock.replay(adminService); Index: webconsole/admin/src/main/java/org/apache/karaf/webconsole/admin/AdminPlugin.java =================================================================== --- webconsole/admin/src/main/java/org/apache/karaf/webconsole/admin/AdminPlugin.java (revision 1072404) +++ webconsole/admin/src/main/java/org/apache/karaf/webconsole/admin/AdminPlugin.java (working copy) @@ -113,11 +113,12 @@ } else if ("create".equals(action)) { int sshPort = parsePortNumber(req.getParameter("sshPort")); int rmiPort = parsePortNumber(req.getParameter("rmiPort")); + int rmiServerPort = parsePortNumber(req.getParameter("rmiServerPort")); String location = parseString(req.getParameter("location")); String javaOpts = parseString(req.getParameter("javaOpts")); List featureURLs = parseStringList(req.getParameter("featureURLs")); List features = parseStringList(req.getParameter("features")); - InstanceSettings settings = new InstanceSettings(sshPort, rmiPort, location, javaOpts, featureURLs, features); + InstanceSettings settings = new InstanceSettings(sshPort, rmiPort, rmiServerPort, location, javaOpts, featureURLs, features); success = createInstance(name, settings); } else if ("destroy".equals(action)) { success = destroyInstance(name); @@ -244,9 +245,9 @@ jw.value(instance.getRmiRegistryPort()); jw.key("state"); jw.value(instance.getState()); - jw.key("location"); - jw.value(instance.getJavaOpts() != null ? instance.getJavaOpts() : ""); jw.key("javaopts"); + jw.value(instance.getJavaOpts() != null ? instance.getJavaOpts() : ""); + jw.key("location"); jw.value(instance.getLocation()); jw.key("actions"); jw.array(); Index: webconsole/admin/src/main/resources/res/ui/admin.js =================================================================== --- webconsole/admin/src/main/resources/res/ui/admin.js (revision 1072404) +++ webconsole/admin/src/main/resources/res/ui/admin.js (working copy) @@ -29,6 +29,7 @@ "Name: " + "SSH Port: " + "RMI Port: " + + "RMI Server Port: " + "Location: " + "JavaOpts: " + "" + @@ -47,16 +48,17 @@ var name = document.getElementById( "name" ).value; var sshPort = document.getElementById( "sshPort" ).value; var rmiPort = document.getElementById("rmiPort").value; + var rmiServerPort = document.getElementById("rmiServerPort").value; var location = document.getElementById( "location" ).value; - var javaPpts = document.getElementById( "javaOpts" ).value; + var javaOpts = document.getElementById( "javaOpts" ).value; var features = document.getElementById( "features" ).value; var featureURLs = document.getElementById( "featureURLs" ).value; - postCreateInstance( name, sshPort, rmiPort, location, javaOpts, features, featureURLs ); + postCreateInstance( name, sshPort, rmiPort, rmiServerPort, location, javaOpts, features, featureURLs ); } -function postCreateInstance( /* String */ name, /* String */ sshPort, /* String */ rmiPort, /* String */ location, +function postCreateInstance( /* String */ name, /* String */ sshPort, /* String */ rmiPort, /* String */ rmiServerPort, /* String */ location, /* String */ javaOpts, /* String */ features, /* String */ featureURLs ) { - $.post( pluginRoot, {"action": "create", "name": name, "sshPort": sshPort, "rmiPort": rmiPort, "location": location, + $.post( pluginRoot, {"action": "create", "name": name, "sshPort": sshPort, "rmiPort": rmiPort, "rmiServerPort": rmiServerPort, "location": location, "javaOpts": javaOpts, "features": features, "featureURLs": featureURLs }, function( data ) { renderData( data ); }, "json" ); @@ -113,8 +115,8 @@ parent.appendChild( td( null, null, [ text( instance.sshPort ) ] ) ); parent.appendChild( td( null, null, [ text( instance.rmiPort ) ] ) ); parent.appendChild( td( null, null, [ text( instance.state ) ] ) ); - parent.appendChild( td( null, null, [ text( instance.location ) ] ) ); parent.appendChild( td( null, null, [ text( instance.javaOpts ) ] ) ); + parent.appendChild( td( null, null, [ text( instance.location ) ] ) ); var actionsTd = td( null, null ); var div = createElement( "div", null, { style: { Index: webconsole/admin/src/test/java/org/apache/karaf/webconsole/admin/AdminPluginTest.java =================================================================== --- webconsole/admin/src/test/java/org/apache/karaf/webconsole/admin/AdminPluginTest.java (revision 1072404) +++ webconsole/admin/src/test/java/org/apache/karaf/webconsole/admin/AdminPluginTest.java (working copy) @@ -54,7 +54,7 @@ public void testDoPostCreate() throws Exception { InstanceSettings is = - new InstanceSettings(1234, 5678, null, null, Collections.singletonList("http://someURL"), Arrays.asList("abc", "def")); + new InstanceSettings(1234, 5678, 44455, null, null, Collections.singletonList("http://someURL"), Arrays.asList("abc", "def")); AdminService adminService = EasyMock.createMock(AdminService.class); EasyMock.expect(adminService.createInstance("instance1", is)).andReturn(null); EasyMock.expect(adminService.getInstances()).andReturn(new Instance[] {}).anyTimes(); @@ -68,6 +68,7 @@ params.put("name", "instance1"); params.put("sshPort", "1234"); params.put("rmiPort", "5678"); + params.put("rmiServerPort","44455"); params.put("featureURLs", "http://someURL"); params.put("features", "abc,def"); HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);