FELIX-1766: Refactor and enable AdminServiceMBean
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@828802 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/karaf/shell/admin/NOTICE b/karaf/admin/command/NOTICE
similarity index 100%
copy from karaf/shell/admin/NOTICE
copy to karaf/admin/command/NOTICE
diff --git a/karaf/admin/command/pom.xml b/karaf/admin/command/pom.xml
new file mode 100644
index 0000000..6a67a21
--- /dev/null
+++ b/karaf/admin/command/pom.xml
@@ -0,0 +1,102 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <!--
+
+ 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.
+ -->
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>admin</artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>org.apache.felix.karaf.admin.command</artifactId>
+ <packaging>bundle</packaging>
+ <version>1.1.0-SNAPSHOT</version>
+ <name>Apache Felix Karaf :: Admin Command</name>
+
+ <properties>
+ <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>org.apache.felix.karaf.admin.core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.felix.karaf.shell</groupId>
+ <artifactId>org.apache.felix.karaf.shell.console</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-jdk14</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymockclassextension</artifactId>
+ <version>${easymock.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
+ <Export-Package>${pom.artifactId}*;version=${pom.version}</Export-Package>
+ <Import-Package>
+ !${pom.artifactId}*,
+ javax.management,
+ javax.management.loading,
+ org.osgi.service.command,
+ org.apache.felix.gogo.commands,
+ org.apache.felix.karaf.shell.console,
+ *
+ </Import-Package>
+ <Private-Package>!*</Private-Package>
+ <_versionpolicy>${bnd.version.policy}</_versionpolicy>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/AdminCommandSupport.java b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/AdminCommandSupport.java
similarity index 86%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/AdminCommandSupport.java
rename to karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/AdminCommandSupport.java
index edfa425..617d1db 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/AdminCommandSupport.java
+++ b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/AdminCommandSupport.java
@@ -14,12 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal.commands;
+package org.apache.felix.karaf.admin.command;
-import org.apache.felix.karaf.shell.admin.AdminService;
-import org.apache.felix.karaf.shell.admin.Instance;
+import org.apache.felix.karaf.admin.AdminService;
+import org.apache.felix.karaf.admin.Instance;
import org.apache.felix.karaf.shell.console.OsgiCommandSupport;
-import org.apache.felix.gogo.commands.Command;
public abstract class AdminCommandSupport extends OsgiCommandSupport {
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/ChangePortCommand.java b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/ChangePortCommand.java
similarity index 95%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/ChangePortCommand.java
rename to karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/ChangePortCommand.java
index b632742..e096399 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/ChangePortCommand.java
+++ b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/ChangePortCommand.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal.commands;
+package org.apache.felix.karaf.admin.command;
import org.apache.felix.gogo.commands.Argument;
import org.apache.felix.gogo.commands.Command;
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/ConnectCommand.java b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/ConnectCommand.java
similarity index 96%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/ConnectCommand.java
rename to karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/ConnectCommand.java
index e5f2da6..bf48a72 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/ConnectCommand.java
+++ b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/ConnectCommand.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal.commands;
+package org.apache.felix.karaf.admin.command;
import org.apache.felix.gogo.commands.Option;
import org.apache.felix.gogo.commands.Argument;
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/CreateCommand.java b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/CreateCommand.java
similarity index 94%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/CreateCommand.java
rename to karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/CreateCommand.java
index 194be21..a512fcb 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/CreateCommand.java
+++ b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/CreateCommand.java
@@ -14,14 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal.commands;
+package org.apache.felix.karaf.admin.command;
import java.util.List;
import org.apache.felix.gogo.commands.Argument;
import org.apache.felix.gogo.commands.Command;
import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.karaf.shell.admin.InstanceSettings;
+import org.apache.felix.karaf.admin.InstanceSettings;
/**
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/DestroyCommand.java b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/DestroyCommand.java
similarity index 95%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/DestroyCommand.java
rename to karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/DestroyCommand.java
index a15edc9..88919cb 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/DestroyCommand.java
+++ b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/DestroyCommand.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal.commands;
+package org.apache.felix.karaf.admin.command;
import org.apache.felix.gogo.commands.Argument;
import org.apache.felix.gogo.commands.Command;
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/ListCommand.java b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/ListCommand.java
similarity index 95%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/ListCommand.java
rename to karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/ListCommand.java
index aacb030..bf15909 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/ListCommand.java
+++ b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/ListCommand.java
@@ -14,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal.commands;
+package org.apache.felix.karaf.admin.command;
import org.apache.felix.gogo.commands.Option;
import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.karaf.shell.admin.Instance;
+import org.apache.felix.karaf.admin.Instance;
/**
* List available instances
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/StartCommand.java b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/StartCommand.java
similarity index 95%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/StartCommand.java
rename to karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/StartCommand.java
index 125a4a7..c14947c 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/StartCommand.java
+++ b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/StartCommand.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal.commands;
+package org.apache.felix.karaf.admin.command;
import org.apache.felix.gogo.commands.Option;
import org.apache.felix.gogo.commands.Argument;
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/StopCommand.java b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/StopCommand.java
similarity index 95%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/StopCommand.java
rename to karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/StopCommand.java
index 5e0e078..1ad5789 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/StopCommand.java
+++ b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/StopCommand.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal.commands;
+package org.apache.felix.karaf.admin.command;
import org.apache.felix.gogo.commands.Argument;
import org.apache.felix.gogo.commands.Command;
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/completers/InstanceCompleter.java b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/completers/InstanceCompleter.java
similarity index 90%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/completers/InstanceCompleter.java
rename to karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/completers/InstanceCompleter.java
index 57c8db4..467989f 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/completers/InstanceCompleter.java
+++ b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/command/completers/InstanceCompleter.java
@@ -14,12 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal.completers;
+package org.apache.felix.karaf.admin.command.completers;
import java.util.List;
-import org.apache.felix.karaf.shell.admin.AdminService;
-import org.apache.felix.karaf.shell.admin.Instance;
+import org.apache.felix.karaf.admin.AdminService;
+import org.apache.felix.karaf.admin.Instance;
import org.apache.felix.karaf.shell.console.completer.StringsCompleter;
import org.apache.felix.karaf.shell.console.Completer;
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/main/Execute.java b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/main/Execute.java
similarity index 85%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/main/Execute.java
rename to karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/main/Execute.java
index 997277e..5466d7c 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/main/Execute.java
+++ b/karaf/admin/command/src/main/java/org/apache/felix/karaf/admin/main/Execute.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.main;
+package org.apache.felix.karaf.admin.main;
import java.io.File;
import java.util.ArrayList;
@@ -26,14 +26,14 @@
import org.apache.felix.gogo.commands.Action;
import org.apache.felix.gogo.commands.Command;
import org.apache.felix.gogo.commands.basic.DefaultActionPreparator;
-import org.apache.felix.karaf.shell.admin.internal.AdminServiceImpl;
-import org.apache.felix.karaf.shell.admin.internal.commands.AdminCommandSupport;
-import org.apache.felix.karaf.shell.admin.internal.commands.CreateCommand;
-import org.apache.felix.karaf.shell.admin.internal.commands.DestroyCommand;
-import org.apache.felix.karaf.shell.admin.internal.commands.ListCommand;
-import org.apache.felix.karaf.shell.admin.internal.commands.StartCommand;
-import org.apache.felix.karaf.shell.admin.internal.commands.StopCommand;
-import org.apache.felix.karaf.shell.admin.internal.commands.ChangePortCommand;
+import org.apache.felix.karaf.admin.command.AdminCommandSupport;
+import org.apache.felix.karaf.admin.command.ChangePortCommand;
+import org.apache.felix.karaf.admin.command.CreateCommand;
+import org.apache.felix.karaf.admin.command.DestroyCommand;
+import org.apache.felix.karaf.admin.command.ListCommand;
+import org.apache.felix.karaf.admin.command.StartCommand;
+import org.apache.felix.karaf.admin.command.StopCommand;
+import org.apache.felix.karaf.admin.internal.AdminServiceImpl;
import org.fusesource.jansi.AnsiConsole;
public class Execute {
@@ -42,7 +42,7 @@
CreateCommand.class,
StartCommand.class,
StopCommand.class,
- DestroyCommand.class,
+ DestroyCommand.class,
ListCommand.class,
ChangePortCommand.class};
private static final Map<String, Class<?>> COMMANDS = new TreeMap<String, Class<?>>();
diff --git a/karaf/shell/admin/src/main/resources/OSGI-INF/blueprint/shell-admin.xml b/karaf/admin/command/src/main/resources/OSGI-INF/blueprint/admin-command.xml
similarity index 70%
rename from karaf/shell/admin/src/main/resources/OSGI-INF/blueprint/shell-admin.xml
rename to karaf/admin/command/src/main/resources/OSGI-INF/blueprint/admin-command.xml
index c79983f..e2c7a6b 100644
--- a/karaf/shell/admin/src/main/resources/OSGI-INF/blueprint/shell-admin.xml
+++ b/karaf/admin/command/src/main/resources/OSGI-INF/blueprint/admin-command.xml
@@ -23,12 +23,12 @@
<command-bundle xmlns="http://felix.apache.org/karaf/xmlns/shell/v1.0.0">
<command name="admin/create">
- <action class="org.apache.felix.karaf.shell.admin.internal.commands.CreateCommand">
+ <action class="org.apache.felix.karaf.admin.command.CreateCommand">
<property name="adminService" ref="adminService" />
</action>
</command>
<command name="admin/connect">
- <action class="org.apache.felix.karaf.shell.admin.internal.commands.ConnectCommand">
+ <action class="org.apache.felix.karaf.admin.command.ConnectCommand">
<property name="adminService" ref="adminService" />
</action>
<completers>
@@ -37,12 +37,12 @@
</completers>
</command>
<command name="admin/list">
- <action class="org.apache.felix.karaf.shell.admin.internal.commands.ListCommand">
+ <action class="org.apache.felix.karaf.admin.command.ListCommand">
<property name="adminService" ref="adminService" />
</action>
</command>
<command name="admin/start">
- <action class="org.apache.felix.karaf.shell.admin.internal.commands.StartCommand">
+ <action class="org.apache.felix.karaf.admin.command.StartCommand">
<property name="adminService" ref="adminService" />
</action>
<completers>
@@ -51,7 +51,7 @@
</completers>
</command>
<command name="admin/stop">
- <action class="org.apache.felix.karaf.shell.admin.internal.commands.StopCommand">
+ <action class="org.apache.felix.karaf.admin.command.StopCommand">
<property name="adminService" ref="adminService" />
</action>
<completers>
@@ -60,7 +60,7 @@
</completers>
</command>
<command name="admin/destroy">
- <action class="org.apache.felix.karaf.shell.admin.internal.commands.DestroyCommand">
+ <action class="org.apache.felix.karaf.admin.command.DestroyCommand">
<property name="adminService" ref="adminService" />
</action>
<completers>
@@ -69,7 +69,7 @@
</completers>
</command>
<command name="admin/change-port">
- <action class="org.apache.felix.karaf.shell.admin.internal.commands.ChangePortCommand">
+ <action class="org.apache.felix.karaf.admin.command.ChangePortCommand">
<property name="adminService" ref="adminService" />
</action>
<completers>
@@ -79,17 +79,10 @@
</command>
</command-bundle>
- <bean id="adminService" class="org.apache.felix.karaf.shell.admin.internal.AdminServiceImpl" init-method="init">
- <property name="storageLocation" value="${karaf.home}/instances" />
- </bean>
+ <reference id="adminService" interface="org.apache.felix.karaf.admin.AdminService" />
- <bean id="instanceCompleter" class="org.apache.felix.karaf.shell.admin.internal.completers.InstanceCompleter">
+ <bean id="instanceCompleter" class="org.apache.felix.karaf.admin.command.completers.InstanceCompleter">
<property name="adminService" ref="adminService" />
</bean>
- <service ref="adminService" interface="org.apache.felix.karaf.shell.admin.AdminService" />
-
- <!-- Allow the use of system properties -->
- <ext:property-placeholder />
-
</blueprint>
diff --git a/karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/internal/commands/CreateCommandTest.java b/karaf/admin/command/src/test/java/org/apache/felix/karaf/admin/command/CreateCommandTest.java
similarity index 89%
rename from karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/internal/commands/CreateCommandTest.java
rename to karaf/admin/command/src/test/java/org/apache/felix/karaf/admin/command/CreateCommandTest.java
index 53cffce..b467713 100644
--- a/karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/internal/commands/CreateCommandTest.java
+++ b/karaf/admin/command/src/test/java/org/apache/felix/karaf/admin/command/CreateCommandTest.java
@@ -14,15 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal.commands;
+package org.apache.felix.karaf.admin.command;
import java.util.Arrays;
import java.util.Collections;
import junit.framework.TestCase;
-import org.apache.felix.karaf.shell.admin.AdminService;
-import org.apache.felix.karaf.shell.admin.InstanceSettings;
+import org.apache.felix.karaf.admin.AdminService;
+import org.apache.felix.karaf.admin.InstanceSettings;
import org.easymock.EasyMock;
public class CreateCommandTest extends TestCase {
@@ -40,7 +40,7 @@
EasyMock.verify(adminService); // check precondition
EasyMock.reset(adminService);
- InstanceSettings expectedIS =
+ InstanceSettings expectedIS =
new InstanceSettings(9941, "top", Collections.singletonList("http://something"), Arrays.asList("abc", "def"));
EasyMock.expect(adminService.createInstance("myInstance", expectedIS)).andReturn(null);
EasyMock.replay(adminService);
diff --git a/karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/main/ExecuteTest.java b/karaf/admin/command/src/test/java/org/apache/felix/karaf/admin/main/ExecuteTest.java
similarity index 95%
rename from karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/main/ExecuteTest.java
rename to karaf/admin/command/src/test/java/org/apache/felix/karaf/admin/main/ExecuteTest.java
index 7e4fc1a..268549b 100644
--- a/karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/main/ExecuteTest.java
+++ b/karaf/admin/command/src/test/java/org/apache/felix/karaf/admin/main/ExecuteTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.main;
+package org.apache.felix.karaf.admin.main;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -28,9 +28,9 @@
import junit.framework.TestCase;
-import org.apache.felix.karaf.shell.admin.AdminService;
-import org.apache.felix.karaf.shell.admin.internal.AdminServiceImpl;
-import org.apache.felix.karaf.shell.admin.internal.commands.AdminCommandSupport;
+import org.apache.felix.karaf.admin.AdminService;
+import org.apache.felix.karaf.admin.command.AdminCommandSupport;
+import org.apache.felix.karaf.admin.internal.AdminServiceImpl;
import org.easymock.IAnswer;
import org.easymock.classextension.EasyMock;
diff --git a/karaf/shell/admin/NOTICE b/karaf/admin/core/NOTICE
similarity index 100%
rename from karaf/shell/admin/NOTICE
rename to karaf/admin/core/NOTICE
diff --git a/karaf/shell/admin/pom.xml b/karaf/admin/core/pom.xml
similarity index 83%
rename from karaf/shell/admin/pom.xml
rename to karaf/admin/core/pom.xml
index c0ecde3..86bff82 100644
--- a/karaf/shell/admin/pom.xml
+++ b/karaf/admin/core/pom.xml
@@ -21,20 +21,16 @@
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>org.apache.felix.karaf.shell</groupId>
- <artifactId>shell</artifactId>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>admin</artifactId>
<version>1.1.0-SNAPSHOT</version>
</parent>
- <groupId>org.apache.felix.karaf.shell</groupId>
- <artifactId>org.apache.felix.karaf.shell.admin</artifactId>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>org.apache.felix.karaf.admin.core</artifactId>
<packaging>bundle</packaging>
<version>1.1.0-SNAPSHOT</version>
- <name>Apache Felix Karaf :: Shell Admin</name>
-
- <description>
- Provides administration commands
- </description>
+ <name>Apache Felix Karaf :: Admin Core</name>
<properties>
<appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
@@ -42,11 +38,6 @@
<dependencies>
<dependency>
- <groupId>org.apache.felix.karaf.shell</groupId>
- <artifactId>org.apache.felix.karaf.shell.console</artifactId>
- </dependency>
-
- <dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.osgi.core</artifactId>
<scope>provided</scope>
@@ -59,21 +50,38 @@
</dependency>
<dependency>
- <groupId>org.ops4j.pax.logging</groupId>
- <artifactId>pax-logging-api</artifactId>
- <scope>test</scope>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.bundlerepository</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.felix.karaf.shell</groupId>
+ <artifactId>org.apache.felix.karaf.shell.console</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.felix.karaf.shell</groupId>
+ <artifactId>org.apache.felix.karaf.shell.obr</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.osgi</groupId>
+ <artifactId>spring-osgi-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.junit</artifactId>
<scope>test</scope>
</dependency>
-
<dependency>
<groupId>org.easymock</groupId>
- <artifactId>easymockclassextension</artifactId>
- <version>${easymock.version}</version>
+ <artifactId>easymock</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-jdk14</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
@@ -86,15 +94,6 @@
<include>**/*</include>
</includes>
</resource>
- <!--
- <resource>
- <directory>${pom.basedir}/src/main/filtered-resources</directory>
- <filtering>true</filtering>
- <includes>
- <include>**/*</include>
- </includes>
- </resource>
- -->
</resources>
<filters>
<filter>target/filter.txt</filter>
@@ -145,7 +144,7 @@
<goal>copy-resources</goal>
</goals>
<configuration>
- <outputDirectory>${basedir}/target/classes/org/apache/felix/karaf/shell/admin/etc</outputDirectory>
+ <outputDirectory>${basedir}/target/classes/org/apache/felix/karaf/admin/etc</outputDirectory>
<resources>
<resource>
<directory>../../assembly/src/main/distribution/text/etc/</directory>
@@ -170,7 +169,7 @@
<goal>copy-resources</goal>
</goals>
<configuration>
- <outputDirectory>${basedir}/target/classes/org/apache/felix/karaf/shell/admin/etc</outputDirectory>
+ <outputDirectory>${basedir}/target/classes/org/apache/felix/karaf/admin/etc</outputDirectory>
<resources>
<resource>
<directory>../../assembly/src/main/filtered-resources/etc</directory>
@@ -184,29 +183,31 @@
</configuration>
</execution>
</executions>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>exec-maven-plugin</artifactId>
- <configuration>
- <mainClass>Main</mainClass>
- </configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
- <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
- <Export-Package>${pom.artifactId}*;version=${project.version}</Export-Package>
+ <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
+ <Export-Package>
+ org.apache.felix.karaf.admin;version=${pom.version},
+ org.apache.felix.karaf.jpm;version=${pom.version}
+ </Export-Package>
<Import-Package>
- !${pom.artifactId}*,
+ !org.apache.felix.karaf.admin,
+ !org.apache.felix.karaf.jpm,
+ javax.management,
+ javax.management.loading,
org.osgi.service.command,
org.apache.felix.gogo.commands,
org.apache.felix.karaf.shell.console,
*
</Import-Package>
- <Private-Package>org.apache.felix.karaf.jpm.*</Private-Package>
+ <Private-Package>
+ org.apache.felix.karaf.admin.internal,
+ org.apache.felix.karaf.jpm.impl
+ </Private-Package>
<_versionpolicy>${bnd.version.policy}</_versionpolicy>
</instructions>
</configuration>
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/AdminService.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/AdminService.java
similarity index 95%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/AdminService.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/AdminService.java
index 138f45b..e8d1cb5 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/AdminService.java
+++ b/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/AdminService.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin;
+package org.apache.felix.karaf.admin;
public interface AdminService {
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/Instance.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/Instance.java
similarity index 96%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/Instance.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/Instance.java
index 61f642e..4f267c7 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/Instance.java
+++ b/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/Instance.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin;
+package org.apache.felix.karaf.admin;
public interface Instance {
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/InstanceSettings.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/InstanceSettings.java
similarity index 97%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/InstanceSettings.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/InstanceSettings.java
index b8a9c01..832e24f 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/InstanceSettings.java
+++ b/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/InstanceSettings.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin;
+package org.apache.felix.karaf.admin;
import java.util.List;
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceImpl.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/AdminServiceImpl.java
similarity index 97%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceImpl.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/AdminServiceImpl.java
index efb4d1a..df8d155 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceImpl.java
+++ b/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/AdminServiceImpl.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal;
+package org.apache.felix.karaf.admin.internal;
import java.io.File;
import java.io.FileInputStream;
@@ -29,9 +29,9 @@
import java.util.Properties;
import java.util.Scanner;
-import org.apache.felix.karaf.shell.admin.AdminService;
-import org.apache.felix.karaf.shell.admin.Instance;
-import org.apache.felix.karaf.shell.admin.InstanceSettings;
+import org.apache.felix.karaf.admin.AdminService;
+import org.apache.felix.karaf.admin.Instance;
+import org.apache.felix.karaf.admin.InstanceSettings;
import org.fusesource.jansi.Ansi;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -227,7 +227,7 @@
File outFile = new File(target, resource);
if( !outFile.exists() ) {
println(Ansi.ansi().a("Creating file: ").a(Ansi.Attribute.INTENSITY_BOLD).a(outFile.getPath()).a(Ansi.Attribute.RESET).toString());
- InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/felix/karaf/shell/admin/" + resource);
+ InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/felix/karaf/admin/" + resource);
try {
if( text ) {
// Read it line at a time so that we can use the platform line ending when we write it out.
@@ -267,7 +267,7 @@
File outFile = new File(target, resource);
if( !outFile.exists() ) {
println(Ansi.ansi().a("Creating file: ").a(Ansi.Attribute.INTENSITY_BOLD).a(outFile.getPath()).a(Ansi.Attribute.RESET).toString());
- InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/felix/karaf/shell/admin/" + resource);
+ InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/felix/karaf/admin/" + resource);
try {
// Read it line at a time so that we can use the platform line ending when we write it out.
PrintStream out = new PrintStream(new FileOutputStream(outFile));
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/InstanceImpl.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/InstanceImpl.java
similarity index 98%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/InstanceImpl.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/InstanceImpl.java
index 33ad649..40a76a5 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/InstanceImpl.java
+++ b/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/InstanceImpl.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal;
+package org.apache.felix.karaf.admin.internal;
import java.io.File;
import java.io.FileInputStream;
@@ -26,7 +26,7 @@
import java.net.Socket;
import java.util.Properties;
-import org.apache.felix.karaf.shell.admin.Instance;
+import org.apache.felix.karaf.admin.Instance;
import org.apache.felix.karaf.jpm.Process;
import org.apache.felix.karaf.jpm.ProcessBuilderFactory;
import org.apache.felix.karaf.jpm.impl.ScriptUtils;
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/Process.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/Process.java
similarity index 100%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/Process.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/Process.java
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/ProcessBuilder.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/ProcessBuilder.java
similarity index 100%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/ProcessBuilder.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/ProcessBuilder.java
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/ProcessBuilderFactory.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/ProcessBuilderFactory.java
similarity index 97%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/ProcessBuilderFactory.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/ProcessBuilderFactory.java
index 06b3539..6c4980c 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/ProcessBuilderFactory.java
+++ b/karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/ProcessBuilderFactory.java
@@ -16,6 +16,8 @@
*/
package org.apache.felix.karaf.jpm;
+import java.lang.*;
+
import org.apache.felix.karaf.jpm.impl.ProcessBuilderFactoryImpl;
/**
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessBuilderFactoryImpl.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessBuilderFactoryImpl.java
similarity index 100%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessBuilderFactoryImpl.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessBuilderFactoryImpl.java
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessBuilderImpl.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessBuilderImpl.java
similarity index 94%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessBuilderImpl.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessBuilderImpl.java
index fb11d60..c6b622e 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessBuilderImpl.java
+++ b/karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessBuilderImpl.java
@@ -42,7 +42,7 @@
return ProcessImpl.create(dir, command);
}
- public org.apache.felix.karaf.jpm.Process attach(int pid) throws IOException {
+ public Process attach(int pid) throws IOException {
return ProcessImpl.attach(pid);
}
}
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessImpl.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessImpl.java
similarity index 97%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessImpl.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessImpl.java
index 8974f59..27dec49 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessImpl.java
+++ b/karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/impl/ProcessImpl.java
@@ -103,7 +103,7 @@
return 0;
}
- public static org.apache.felix.karaf.jpm.Process create(File dir, String command) throws IOException {
+ public static Process create(File dir, String command) throws IOException {
//File input = File.createTempFile("jpm.", ".input");
//File output = File.createTempFile("jpm.", ".output");
//File error = File.createTempFile("jpm.", ".error");
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/impl/ScriptUtils.java b/karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/impl/ScriptUtils.java
similarity index 100%
rename from karaf/shell/admin/src/main/java/org/apache/felix/karaf/jpm/impl/ScriptUtils.java
rename to karaf/admin/core/src/main/java/org/apache/felix/karaf/jpm/impl/ScriptUtils.java
diff --git a/karaf/admin/core/src/main/resources/OSGI-INF/blueprint/admin-core.xml b/karaf/admin/core/src/main/resources/OSGI-INF/blueprint/admin-core.xml
new file mode 100644
index 0000000..f68a106
--- /dev/null
+++ b/karaf/admin/core/src/main/resources/OSGI-INF/blueprint/admin-core.xml
@@ -0,0 +1,33 @@
+<?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"
+ xmlns:ext="http://geronimo.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
+ default-activation="lazy">
+
+ <bean id="adminService" class="org.apache.felix.karaf.admin.internal.AdminServiceImpl" init-method="init">
+ <property name="storageLocation" value="${karaf.home}/instances" />
+ </bean>
+
+ <service ref="adminService" interface="org.apache.felix.karaf.admin.AdminService" />
+
+ <!-- Allow the use of system properties -->
+ <ext:property-placeholder />
+
+</blueprint>
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/karaf b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/karaf
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/karaf
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/karaf
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/karaf.bat b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/karaf.bat
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/karaf.bat
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/karaf.bat
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/start b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/start
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/start
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/start
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/start.bat b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/start.bat
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/start.bat
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/start.bat
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/stop b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/stop
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/stop
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/stop
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/stop.bat b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/stop.bat
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/bin/stop.bat
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/bin/stop.bat
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/etc/org.apache.felix.karaf.shell.cfg b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/etc/org.apache.felix.karaf.shell.cfg
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/etc/org.apache.felix.karaf.shell.cfg
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/etc/org.apache.felix.karaf.shell.cfg
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/etc/org.ops4j.pax.url.mvn.cfg b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/etc/org.ops4j.pax.url.mvn.cfg
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/etc/org.ops4j.pax.url.mvn.cfg
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/etc/org.ops4j.pax.url.mvn.cfg
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/etc/system.properties b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/etc/system.properties
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/shell/admin/etc/system.properties
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/admin/etc/system.properties
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/jpm/impl/unix/start.sh b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/jpm/impl/unix/start.sh
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/jpm/impl/unix/start.sh
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/jpm/impl/unix/start.sh
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/destroy.vbs b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/destroy.vbs
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/destroy.vbs
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/destroy.vbs
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/running.vbs b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/running.vbs
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/running.vbs
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/running.vbs
diff --git a/karaf/shell/admin/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/start.vbs b/karaf/admin/core/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/start.vbs
similarity index 100%
rename from karaf/shell/admin/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/start.vbs
rename to karaf/admin/core/src/main/resources/org/apache/felix/karaf/jpm/impl/windows/start.vbs
diff --git a/karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/InstanceSettingsTest.java b/karaf/admin/core/src/test/java/org/apache/felix/karaf/admin/InstanceSettingsTest.java
similarity index 87%
rename from karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/InstanceSettingsTest.java
rename to karaf/admin/core/src/test/java/org/apache/felix/karaf/admin/InstanceSettingsTest.java
index 499c8ff..cce8c80 100644
--- a/karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/InstanceSettingsTest.java
+++ b/karaf/admin/core/src/test/java/org/apache/felix/karaf/admin/InstanceSettingsTest.java
@@ -14,20 +14,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin;
+package org.apache.felix.karaf.admin;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import junit.framework.TestCase;
+import org.apache.felix.karaf.admin.InstanceSettings;
+import org.junit.Assert;
public class InstanceSettingsTest extends TestCase {
public void testInstanceSettings() {
- InstanceSettings is =
+ InstanceSettings is =
new InstanceSettings(1, null, Collections.<String>emptyList(), Arrays.asList("hi"));
assertEquals(1, is.getPort());
- assertNull(is.getLocation());
+ Assert.assertNull(is.getLocation());
assertEquals(Arrays.asList("hi"), is.getFeatures());
assertEquals(0, is.getFeatureURLs().size());
}
@@ -46,8 +48,8 @@
public void testEqualsHashCode2() {
InstanceSettings is = new InstanceSettings(1, "top", Collections.<String>emptyList(), Arrays.asList("hi"));
- assertFalse(is.equals(null));
- assertFalse(is.equals(new Object()));
+ Assert.assertFalse(is.equals(null));
+ Assert.assertFalse(is.equals(new Object()));
assertEquals(is, is);
}
}
diff --git a/karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceImplTest.java b/karaf/admin/core/src/test/java/org/apache/felix/karaf/admin/internal/AdminServiceImplTest.java
similarity index 94%
rename from karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceImplTest.java
rename to karaf/admin/core/src/test/java/org/apache/felix/karaf/admin/internal/AdminServiceImplTest.java
index f4ba88f..02b9961 100644
--- a/karaf/shell/admin/src/test/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceImplTest.java
+++ b/karaf/admin/core/src/test/java/org/apache/felix/karaf/admin/internal/AdminServiceImplTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.karaf.shell.admin.internal;
+package org.apache.felix.karaf.admin.internal;
import java.io.File;
import java.io.FileInputStream;
@@ -26,7 +26,7 @@
import junit.framework.TestCase;
-import org.apache.felix.karaf.shell.admin.InstanceSettings;
+import org.apache.felix.karaf.admin.InstanceSettings;
public class AdminServiceImplTest extends TestCase {
public void testHandleFeatures() throws Exception {
diff --git a/karaf/shell/admin/src/test/java/org/apache/felix/karaf/jpm/MainTest.java b/karaf/admin/core/src/test/java/org/apache/felix/karaf/jpm/MainTest.java
similarity index 100%
rename from karaf/shell/admin/src/test/java/org/apache/felix/karaf/jpm/MainTest.java
rename to karaf/admin/core/src/test/java/org/apache/felix/karaf/jpm/MainTest.java
diff --git a/karaf/shell/admin/src/test/java/org/apache/felix/karaf/jpm/ProcessTest.java b/karaf/admin/core/src/test/java/org/apache/felix/karaf/jpm/ProcessTest.java
similarity index 100%
rename from karaf/shell/admin/src/test/java/org/apache/felix/karaf/jpm/ProcessTest.java
rename to karaf/admin/core/src/test/java/org/apache/felix/karaf/jpm/ProcessTest.java
diff --git a/karaf/shell/admin/NOTICE b/karaf/admin/management/NOTICE
similarity index 100%
copy from karaf/shell/admin/NOTICE
copy to karaf/admin/management/NOTICE
diff --git a/karaf/admin/management/pom.xml b/karaf/admin/management/pom.xml
new file mode 100644
index 0000000..d227ede
--- /dev/null
+++ b/karaf/admin/management/pom.xml
@@ -0,0 +1,86 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <!--
+
+ 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.
+ -->
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>admin</artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>org.apache.felix.karaf.admin.management</artifactId>
+ <packaging>bundle</packaging>
+ <version>1.1.0-SNAPSHOT</version>
+ <name>Apache Felix Karaf :: Admin Management</name>
+
+ <properties>
+ <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>org.apache.felix.karaf.admin.core</artifactId>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
+ <Export-Package>
+ ${pom.artifactId}*;version=${pom.version}
+ </Export-Package>
+ <Import-Package>
+ !${pom.artifactId}*,
+ javax.management,
+ javax.management.loading,
+ org.osgi.service.command,
+ org.apache.felix.gogo.commands,
+ org.apache.felix.karaf.shell.console,
+ *
+ </Import-Package>
+ <Private-Package>org.apache.felix.karaf.admin.management.internal</Private-Package>
+ <_versionpolicy>${bnd.version.policy}</_versionpolicy>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/AdminServiceMBean.java b/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/AdminServiceMBean.java
new file mode 100644
index 0000000..7d5427a
--- /dev/null
+++ b/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/AdminServiceMBean.java
@@ -0,0 +1,43 @@
+/*
+ * 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.felix.karaf.admin.management;
+
+import javax.management.openmbean.TabularData;
+
+public interface AdminServiceMBean {
+
+ String INSTANCE_PID = "Pid";
+ String INSTANCE_NAME = "Name";
+ String INSTANCE_PORT = "Port";
+ String INSTANCE_STATE = "State";
+ String INSTANCE_LOCATION = "Location";
+
+ String[] INSTANCE = {INSTANCE_PID, INSTANCE_NAME, INSTANCE_PORT,
+ INSTANCE_STATE, INSTANCE_LOCATION };
+
+ // Operations
+ int createInstance(String name, int port, String location, String features, String featureURLs)
+ throws Exception;
+ void changePort(String name, int port) throws Exception;
+ void destroyInstance(String name) throws Exception;
+ void startInstance(String name, String opts) throws Exception;
+ void stopInstance(String name) throws Exception;
+
+ // Attributes
+ TabularData getInstances() throws Exception;
+
+}
diff --git a/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/codec/JmxInstance.java b/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/codec/JmxInstance.java
new file mode 100644
index 0000000..5f398db
--- /dev/null
+++ b/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/codec/JmxInstance.java
@@ -0,0 +1,114 @@
+/*
+ * 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.felix.karaf.admin.management.codec;
+
+import java.util.List;
+
+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.felix.karaf.admin.management.AdminServiceMBean;
+import org.apache.felix.karaf.admin.Instance;
+
+public class JmxInstance {
+ static final CompositeType INSTANCE;
+ static final TabularType INSTANCE_TABLE;
+
+ static {
+ INSTANCE = createInstanceType();
+ INSTANCE_TABLE = createInstanceTableType();
+ }
+
+ private final CompositeDataSupport data;
+
+ private CompositeData asCompositeData() {
+ return data;
+ }
+
+ public JmxInstance(Instance instance) {
+ try {
+ String[] itemNames = AdminServiceMBean.INSTANCE;
+ Object[] itemValues = new Object[itemNames.length];
+ itemValues[0] = instance.getPid();
+ itemValues[1] = instance.getName();
+ itemValues[2] = instance.getPort();
+ try {
+ itemValues[3] = instance.getState();
+ } catch (Exception e) {
+ itemValues[3] = "Error";
+ }
+ itemValues[4] = instance.getLocation();
+
+ data = new CompositeDataSupport(INSTANCE, itemNames, itemValues);
+ } catch (OpenDataException e) {
+ throw new IllegalStateException("Cannot create instance open data", e);
+ }
+ }
+
+ private static CompositeType createInstanceType() {
+ try {
+ String desc = "This type describes Karaf instances";
+ String[] itemNames = AdminServiceMBean.INSTANCE;
+ OpenType[] itemTypes = new OpenType[itemNames.length];
+ String[] descriptions = new String[itemNames.length];
+
+ itemTypes[0] = SimpleType.INTEGER;
+ descriptions[0] = "The Process ID of the instance or 0 if not running.";
+
+ itemTypes[1] = SimpleType.STRING;
+ descriptions[1] = "The name of the instance.";
+
+ itemTypes[2] = SimpleType.INTEGER;
+ descriptions[2] = "The SSH port that can be used to connect to the instance.";
+
+ itemTypes[3] = SimpleType.STRING;
+ descriptions[3] = "The state of the instance.";
+
+ itemTypes[4] = SimpleType.STRING;
+ descriptions[4] = "The location of the instance.";
+
+ return new CompositeType("Instance", desc, itemNames, descriptions, itemTypes);
+ } catch (OpenDataException e) {
+ throw new IllegalStateException("Unable to build instance type", e);
+ }
+ }
+
+ private static TabularType createInstanceTableType() {
+ try {
+ return new TabularType("Instances", "Table of all Karaf instances", INSTANCE,
+ new String[] {AdminServiceMBean.INSTANCE_NAME});
+ } catch (OpenDataException e) {
+ throw new IllegalStateException("Unable to build instance table type", e);
+ }
+ }
+
+ public static TabularData tableFrom(List<JmxInstance> instances) {
+ TabularDataSupport table = new TabularDataSupport(INSTANCE_TABLE);
+ for (JmxInstance instance : instances) {
+ table.put(instance.asCompositeData());
+ }
+ return table;
+ }
+
+}
diff --git a/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/internal/AdminServiceMBeanImpl.java b/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/internal/AdminServiceMBeanImpl.java
new file mode 100644
index 0000000..d362463
--- /dev/null
+++ b/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/internal/AdminServiceMBeanImpl.java
@@ -0,0 +1,107 @@
+/*
+ * 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.felix.karaf.admin.management.internal;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.management.openmbean.TabularData;
+
+import org.apache.felix.karaf.admin.management.AdminServiceMBean;
+import org.apache.felix.karaf.admin.AdminService;
+import org.apache.felix.karaf.admin.Instance;
+import org.apache.felix.karaf.admin.InstanceSettings;
+import org.apache.felix.karaf.admin.management.codec.JmxInstance;
+
+public class AdminServiceMBeanImpl implements AdminServiceMBean {
+
+ private AdminService adminService;
+
+ public AdminService getAdminService() {
+ return adminService;
+ }
+
+ public void setAdminService(AdminService adminService) {
+ this.adminService = adminService;
+ }
+
+ public int createInstance(String name, int port, String location, String features, String featureURLs)
+ throws Exception {
+ if ("".equals(location)) {
+ location = null;
+ }
+
+ InstanceSettings settings = new InstanceSettings(port, location,
+ parseStringList(featureURLs), parseStringList(features));
+
+ Instance inst = adminService.createInstance(name, settings);
+ if (inst != null) {
+ return inst.getPid();
+ } else {
+ return -1;
+ }
+ }
+
+ public void changePort(String name, int port) throws Exception {
+ getExistingInstance(name).changePort(port);
+ }
+
+ public void destroyInstance(String name) throws Exception {
+ getExistingInstance(name).destroy();
+ }
+
+ public void startInstance(String name, String opts) throws Exception {
+ getExistingInstance(name).start(opts);
+ }
+
+ public void stopInstance(String name) throws Exception {
+ getExistingInstance(name).stop();
+ }
+
+ public TabularData getInstances() throws Exception {
+ List<Instance> allInstances = Arrays.asList(adminService.getInstances());
+ List<JmxInstance> instances = new ArrayList<JmxInstance>();
+ for (Instance instance : allInstances) {
+ instances.add(new JmxInstance(instance));
+ }
+ TabularData table = JmxInstance.tableFrom(instances);
+ return table;
+ }
+
+ private Instance getExistingInstance(String name) {
+ Instance i = adminService.getInstance(name);
+ if (i == null) {
+ throw new IllegalArgumentException("Instance '" + name + "' does not exist");
+ }
+ return i;
+ }
+
+ private List<String> parseStringList(String value) {
+ List<String> list = new ArrayList<String>();
+ if (value != null) {
+ for (String el : value.split(",")) {
+ String trimmed = el.trim();
+ if (trimmed.length() == 0) {
+ continue;
+ }
+ list.add(trimmed);
+ }
+ }
+ return list;
+ }
+}
diff --git a/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/internal/MBeanRegistrer.java b/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/internal/MBeanRegistrer.java
new file mode 100644
index 0000000..0479b77
--- /dev/null
+++ b/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/internal/MBeanRegistrer.java
@@ -0,0 +1,67 @@
+/*
+ * 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.felix.karaf.admin.management.internal;
+
+import java.util.Map;
+
+import javax.management.JMException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+public class MBeanRegistrer {
+
+ private MBeanServer mbeanServer;
+
+ private Map<Object, String> mbeans;
+
+ public void setMbeans(Map<Object, String> mbeans) {
+ this.mbeans = mbeans;
+ }
+
+ public void registerMBeanServer(MBeanServer mbeanServer) throws JMException {
+ if (this.mbeanServer != mbeanServer) {
+ unregisterMBeans();
+ }
+ this.mbeanServer = mbeanServer;
+ registerMBeans();
+ }
+
+ public void unregisterMBeanServer(MBeanServer mbeanServer) throws JMException {
+ unregisterMBeans();
+ this.mbeanServer = null;
+ }
+
+ public void init() throws Exception {
+ registerMBeans();
+ }
+
+ protected void registerMBeans() throws JMException {
+ if (mbeanServer != null && mbeans != null) {
+ for (Map.Entry<Object, String> entry : mbeans.entrySet()) {
+ mbeanServer.registerMBean(entry.getKey(), new ObjectName(entry.getValue()));
+ }
+ }
+ }
+
+ protected void unregisterMBeans() throws JMException {
+ if (mbeanServer != null && mbeans != null) {
+ for (Map.Entry<Object, String> entry : mbeans.entrySet()) {
+ mbeanServer.unregisterMBean(new ObjectName(entry.getValue()));
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/karaf/admin/management/src/main/resources/OSGI-INF/blueprint/admin-management.xml b/karaf/admin/management/src/main/resources/OSGI-INF/blueprint/admin-management.xml
new file mode 100644
index 0000000..3e4a253
--- /dev/null
+++ b/karaf/admin/management/src/main/resources/OSGI-INF/blueprint/admin-management.xml
@@ -0,0 +1,49 @@
+<?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">
+
+ <reference id="adminService" interface="org.apache.felix.karaf.admin.AdminService" />
+
+ <reference id="mbeanServer" interface="javax.management.MBeanServer">
+ <reference-listener ref="mbeanRegister" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer" />
+ </reference>
+
+ <bean id="mbeanImpl" class="org.apache.felix.karaf.admin.management.internal.AdminServiceMBeanImpl">
+ <property name="adminService" ref="adminService" />
+ </bean>
+
+ <bean id="mbeanRegister" class="org.apache.felix.karaf.admin.management.internal.MBeanRegistrer">
+ <property name="mbeans">
+ <map>
+ <entry>
+ <key>
+ <bean class="javax.management.StandardMBean">
+ <argument ref="mbeanImpl" />
+ <argument value="org.apache.felix.karaf.admin.management.AdminServiceMBean"/>
+ </bean>
+ </key>
+ <value>org.apache.felix.karaf:service=admin</value>
+ </entry>
+ </map>
+ </property>
+ </bean>
+
+
+</blueprint>
diff --git a/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/codec/JmxInstanceTest.java b/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/codec/JmxInstanceTest.java
new file mode 100644
index 0000000..bc06679
--- /dev/null
+++ b/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/codec/JmxInstanceTest.java
@@ -0,0 +1,89 @@
+/*
+ * 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.felix.karaf.admin.management.codec;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.CompositeType;
+import javax.management.openmbean.TabularData;
+import javax.management.openmbean.TabularType;
+
+import junit.framework.TestCase;
+import org.apache.felix.karaf.admin.Instance;
+import org.apache.felix.karaf.admin.management.AdminServiceMBean;
+import org.easymock.EasyMock;
+import org.junit.Assert;
+
+public class JmxInstanceTest extends TestCase {
+ public void testJMXInstanceStatics() {
+ CompositeType it = JmxInstance.INSTANCE;
+ Assert.assertEquals(
+ new HashSet<String>(Arrays.asList(AdminServiceMBean.INSTANCE)),
+ it.keySet());
+
+ TabularType tt = JmxInstance.INSTANCE_TABLE;
+ Assert.assertEquals("Instances", tt.getTypeName());
+ }
+
+ public void testJMXInstance() throws Exception {
+ Instance i = EasyMock.createMock(Instance.class);
+ EasyMock.expect(i.getPid()).andReturn(1712);
+ EasyMock.expect(i.getName()).andReturn("MyInstance");
+ EasyMock.expect(i.getPort()).andReturn(0);
+ EasyMock.expect(i.getState()).andThrow(new Exception("gotcha"));
+ EasyMock.expect(i.getLocation()).andReturn("somewhere");
+ EasyMock.replay(i);
+
+ JmxInstance ji = new JmxInstance(i);
+ TabularData td = JmxInstance.tableFrom(Collections.singletonList(ji));
+ Collection<?> keys = (Collection<?>) td.keySet().iterator().next();
+ Assert.assertEquals("MyInstance", keys.iterator().next());
+
+ CompositeData cd = td.get(keys.toArray());
+ Assert.assertEquals(1712, cd.get("Pid"));
+ Assert.assertEquals("MyInstance", cd.get("Name"));
+ Assert.assertEquals(0, cd.get("Port"));
+ Assert.assertEquals("Error", cd.get("State"));
+ Assert.assertEquals("somewhere", cd.get("Location"));
+ }
+
+ public void testJMXInstance2() throws Exception {
+ Instance i = EasyMock.createMock(Instance.class);
+ EasyMock.expect(i.getPid()).andReturn(1712);
+ EasyMock.expect(i.getName()).andReturn("MyInstance");
+ EasyMock.expect(i.getPort()).andReturn(0);
+ EasyMock.expect(i.getState()).andReturn("Started");
+ EasyMock.expect(i.getLocation()).andReturn(null);
+ EasyMock.replay(i);
+
+ JmxInstance ji = new JmxInstance(i);
+ TabularData td = JmxInstance.tableFrom(Collections.singletonList(ji));
+ Collection<?> keys = (Collection<?>) td.keySet().iterator().next();
+ Assert.assertEquals("MyInstance", keys.iterator().next());
+
+ CompositeData cd = td.get(keys.toArray());
+ Assert.assertEquals(1712, cd.get("Pid"));
+ Assert.assertEquals("MyInstance", cd.get("Name"));
+ Assert.assertEquals(0, cd.get("Port"));
+ Assert.assertEquals("Started", cd.get("State"));
+ Assert.assertNull(cd.get("Location"));
+ }
+}
diff --git a/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/internal/AdminServiceMBeanImplTest.java b/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/internal/AdminServiceMBeanImplTest.java
new file mode 100644
index 0000000..5a2cfca
--- /dev/null
+++ b/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/internal/AdminServiceMBeanImplTest.java
@@ -0,0 +1,174 @@
+/*
+ * 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.felix.karaf.admin.management.internal;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.TabularData;
+
+import junit.framework.TestCase;
+import org.apache.felix.karaf.admin.AdminService;
+import org.apache.felix.karaf.admin.Instance;
+import org.apache.felix.karaf.admin.InstanceSettings;
+import org.easymock.EasyMock;
+import org.junit.Assert;
+
+public class AdminServiceMBeanImplTest extends TestCase {
+ public void testCreateInstance() throws Exception {
+ final InstanceSettings is = new InstanceSettings(123, "somewhere",
+ Collections.<String>emptyList(), Arrays.asList("webconsole", "funfeat"));
+
+ final Instance inst = EasyMock.createMock(Instance.class);
+ EasyMock.expect(inst.getPid()).andReturn(42);
+ EasyMock.replay(inst);
+
+ AdminService as = EasyMock.createMock(AdminService.class);
+ EasyMock.expect(as.createInstance("t1", is)).andReturn(inst);
+ EasyMock.replay(as);
+
+ AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
+ ab.setAdminService(as);
+ Assert.assertSame(as, ab.getAdminService());
+
+ assertEquals(42, ab.createInstance("t1", 123, "somewhere", " webconsole, funfeat", ""));
+ }
+
+ public void testCreateInstance2() throws Exception {
+ final InstanceSettings is = new InstanceSettings(0, null,
+ Collections.<String>emptyList(), Collections.<String>emptyList());
+
+ AdminService as = EasyMock.createMock(AdminService.class);
+ EasyMock.expect(as.createInstance("t1", is)).andReturn(null);
+ EasyMock.replay(as);
+
+ AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
+ ab.setAdminService(as);
+ Assert.assertSame(as, ab.getAdminService());
+
+ assertEquals(-1, ab.createInstance("t1", 0, "", "", ""));
+ }
+
+ public void testGetInstances() throws Exception {
+ Instance i1 = EasyMock.createMock(Instance.class);
+ EasyMock.expect(i1.getPid()).andReturn(1234);
+ EasyMock.expect(i1.getPort()).andReturn(8818);
+ EasyMock.expect(i1.getName()).andReturn("i1");
+ EasyMock.expect(i1.getLocation()).andReturn("somewhere");
+ EasyMock.expect(i1.getState()).andReturn("Stopped");
+ EasyMock.replay(i1);
+ Instance i2 = EasyMock.createNiceMock(Instance.class);
+ EasyMock.expect(i2.getName()).andReturn("i2");
+ EasyMock.replay(i2);
+
+ AdminService as = EasyMock.createMock(AdminService.class);
+ EasyMock.expect(as.getInstances()).andReturn(new Instance [] {i1, i2});
+ EasyMock.replay(as);
+
+ AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
+ ab.setAdminService(as);
+
+ TabularData td = ab.getInstances();
+ Assert.assertEquals(2, td.size());
+ CompositeData cd1 = td.get(new Object [] {"i1"});
+ Assert.assertTrue(cd1.containsValue("i1"));
+ Assert.assertTrue(cd1.containsValue(1234));
+ Assert.assertTrue(cd1.containsValue(8818));
+ Assert.assertTrue(cd1.containsValue("somewhere"));
+ Assert.assertTrue(cd1.containsValue("Stopped"));
+
+ CompositeData cd2 = td.get(new Object [] {"i2"});
+ Assert.assertTrue(cd2.containsValue("i2"));
+ }
+
+ public void testStartInstance() throws Exception {
+ Instance inst = EasyMock.createMock(Instance.class);
+ inst.start("-x -y -z");
+ EasyMock.expectLastCall();
+ EasyMock.replay(inst);
+
+ AdminService as = EasyMock.createMock(AdminService.class);
+ EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
+ EasyMock.replay(as);
+
+ AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
+ ab.setAdminService(as);
+ Assert.assertSame(as, ab.getAdminService());
+
+ ab.startInstance("test instance", "-x -y -z");
+ EasyMock.verify(as);
+ EasyMock.verify(inst);
+ }
+
+ public void testStopInstance() throws Exception {
+ Instance inst = EasyMock.createMock(Instance.class);
+ inst.stop();
+ EasyMock.expectLastCall();
+ EasyMock.replay(inst);
+
+ AdminService as = EasyMock.createMock(AdminService.class);
+ EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
+ EasyMock.replay(as);
+
+ AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
+ ab.setAdminService(as);
+ Assert.assertSame(as, ab.getAdminService());
+
+ ab.stopInstance("test instance");
+ EasyMock.verify(as);
+ EasyMock.verify(inst);
+ }
+
+ public void testDestroyInstance() throws Exception {
+ Instance inst = EasyMock.createMock(Instance.class);
+ inst.destroy();
+ EasyMock.expectLastCall();
+ EasyMock.replay(inst);
+
+ AdminService as = EasyMock.createMock(AdminService.class);
+ EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
+ EasyMock.replay(as);
+
+ AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
+ ab.setAdminService(as);
+ Assert.assertSame(as, ab.getAdminService());
+
+ ab.destroyInstance("test instance");
+ EasyMock.verify(as);
+ EasyMock.verify(inst);
+ }
+
+ public void testChangePort() throws Exception {
+ Instance inst = EasyMock.createMock(Instance.class);
+ inst.changePort(7788);
+ EasyMock.expectLastCall();
+ EasyMock.replay(inst);
+
+ AdminService as = EasyMock.createMock(AdminService.class);
+ EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
+ EasyMock.replay(as);
+
+ AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
+ ab.setAdminService(as);
+ Assert.assertSame(as, ab.getAdminService());
+
+ ab.changePort("test instance", 7788);
+ EasyMock.verify(as);
+ EasyMock.verify(inst);
+ }
+}
diff --git a/karaf/admin/pom.xml b/karaf/admin/pom.xml
new file mode 100644
index 0000000..300fecc
--- /dev/null
+++ b/karaf/admin/pom.xml
@@ -0,0 +1,41 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <!--
+
+ 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.
+ -->
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.felix.karaf</groupId>
+ <artifactId>karaf</artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>admin</artifactId>
+ <packaging>pom</packaging>
+ <version>1.1.0-SNAPSHOT</version>
+ <name>Apache Felix Karaf :: Admin</name>
+
+ <modules>
+ <module>core</module>
+ <module>command</module>
+ <module>management</module>
+ </modules>
+
+</project>
diff --git a/karaf/assembly/pom.xml b/karaf/assembly/pom.xml
index d34b25d..e36a367 100644
--- a/karaf/assembly/pom.xml
+++ b/karaf/assembly/pom.xml
@@ -80,12 +80,20 @@
<artifactId>org.apache.felix.karaf.features.management</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.felix.karaf.shell</groupId>
- <artifactId>org.apache.felix.karaf.shell.console</artifactId>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>org.apache.felix.karaf.admin.core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>org.apache.felix.karaf.admin.command</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>org.apache.felix.karaf.admin.management</artifactId>
</dependency>
<dependency>
<groupId>org.apache.felix.karaf.shell</groupId>
- <artifactId>org.apache.felix.karaf.shell.admin</artifactId>
+ <artifactId>org.apache.felix.karaf.shell.console</artifactId>
</dependency>
<dependency>
<groupId>org.apache.felix.karaf.shell</groupId>
diff --git a/karaf/assembly/src/main/descriptors/unix-bin.xml b/karaf/assembly/src/main/descriptors/unix-bin.xml
index ab92574..a0289cf 100644
--- a/karaf/assembly/src/main/descriptors/unix-bin.xml
+++ b/karaf/assembly/src/main/descriptors/unix-bin.xml
@@ -189,6 +189,17 @@
<outputDirectory>/system</outputDirectory>
<unpack>false</unpack>
<useProjectArtifact>false</useProjectArtifact>
+ <outputFileNameMapping>org/apache/felix/karaf/admin/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
+ <includes>
+ <include>org.apache.felix.karaf.admin:org.apache.felix.karaf.admin.core</include>
+ <include>org.apache.felix.karaf.admin:org.apache.felix.karaf.admin.command</include>
+ <include>org.apache.felix.karaf.admin:org.apache.felix.karaf.admin.management</include>
+ </includes>
+ </dependencySet>
+ <dependencySet>
+ <outputDirectory>/system</outputDirectory>
+ <unpack>false</unpack>
+ <useProjectArtifact>false</useProjectArtifact>
<outputFileNameMapping>org/apache/felix/karaf/deployer/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
<includes>
<include>org.apache.felix.karaf.deployer:org.apache.felix.karaf.deployer.spring</include>
@@ -203,7 +214,6 @@
<outputFileNameMapping>org/apache/felix/karaf/shell/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
<includes>
<include>org.apache.felix.karaf.shell:org.apache.felix.karaf.shell.console</include>
- <include>org.apache.felix.karaf.shell:org.apache.felix.karaf.shell.admin</include>
<include>org.apache.felix.karaf.shell:org.apache.felix.karaf.shell.osgi</include>
<include>org.apache.felix.karaf.shell:org.apache.felix.karaf.shell.log</include>
<include>org.apache.felix.karaf.shell:org.apache.felix.karaf.shell.config</include>
diff --git a/karaf/assembly/src/main/descriptors/windows-bin.xml b/karaf/assembly/src/main/descriptors/windows-bin.xml
index 232cc76..7adbe14 100644
--- a/karaf/assembly/src/main/descriptors/windows-bin.xml
+++ b/karaf/assembly/src/main/descriptors/windows-bin.xml
@@ -180,6 +180,17 @@
<outputDirectory>/system</outputDirectory>
<unpack>false</unpack>
<useProjectArtifact>false</useProjectArtifact>
+ <outputFileNameMapping>org/apache/felix/karaf/admin/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
+ <includes>
+ <include>org.apache.felix.karaf.admin:org.apache.felix.karaf.admin.core</include>
+ <include>org.apache.felix.karaf.admin:org.apache.felix.karaf.admin.command</include>
+ <include>org.apache.felix.karaf.admin:org.apache.felix.karaf.admin.management</include>
+ </includes>
+ </dependencySet>
+ <dependencySet>
+ <outputDirectory>/system</outputDirectory>
+ <unpack>false</unpack>
+ <useProjectArtifact>false</useProjectArtifact>
<outputFileNameMapping>org/apache/felix/karaf/deployer/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
<includes>
<include>org.apache.felix.karaf.deployer:org.apache.felix.karaf.deployer.spring</include>
@@ -194,7 +205,6 @@
<outputFileNameMapping>org/apache/felix/karaf/shell/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
<includes>
<include>org.apache.felix.karaf.shell:org.apache.felix.karaf.shell.console</include>
- <include>org.apache.felix.karaf.shell:org.apache.felix.karaf.shell.admin</include>
<include>org.apache.felix.karaf.shell:org.apache.felix.karaf.shell.osgi</include>
<include>org.apache.felix.karaf.shell:org.apache.felix.karaf.shell.log</include>
<include>org.apache.felix.karaf.shell:org.apache.felix.karaf.shell.config</include>
diff --git a/karaf/assembly/src/main/filtered-resources/bin/admin b/karaf/assembly/src/main/filtered-resources/bin/admin
index 226f7c1..bd468f5 100644
--- a/karaf/assembly/src/main/filtered-resources/bin/admin
+++ b/karaf/assembly/src/main/filtered-resources/bin/admin
@@ -273,7 +273,7 @@
CLASSPATH=${KARAF_HOME}/system/org/apache/felix/karaf/shell/org.apache.felix.karaf.shell.admin/${project.version}/org.apache.felix.karaf.shell.admin-${project.version}.jar:${KARAF_HOME}/system/org/apache/felix/karaf/shell/org.apache.felix.karaf.shell.console/${project.version}/org.apache.felix.karaf.shell.console-${project.version}.jar:${KARAF_HOME}/system/org/apache/felix/gogo/org.apache.felix.gogo.runtime/${felix.gogo.version}/org.apache.felix.gogo.runtime-${felix.gogo.version}.jar:${KARAF_HOME}/system/org/apache/geronimo/blueprint/geronimo-blueprint/${geronimo.blueprint.version}/geronimo-blueprint-${geronimo.blueprint.version}.jar:${KARAF_HOME}/system/org/ops4j/pax/logging/pax-logging-api/${pax.logging.version}/pax-logging-api-${pax.logging.version}.jar:${KARAF_HOME}/system/org/apache/felix/org.apache.felix.framework/${felix.framework.version}/org.apache.felix.framework-${felix.framework.version}.jar
- exec $JAVA $JAVA_OPTS -Dstorage.location="${KARAF_HOME}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties $OPTS -classpath "$CLASSPATH" org.apache.felix.karaf.shell.admin.main.Execute "$@"
+ exec $JAVA $JAVA_OPTS -Dstorage.location="${KARAF_HOME}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties $OPTS -classpath "$CLASSPATH" org.apache.felix.karaf.admin.main.Execute "$@"
}
main() {
diff --git a/karaf/assembly/src/main/filtered-resources/bin/admin.bat b/karaf/assembly/src/main/filtered-resources/bin/admin.bat
index 3dfcf30..b16f9f6 100644
--- a/karaf/assembly/src/main/filtered-resources/bin/admin.bat
+++ b/karaf/assembly/src/main/filtered-resources/bin/admin.bat
@@ -87,7 +87,7 @@
if "%SHIFT%" == "true" SET ARGS=%2 %3 %4 %5 %6 %7 %8
if not "%SHIFT%" == "true" SET ARGS=%1 %2 %3 %4 %5 %6 %7 %8
rem Execute the Java Virtual Machine
- "%JAVA%" %JAVA_OPTS% %OPTS% -classpath "%CLASSPATH%" -Dstorage.location="%KARAF_HOME%\instances" -Dkaraf.home="%KARAF_HOME%" -Dkaraf.base="%KARAF_BASE%" -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" org.apache.felix.karaf.shell.admin.main.Execute %ARGS%
+ "%JAVA%" %JAVA_OPTS% %OPTS% -classpath "%CLASSPATH%" -Dstorage.location="%KARAF_HOME%\instances" -Dkaraf.home="%KARAF_HOME%" -Dkaraf.base="%KARAF_BASE%" -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" org.apache.felix.karaf.admin.main.Execute %ARGS%
rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
diff --git a/karaf/assembly/src/main/filtered-resources/etc/startup.properties b/karaf/assembly/src/main/filtered-resources/etc/startup.properties
index b1b679b..1a79a4d 100644
--- a/karaf/assembly/src/main/filtered-resources/etc/startup.properties
+++ b/karaf/assembly/src/main/filtered-resources/etc/startup.properties
@@ -41,7 +41,6 @@
org/apache/felix/karaf/deployer/org.apache.felix.karaf.deployer.spring/${pom.version}/org.apache.felix.karaf.deployer.spring-${pom.version}.jar=30
org/apache/felix/karaf/deployer/org.apache.felix.karaf.deployer.blueprint/${pom.version}/org.apache.felix.karaf.deployer.blueprint-${pom.version}.jar=30
org/apache/felix/karaf/deployer/org.apache.felix.karaf.deployer.features/${pom.version}/org.apache.felix.karaf.deployer.features-${pom.version}.jar=30
-org/apache/felix/karaf/shell/org.apache.felix.karaf.shell.admin/${pom.version}/org.apache.felix.karaf.shell.admin-${pom.version}.jar=30
org/apache/felix/karaf/shell/org.apache.felix.karaf.shell.osgi/${pom.version}/org.apache.felix.karaf.shell.osgi-${pom.version}.jar=30
org/apache/felix/karaf/shell/org.apache.felix.karaf.shell.log/${pom.version}/org.apache.felix.karaf.shell.log-${pom.version}.jar=30
org/apache/felix/karaf/shell/org.apache.felix.karaf.shell.config/${pom.version}/org.apache.felix.karaf.shell.config-${pom.version}.jar=30
@@ -49,7 +48,9 @@
org/apache/felix/karaf/shell/org.apache.felix.karaf.shell.commands/${pom.version}/org.apache.felix.karaf.shell.commands-${pom.version}.jar=30
org/apache/felix/karaf/jaas/org.apache.felix.karaf.jaas.config/${pom.version}/org.apache.felix.karaf.jaas.config-${pom.version}.jar=30
org/apache/felix/karaf/jaas/org.apache.felix.karaf.jaas.modules/${pom.version}/org.apache.felix.karaf.jaas.modules-${pom.version}.jar=30
-
+org/apache/felix/karaf/admin/org.apache.felix.karaf.admin.core/${pom.version}/org.apache.felix.karaf.admin.core-${pom.version}.jar=30
+org/apache/felix/karaf/admin/org.apache.felix.karaf.admin.command/${pom.version}/org.apache.felix.karaf.admin.command-${pom.version}.jar=30
+org/apache/felix/karaf/admin/org.apache.felix.karaf.admin.management/${pom.version}/org.apache.felix.karaf.admin.management-${pom.version}.jar=30
org/apache/felix/karaf/features/org.apache.felix.karaf.features.core/${pom.version}/org.apache.felix.karaf.features.core-${pom.version}.jar=30
org/apache/felix/karaf/features/org.apache.felix.karaf.features.command/${pom.version}/org.apache.felix.karaf.features.command-${pom.version}.jar=30
org/apache/felix/karaf/features/org.apache.felix.karaf.features.management/${pom.version}/org.apache.felix.karaf.features.management-${pom.version}.jar=30
diff --git a/karaf/pom.xml b/karaf/pom.xml
index 2f7e297..c2b04c8 100644
--- a/karaf/pom.xml
+++ b/karaf/pom.xml
@@ -36,6 +36,7 @@
<modules>
<module>main</module>
<module>features</module>
+ <module>admin</module>
<module>deployer</module>
<module>shell</module>
<module>jaas</module>
@@ -217,6 +218,21 @@
<version>${pom.version}</version>
</dependency>
<dependency>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>org.apache.felix.karaf.admin.core</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>org.apache.felix.karaf.admin.command</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix.karaf.admin</groupId>
+ <artifactId>org.apache.felix.karaf.admin.management</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.felix.karaf.shell</groupId>
<artifactId>org.apache.felix.karaf.shell.core</artifactId>
<version>${pom.version}</version>
@@ -238,6 +254,11 @@
</dependency>
<dependency>
<groupId>org.apache.felix.karaf.shell</groupId>
+ <artifactId>org.apache.felix.karaf.shell.admin.management</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix.karaf.shell</groupId>
<artifactId>org.apache.felix.karaf.shell.obr</artifactId>
<version>${pom.version}</version>
</dependency>
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/AdminServiceMBean.java b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/AdminServiceMBean.java
deleted file mode 100644
index fdd0034..0000000
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/AdminServiceMBean.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.felix.karaf.shell.admin;
-
-public interface AdminServiceMBean {
-
- void createInstance(String name, int port, String location) throws Exception;
-
- String[] getInstances();
-
- int getPort(String name);
-
- void changePort(String name, int port) throws Exception;
-
- String getState(String name) throws Exception;
-
- void start(String name, String javaOpts) throws Exception;
-
- void stop(String name) throws Exception;
-
- void destroy(String name) throws Exception;
-
-}
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceMBeanImpl.java b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceMBeanImpl.java
deleted file mode 100644
index f2ebabd..0000000
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceMBeanImpl.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * 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.felix.karaf.shell.admin.internal;
-
-import java.util.Collections;
-
-import org.apache.felix.karaf.shell.admin.AdminService;
-import org.apache.felix.karaf.shell.admin.AdminServiceMBean;
-import org.apache.felix.karaf.shell.admin.Instance;
-import org.apache.felix.karaf.shell.admin.InstanceSettings;
-
-public class AdminServiceMBeanImpl implements AdminServiceMBean {
-
- private AdminService adminService;
-
- public AdminService getAdminService() {
- return adminService;
- }
-
- public void setAdminService(AdminService adminService) {
- this.adminService = adminService;
- }
-
- public void createInstance(String name, int port, String location) throws Exception {
- InstanceSettings settings = new InstanceSettings(port, location,
- Collections.<String>emptyList(), Collections.<String>emptyList());
- adminService.createInstance(name, settings);
- }
-
- public String[] getInstances() {
- Instance[] instances = adminService.getInstances();
- String[] names = new String[instances.length];
- for (int i = 0; i < instances.length; i++) {
- names[i] = instances[i].getName();
- }
- return names;
- }
-
- public int getPort(String name) {
- return getExistingInstance(name).getPort();
- }
-
- public void changePort(String name, int port) throws Exception {
- getExistingInstance(name).changePort(port);
- }
-
- public String getState(String name) throws Exception {
- return getExistingInstance(name).getState();
- }
-
- public void start(String name, String javaOpts) throws Exception {
- getExistingInstance(name).start(javaOpts);
- }
-
- public void stop(String name) throws Exception {
- getExistingInstance(name).stop();
- }
-
- public void destroy(String name) throws Exception {
- getExistingInstance(name).destroy();
- }
-
-
- private Instance getExistingInstance(String name) {
- Instance i = adminService.getInstance(name);
- if (i == null) {
- throw new IllegalArgumentException("Instance '" + name + "' does not exist");
- }
- return i;
- }
-
-}
diff --git a/karaf/shell/pom.xml b/karaf/shell/pom.xml
index 0b1a1aa..3959f8e 100644
--- a/karaf/shell/pom.xml
+++ b/karaf/shell/pom.xml
@@ -33,7 +33,6 @@
<name>Apache Felix Karaf :: Shell</name>
<modules>
- <module>admin</module>
<module>commands</module>
<module>config</module>
<module>console</module>
diff --git a/karaf/webconsole/admin/src/main/resources/OSGI-INF/blueprint/webconsole-admin.xml b/karaf/webconsole/admin/src/main/resources/OSGI-INF/blueprint/webconsole-admin.xml
index 48499a6..93e68fd 100644
--- a/karaf/webconsole/admin/src/main/resources/OSGI-INF/blueprint/webconsole-admin.xml
+++ b/karaf/webconsole/admin/src/main/resources/OSGI-INF/blueprint/webconsole-admin.xml
@@ -20,7 +20,7 @@
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:cm="http://geronimo.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0">
- <reference id="adminService" interface="org.apache.felix.karaf.shell.admin.AdminService" />
+ <reference id="adminService" interface="org.apache.felix.karaf.admin.AdminService" />
<bean id="adminPlugin" class="org.apache.felix.karaf.webconsole.admin.AdminPlugin" init-method="start" destroy-method="stop">
<property name="adminService" ref="adminService" />