Skip to content

instances branch added which includes functionality presenting karaf ins... #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -63,6 +63,6 @@ public void onClick()
}
});
ListDataProvider<ServicePointer<FeaturesServiceAdapter>> dataProvider = new ListDataProvider<>(new ArrayList<>(pointers));
add(new DataTable<ServicePointer<FeaturesServiceAdapter>, String>("services", columns, dataProvider, 100));
}
add(new DataTable<ServicePointer<FeaturesServiceAdapter>, String>("services", columns, dataProvider, 100));
}
}
19 changes: 19 additions & 0 deletions instance/dto/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>
<artifactId>instance</artifactId>
<groupId>org.webconsole.karaf</groupId>
<version>2.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<groupId>org.webconsole.karaf.instance</groupId>
<artifactId>dto</artifactId>
<packaging>bundle</packaging>
<name>Webconsole :: Karaf :: Instance :: DTO</name>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.webconsole.karaf.instance.dto;

import org.webconsole.karaf.instance.dto.KarafInstanceTO;
import java.util.List;

public interface KarafInstanceServiceAdapter
{
List<KarafInstanceTO> getInstances();

void startInstance(KarafInstanceTO instance);

void stopInstance(KarafInstanceTO instance);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package org.webconsole.karaf.instance.dto;

import java.io.Serializable;

public class KarafInstanceTO implements Serializable
{
private final String name;
private final Integer pid;
private final String state;

public KarafInstanceTO(String name, Integer pid, String state)
{
this.name = name;
this.pid = pid;
this.state = state;
}

public String getName()
{
return name;
}

public Integer getPid()
{
return pid;
}

public String getState()
{
return state;
}

}
38 changes: 38 additions & 0 deletions instance/jmx/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<artifactId>instance</artifactId>
<groupId>org.webconsole.karaf</groupId>
<version>2.0.0-SNAPSHOT</version>
</parent>

<groupId>org.webconsole.karaf.instance</groupId>
<artifactId>jmx</artifactId>
<packaging>bundle</packaging>

<name>WebConsole :: Karaf :: Instance :: JMX</name>
<description>Karaf instances JMX adapter.</description>

<dependencies>
<dependency>
<groupId>org.code-house.service</groupId>
<artifactId>jmx</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.webconsole.karaf.instance</groupId>
<artifactId>dto</artifactId>
</dependency>
<dependency>
<groupId>org.apache.karaf.admin</groupId>
<artifactId>org.apache.karaf.admin.management</artifactId>
<version>2.3.4</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package org.webconsole.karaf.instance.jmx;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;

import org.code_house.service.api.ServicePointer;
import org.code_house.service.api.WrapperConnection;
import org.code_house.service.core.AdapterProvider;
import org.webconsole.karaf.instance.dto.KarafInstanceServiceAdapter;

public class JmxKarafInstanceAdapter implements AdapterProvider<KarafInstanceServiceAdapter, MBeanServerConnection>
{

@Override
public boolean isSupported(Class<?> type)
{
return type.isAssignableFrom(KarafInstanceServiceAdapter.class);
}

@Override
public boolean isSupported(ServicePointer<?> serviceId)
{
return JmxKarafInstancePointer.class.isAssignableFrom(serviceId.getClass());
}

@Override
public Set<ServicePointer<KarafInstanceServiceAdapter>> createAdapters(WrapperConnection<MBeanServerConnection> connection)
{
try
{
Set<ObjectName> objectNames = connection.getConnection().queryNames(new ObjectName("org.apache.karaf:type=admin,*"), null);
Set<ServicePointer<KarafInstanceServiceAdapter>> pointers = new HashSet<>();
for (ObjectName objectName : objectNames)
{
pointers.add(new JmxKarafInstancePointer(connection, objectName));
}
return pointers;
}
catch (IOException e)
{
e.printStackTrace();
}
catch (MalformedObjectNameException e)
{
e.printStackTrace();
}
return null;
}

@Override
public ServicePointer<KarafInstanceServiceAdapter> createAdapter(ServicePointer<KarafInstanceServiceAdapter> identifier,
WrapperConnection<MBeanServerConnection> connection)
{
try
{
Object instanceName = identifier.getProperties().get("InstanceName");
return new JmxKarafInstancePointer(connection, new ObjectName("org.apache.karaf:type=admin,name=" + instanceName));
}
catch (MalformedObjectNameException e)
{
e.printStackTrace();
}
return null;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.webconsole.karaf.instance.jmx;

import java.util.HashMap;
import java.util.Map;

import javax.management.MBeanServerConnection;
import javax.management.ObjectName;

import org.apache.karaf.admin.management.AdminServiceMBean;
import org.code_house.service.api.WrapperConnection;
import org.code_house.service.jmx.JmxServicePointer;
import org.webconsole.karaf.instance.dto.KarafInstanceServiceAdapter;

public class JmxKarafInstancePointer extends JmxServicePointer<KarafInstanceServiceAdapter>
{

private Map<String, Object> properties = new HashMap<>();

protected JmxKarafInstancePointer(WrapperConnection<MBeanServerConnection> connection, ObjectName objectName)
{
super(connection, objectName);
properties.put("InstanceName", objectName.getKeyProperty("name"));
}

@Override
public KarafInstanceServiceAdapter createService()
{
return new JmxKarafInstanceService(createProxy(AdminServiceMBean.class));
}

@Override
public Map<String, Object> getProperties()
{
return properties;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package org.webconsole.karaf.instance.jmx;

import java.util.Collections;
import java.util.List;

import javax.management.openmbean.CompositeData;

import org.apache.karaf.admin.management.AdminServiceMBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.webconsole.karaf.instance.jmx.ts.TabularFunction;
import org.webconsole.karaf.instance.jmx.ts.TabularStructures;
import org.webconsole.karaf.instance.dto.KarafInstanceServiceAdapter;
import org.webconsole.karaf.instance.dto.KarafInstanceTO;

public class JmxKarafInstanceService implements KarafInstanceServiceAdapter
{

private final Logger logger = LoggerFactory.getLogger(JmxKarafInstanceService.class);
private final AdminServiceMBean adminService;

public JmxKarafInstanceService(AdminServiceMBean adminService)
{
this.adminService = adminService;
}

@Override
public List<KarafInstanceTO> getInstances()
{
try
{
return TabularStructures.apply(adminService.getInstances(), new TabularFunction<String, KarafInstanceTO>()
{
@Override
public KarafInstanceTO apply(List<String> key, CompositeData value)
{
String name = (String) value.get(AdminServiceMBean.INSTANCE_NAME);
Integer pid = (Integer) value.get(AdminServiceMBean.INSTANCE_PID);
String state = (String) value.get(AdminServiceMBean.INSTANCE_STATE);
return new KarafInstanceTO(name, pid, state);
}
});
}
catch (Exception e)
{
logger.error("Unable to fetch features", e);
}

return Collections.emptyList();
}

@Override
public void startInstance(KarafInstanceTO instance)
{
try
{
adminService.startInstance(instance.getName());
}
catch (Exception e)
{
logger.error("Failed to start karaf instance {}", instance.getName(), e);
}

}

@Override
public void stopInstance(KarafInstanceTO instance)
{
try
{
adminService.stopInstance(instance.getName());
}
catch (Exception e)
{
logger.error("Failed to stop karaf instance {}", instance.getName(), e);
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.webconsole.karaf.instance.jmx.ts;

import java.util.List;

import javax.management.openmbean.CompositeData;

/**
*
*
* @author dl02
*
* @param <K>
* @param <R>
*/
public interface TabularFunction<K, R> {

R apply(List<K> key, CompositeData value);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.webconsole.karaf.instance.jmx.ts;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javax.management.openmbean.TabularData;

public class TabularStructures {

@SuppressWarnings("unchecked")
public static <K, R> List<R> apply(TabularData data, TabularFunction<K, R> function) {
List<R> result = new ArrayList<>();
for (List<K> key : (Set<List<K>>) data.keySet()) {
result.add(function.apply(key, data.get(key.toArray())));
}
return result;
}


}
38 changes: 38 additions & 0 deletions instance/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?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.
-->
<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/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>karaf</artifactId>
<groupId>org.webconsole</groupId>
<version>2.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<groupId>org.webconsole.karaf</groupId>
<artifactId>instance</artifactId>
<packaging>pom</packaging>
<name>Webconsole :: Karaf :: Instance</name>

<modules>
<module>ui</module>
<module>jmx</module>
<module>dto</module>
</modules>
</project>
Loading