Author: gnodet
Date: Mon Nov 16 12:07:41 2009
New Revision: 880721
URL: http://svn.apache.org/viewvc?rev=880721&view=rev
Log:
FELIX-1850 and FELIX-1849: enhancements to AdminServiceMBean
Modified:
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/Instance.java
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/AdminServiceImpl.java
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/InstanceImpl.java
felix/trunk/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/AdminServiceMBean.java
felix/trunk/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/codec/JmxInstance.java
felix/trunk/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/codec/JmxInstanceTest.java
felix/trunk/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/internal/AdminServiceMBeanImplTest.java
felix/trunk/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java
Modified:
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/Instance.java
URL:
http://svn.apache.org/viewvc/felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/Instance.java?rev=880721&r1=880720&r2=880721&view=diff
==============================================================================
---
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/Instance.java
(original)
+++
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/Instance.java
Mon Nov 16 12:07:41 2009
@@ -24,6 +24,8 @@
String ERROR = "Error";
String getName();
+
+ boolean isRoot();
String getLocation();
Modified:
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/AdminServiceImpl.java
URL:
http://svn.apache.org/viewvc/felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/AdminServiceImpl.java?rev=880721&r1=880720&r2=880721&view=diff
==============================================================================
---
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/AdminServiceImpl.java
(original)
+++
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/AdminServiceImpl.java
Mon Nov 16 12:07:41 2009
@@ -99,8 +99,9 @@
String name = storage.getProperty("item." + i + ".name", null);
String loc = storage.getProperty("item." + i + ".loc", null);
int pid = Integer.parseInt(storage.getProperty("item." + i +
".pid", "0"));
+ boolean root =
Boolean.parseBoolean(storage.getProperty("item." + i + ".root", "false"));
if (name != null) {
- InstanceImpl instance = new InstanceImpl(this, name, loc);
+ InstanceImpl instance = new InstanceImpl(this, name, loc,
root);
if (pid > 0) {
try {
instance.attach(pid);
Modified:
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/InstanceImpl.java
URL:
http://svn.apache.org/viewvc/felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/InstanceImpl.java?rev=880721&r1=880720&r2=880721&view=diff
==============================================================================
---
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/InstanceImpl.java
(original)
+++
felix/trunk/karaf/admin/core/src/main/java/org/apache/felix/karaf/admin/internal/InstanceImpl.java
Mon Nov 16 12:07:41 2009
@@ -41,11 +41,17 @@
private String name;
private String location;
private Process process;
+ private boolean root;
public InstanceImpl(AdminServiceImpl service, String name, String
location) {
+ this(service, name, location, false);
+ }
+
+ public InstanceImpl(AdminServiceImpl service, String name, String
location, boolean root) {
this.service = service;
this.name = name;
this.location = location;
+ this.root = root;
}
public void attach(int pid) throws IOException {
@@ -59,6 +65,10 @@
public String getName() {
return this.name;
}
+
+ public boolean isRoot() {
+ return root;
+ }
public String getLocation() {
return location;
Modified:
felix/trunk/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/AdminServiceMBean.java
URL:
http://svn.apache.org/viewvc/felix/trunk/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/AdminServiceMBean.java?rev=880721&r1=880720&r2=880721&view=diff
==============================================================================
---
felix/trunk/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/AdminServiceMBean.java
(original)
+++
felix/trunk/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/AdminServiceMBean.java
Mon Nov 16 12:07:41 2009
@@ -22,11 +22,12 @@
String INSTANCE_PID = "Pid";
String INSTANCE_NAME = "Name";
+ String INSTANCE_IS_ROOT = "Is Root";
String INSTANCE_PORT = "Port";
String INSTANCE_STATE = "State";
String INSTANCE_LOCATION = "Location";
- String[] INSTANCE = {INSTANCE_PID, INSTANCE_NAME, INSTANCE_PORT,
+ String[] INSTANCE = {INSTANCE_PID, INSTANCE_NAME, INSTANCE_IS_ROOT,
INSTANCE_PORT,
INSTANCE_STATE, INSTANCE_LOCATION };
// Operations
Modified:
felix/trunk/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/codec/JmxInstance.java
URL:
http://svn.apache.org/viewvc/felix/trunk/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/codec/JmxInstance.java?rev=880721&r1=880720&r2=880721&view=diff
==============================================================================
---
felix/trunk/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/codec/JmxInstance.java
(original)
+++
felix/trunk/karaf/admin/management/src/main/java/org/apache/felix/karaf/admin/management/codec/JmxInstance.java
Mon Nov 16 12:07:41 2009
@@ -52,13 +52,14 @@
Object[] itemValues = new Object[itemNames.length];
itemValues[0] = instance.getPid();
itemValues[1] = instance.getName();
- itemValues[2] = instance.getPort();
+ itemValues[2] = instance.isRoot();
+ itemValues[3] = instance.getPort();
try {
- itemValues[3] = instance.getState();
+ itemValues[4] = instance.getState();
} catch (Exception e) {
- itemValues[3] = "Error";
+ itemValues[4] = "Error";
}
- itemValues[4] = instance.getLocation();
+ itemValues[5] = instance.getLocation();
data = new CompositeDataSupport(INSTANCE, itemNames, itemValues);
} catch (OpenDataException e) {
@@ -78,15 +79,18 @@
itemTypes[1] = SimpleType.STRING;
descriptions[1] = "The name of the instance.";
+
+ itemTypes[2] = SimpleType.BOOLEAN;
+ descriptions[2] = "Whether the instance is root.";
- 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[3] = SimpleType.INTEGER;
+ descriptions[3] = "The SSH port that can be used to connect to the
instance.";
itemTypes[4] = SimpleType.STRING;
- descriptions[4] = "The location of the instance.";
+ descriptions[4] = "The state of the instance.";
+
+ itemTypes[5] = SimpleType.STRING;
+ descriptions[5] = "The location of the instance.";
return new CompositeType("Instance", desc, itemNames,
descriptions, itemTypes);
} catch (OpenDataException e) {
Modified:
felix/trunk/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/codec/JmxInstanceTest.java
URL:
http://svn.apache.org/viewvc/felix/trunk/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/codec/JmxInstanceTest.java?rev=880721&r1=880720&r2=880721&view=diff
==============================================================================
---
felix/trunk/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/codec/JmxInstanceTest.java
(original)
+++
felix/trunk/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/codec/JmxInstanceTest.java
Mon Nov 16 12:07:41 2009
@@ -47,6 +47,7 @@
Instance i = EasyMock.createMock(Instance.class);
EasyMock.expect(i.getPid()).andReturn(1712);
EasyMock.expect(i.getName()).andReturn("MyInstance");
+ EasyMock.expect(i.isRoot()).andReturn(false);
EasyMock.expect(i.getPort()).andReturn(0);
EasyMock.expect(i.getState()).andThrow(new Exception("gotcha"));
EasyMock.expect(i.getLocation()).andReturn("somewhere");
@@ -60,6 +61,7 @@
CompositeData cd = td.get(keys.toArray());
Assert.assertEquals(1712, cd.get("Pid"));
Assert.assertEquals("MyInstance", cd.get("Name"));
+ Assert.assertEquals(false, cd.get("Is Root"));
Assert.assertEquals(0, cd.get("Port"));
Assert.assertEquals("Error", cd.get("State"));
Assert.assertEquals("somewhere", cd.get("Location"));
@@ -69,6 +71,7 @@
Instance i = EasyMock.createMock(Instance.class);
EasyMock.expect(i.getPid()).andReturn(1712);
EasyMock.expect(i.getName()).andReturn("MyInstance");
+ EasyMock.expect(i.isRoot()).andReturn(true);
EasyMock.expect(i.getPort()).andReturn(0);
EasyMock.expect(i.getState()).andReturn("Started");
EasyMock.expect(i.getLocation()).andReturn(null);
@@ -82,6 +85,7 @@
CompositeData cd = td.get(keys.toArray());
Assert.assertEquals(1712, cd.get("Pid"));
Assert.assertEquals("MyInstance", cd.get("Name"));
+ Assert.assertEquals(true, cd.get("Is Root"));
Assert.assertEquals(0, cd.get("Port"));
Assert.assertEquals("Started", cd.get("State"));
Assert.assertNull(cd.get("Location"));
Modified:
felix/trunk/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/internal/AdminServiceMBeanImplTest.java
URL:
http://svn.apache.org/viewvc/felix/trunk/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/internal/AdminServiceMBeanImplTest.java?rev=880721&r1=880720&r2=880721&view=diff
==============================================================================
---
felix/trunk/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/internal/AdminServiceMBeanImplTest.java
(original)
+++
felix/trunk/karaf/admin/management/src/test/java/org/apache/felix/karaf/admin/management/internal/AdminServiceMBeanImplTest.java
Mon Nov 16 12:07:41 2009
@@ -69,6 +69,7 @@
EasyMock.expect(i1.getPid()).andReturn(1234);
EasyMock.expect(i1.getPort()).andReturn(8818);
EasyMock.expect(i1.getName()).andReturn("i1");
+ EasyMock.expect(i1.isRoot()).andReturn(true);
EasyMock.expect(i1.getLocation()).andReturn("somewhere");
EasyMock.expect(i1.getState()).andReturn("Stopped");
EasyMock.replay(i1);
@@ -87,6 +88,7 @@
Assert.assertEquals(2, td.size());
CompositeData cd1 = td.get(new Object [] {"i1"});
Assert.assertTrue(cd1.containsValue("i1"));
+ Assert.assertTrue(cd1.containsValue(true));
Assert.assertTrue(cd1.containsValue(1234));
Assert.assertTrue(cd1.containsValue(8818));
Assert.assertTrue(cd1.containsValue("somewhere"));
Modified:
felix/trunk/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java
URL:
http://svn.apache.org/viewvc/felix/trunk/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java?rev=880721&r1=880720&r2=880721&view=diff
==============================================================================
--- felix/trunk/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java
(original)
+++ felix/trunk/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java
Mon Nov 16 12:07:41 2009
@@ -340,21 +340,24 @@
private void updateInstancePid() {
try {
- if (!karafHome.equals(karafBase)) {
- String instanceName = System.getProperty("karaf.name");
- String pid = ManagementFactory.getRuntimeMXBean().getName();
- if (pid.indexOf('@') > 0) {
- pid = pid.substring(0, pid.indexOf('@'));
- }
- if (instanceName != null) {
- String storage = System.getProperty("storage.location");
- if (storage == null) {
- throw new Exception("System property
'storage.location' is not set. \n" +
- "This property needs to be set to the full path of
the instance.properties file.");
- }
- File storageFile = new File(storage);
- File propertiesFile = new File(storageFile,
"instance.properties");
- Properties props = new Properties();
+ String instanceName = System.getProperty("karaf.name");
+ String pid = ManagementFactory.getRuntimeMXBean().getName();
+ if (pid.indexOf('@') > 0) {
+ pid = pid.substring(0, pid.indexOf('@'));
+ }
+
+ boolean isRoot = karafHome.equals(karafBase);
+
+ if (instanceName != null) {
+ String storage = System.getProperty("storage.location");
+ if (storage == null) {
+ throw new Exception("System property 'storage.location' is
not set. \n" +
+ "This property needs to be set to the full path of the
instance.properties file.");
+ }
+ File storageFile = new File(storage);
+ File propertiesFile = new File(storageFile,
"instance.properties");
+ Properties props = new Properties();
+ if (propertiesFile.exists()) {
props.load(new FileInputStream(propertiesFile));
int count = Integer.parseInt(props.getProperty("count"));
for (int i = 0; i < count; i++) {
@@ -365,7 +368,19 @@
return;
}
}
- throw new Exception("Instance " + instanceName + " not
found");
+ if (!isRoot) {
+ throw new Exception("Instance " + instanceName + " not
found");
+ }
+ } else if (isRoot) {
+ if (!propertiesFile.getParentFile().exists()) {
+ propertiesFile.getParentFile().mkdirs();
+ }
+ props.setProperty("count", "1");
+ props.setProperty("item.0.name", instanceName);
+ props.setProperty("item.0.loc",
karafHome.getAbsolutePath());
+ props.setProperty("item.0.pid", pid);
+ props.setProperty("item.0.root", "true");
+ props.store(new FileOutputStream(propertiesFile), null);
}
}
} catch (Exception e) {