release version 1.10.0
This commit is contained in:
@ -0,0 +1,53 @@
|
||||
/*-
|
||||
* ~~~~~~licensing~~~~~~
|
||||
* service-management
|
||||
* ==========
|
||||
* Copyright (C) 2020 - 2024 EmDev LLC
|
||||
* ==========
|
||||
* You may not use this file except in accordance with the License Terms of the Copyright
|
||||
* Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
|
||||
* rights to the Software and any copies are the property of the Copyright Holder. Unless
|
||||
* it is explicitly allowed the Copyright Holder, the User is prohibited from using the
|
||||
* Software for commercial purposes to provide services to third parties.
|
||||
*
|
||||
* The Copyright Holder hereby declares that the Software is provided on an "AS IS".
|
||||
* Under no circumstances does the Copyright Holder guarantee or promise that the
|
||||
* Software provided by him will be suitable or not suitable for the specific purposes
|
||||
* of the User, that the Software will meet all commercial and personal subjective
|
||||
* expectations of the User, that the Software will work properly, without technical
|
||||
* errors, quickly and uninterruptedly.
|
||||
*
|
||||
* Under no circumstances shall the Copyright Holder or its Affiliates is not liable
|
||||
* to the User for any direct or indirect losses of the User, his expenses or actual
|
||||
* damage, including, downtime; loss of bussines; lost profit; lost earnings; loss
|
||||
* or damage to data, property, etc.
|
||||
* ~~~~~~/licensing~~~~~~
|
||||
*/
|
||||
package ru.entaxy.platform.core.management.service;
|
||||
|
||||
import ru.entaxy.esb.platform.base.management.core.Qualifier;
|
||||
import ru.entaxy.esb.platform.base.management.core.api.Attribute;
|
||||
import ru.entaxy.esb.platform.base.management.core.api.MBeanAnnotated;
|
||||
import ru.entaxy.esb.platform.base.management.core.api.MBeanExportPolicy;
|
||||
import ru.entaxy.platform.core.management.object.EntaxyRuntimeObjectMBean;
|
||||
|
||||
@MBeanAnnotated(policy = MBeanExportPolicy.ANNOTATED_ONLY)
|
||||
public interface ServiceMBean extends EntaxyRuntimeObjectMBean {
|
||||
|
||||
public static interface Helper {
|
||||
|
||||
public static Qualifier getQualifier(String name) {
|
||||
return ServicesMBean.Q_SERVICES.qualifier(SERVICE_KEY, name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static final String CAPABILITY_NAMESPACE = "entaxy.runtime.service";
|
||||
|
||||
public static final String SERVICE_KEY = "service";
|
||||
|
||||
@Attribute
|
||||
default String getName() {
|
||||
return getObjectId();
|
||||
};
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
/*-
|
||||
* ~~~~~~licensing~~~~~~
|
||||
* service-management
|
||||
* ==========
|
||||
* Copyright (C) 2020 - 2024 EmDev LLC
|
||||
* ==========
|
||||
* You may not use this file except in accordance with the License Terms of the Copyright
|
||||
* Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
|
||||
* rights to the Software and any copies are the property of the Copyright Holder. Unless
|
||||
* it is explicitly allowed the Copyright Holder, the User is prohibited from using the
|
||||
* Software for commercial purposes to provide services to third parties.
|
||||
*
|
||||
* The Copyright Holder hereby declares that the Software is provided on an "AS IS".
|
||||
* Under no circumstances does the Copyright Holder guarantee or promise that the
|
||||
* Software provided by him will be suitable or not suitable for the specific purposes
|
||||
* of the User, that the Software will meet all commercial and personal subjective
|
||||
* expectations of the User, that the Software will work properly, without technical
|
||||
* errors, quickly and uninterruptedly.
|
||||
*
|
||||
* Under no circumstances shall the Copyright Holder or its Affiliates is not liable
|
||||
* to the User for any direct or indirect losses of the User, his expenses or actual
|
||||
* damage, including, downtime; loss of bussines; lost profit; lost earnings; loss
|
||||
* or damage to data, property, etc.
|
||||
* ~~~~~~/licensing~~~~~~
|
||||
*/
|
||||
package ru.entaxy.platform.core.management.service;
|
||||
|
||||
import ru.entaxy.esb.platform.base.management.core.ManagementCore;
|
||||
import ru.entaxy.esb.platform.base.management.core.Qualifier;
|
||||
import ru.entaxy.esb.platform.base.management.core.api.MBeanAnnotated;
|
||||
import ru.entaxy.esb.platform.base.management.core.api.MBeanExportPolicy;
|
||||
import ru.entaxy.esb.platform.base.management.core.api.Operation;
|
||||
import ru.entaxy.esb.platform.base.management.core.api.Parameter;
|
||||
import ru.entaxy.platform.core.management.object.EntaxyRuntimeObjectContainerMBean;
|
||||
|
||||
@MBeanAnnotated(policy = MBeanExportPolicy.ANNOTATED_ONLY)
|
||||
public interface ServicesMBean extends EntaxyRuntimeObjectContainerMBean {
|
||||
|
||||
public static final String CAPABILITY_NAMESPACE = "entaxy.runtime.service";
|
||||
|
||||
public static final String SERVICES_KEY = "category";
|
||||
|
||||
public static final String SERVICES_KEY_VALUE = "services";
|
||||
|
||||
public static final Qualifier Q_SERVICES = ManagementCore.Q_RUNTIME
|
||||
.qualifier(ServicesMBean.SERVICES_KEY, ServicesMBean.SERVICES_KEY_VALUE);
|
||||
|
||||
@Deprecated(since = "1.10", forRemoval = true)
|
||||
@Operation(desc = "Gets service's configuration")
|
||||
public String getServiceConfig(
|
||||
@Parameter(name = "idOrName", desc = "Service id or name") String idOrName) throws Exception;
|
||||
|
||||
@Operation(desc = "Start service")
|
||||
public void startService(
|
||||
@Parameter(name = "idOrName", desc = "Service id or name") String idOrName) throws Exception;
|
||||
|
||||
@Operation(desc = "Stop service")
|
||||
public void stopService(
|
||||
@Parameter(name = "idOrName", desc = "Service id or name") String idOrName) throws Exception;
|
||||
|
||||
@Operation(desc = "Uninstall service")
|
||||
public void uninstallService(
|
||||
@Parameter(name = "idOrName", desc = "Service id or name") String idOrName) throws Exception;
|
||||
|
||||
}
|
@ -0,0 +1,101 @@
|
||||
/*-
|
||||
* ~~~~~~licensing~~~~~~
|
||||
* service-management
|
||||
* ==========
|
||||
* Copyright (C) 2020 - 2024 EmDev LLC
|
||||
* ==========
|
||||
* You may not use this file except in accordance with the License Terms of the Copyright
|
||||
* Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
|
||||
* rights to the Software and any copies are the property of the Copyright Holder. Unless
|
||||
* it is explicitly allowed the Copyright Holder, the User is prohibited from using the
|
||||
* Software for commercial purposes to provide services to third parties.
|
||||
*
|
||||
* The Copyright Holder hereby declares that the Software is provided on an "AS IS".
|
||||
* Under no circumstances does the Copyright Holder guarantee or promise that the
|
||||
* Software provided by him will be suitable or not suitable for the specific purposes
|
||||
* of the User, that the Software will meet all commercial and personal subjective
|
||||
* expectations of the User, that the Software will work properly, without technical
|
||||
* errors, quickly and uninterruptedly.
|
||||
*
|
||||
* Under no circumstances shall the Copyright Holder or its Affiliates is not liable
|
||||
* to the User for any direct or indirect losses of the User, his expenses or actual
|
||||
* damage, including, downtime; loss of bussines; lost profit; lost earnings; loss
|
||||
* or damage to data, property, etc.
|
||||
* ~~~~~~/licensing~~~~~~
|
||||
*/
|
||||
package ru.entaxy.platform.core.management.service.impl;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.management.NotCompliantMBeanException;
|
||||
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
import org.osgi.service.component.annotations.Reference;
|
||||
import org.osgi.service.component.annotations.ReferenceCardinality;
|
||||
import org.osgi.service.component.annotations.ReferencePolicy;
|
||||
import org.osgi.service.component.annotations.ReferencePolicyOption;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import ru.entaxy.platform.core.management.object.EntaxyRuntimeItemMBean;
|
||||
import ru.entaxy.platform.core.management.object.EntaxyRuntimeObjectMBean;
|
||||
import ru.entaxy.platform.core.management.object.EntaxyRuntimeObjectMBeanFactory;
|
||||
import ru.entaxy.platform.core.management.object.MBeanFactory;
|
||||
import ru.entaxy.platform.core.management.object.factory.AbstractMBeanFactory;
|
||||
import ru.entaxy.platform.objects.runtime.EntaxyRuntimeObject;
|
||||
|
||||
|
||||
@MBeanFactory(id = "service-factory", supportedTypes = {"entaxy.runtime.service", "entaxy.runtime.service.*"})
|
||||
@Component(service = EntaxyRuntimeObjectMBeanFactory.class, immediate = true)
|
||||
public class ServiceMBeanFactory extends AbstractMBeanFactory {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(ServiceMBeanFactory.class);
|
||||
|
||||
@Reference(cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.STATIC,
|
||||
policyOption = ReferencePolicyOption.RELUCTANT)
|
||||
ServicesMBeanImpl servicesMBean;
|
||||
|
||||
/*
|
||||
@Activate
|
||||
public void activate(ComponentContext componentContext) {
|
||||
log.info("Activating ServiceMBeanFactory");
|
||||
}
|
||||
|
||||
@Deactivate
|
||||
public void deactivate() {
|
||||
log.info("DeActivating ServiceMBeanFactory");
|
||||
}
|
||||
|
||||
*/
|
||||
@Override
|
||||
public <T extends EntaxyRuntimeObjectMBean> T createMBean(EntaxyRuntimeObject entaxyRuntimeObject) {
|
||||
ServiceMBeanImpl beanImpl;
|
||||
try {
|
||||
beanImpl = new ServiceMBeanImpl(entaxyRuntimeObject);
|
||||
beanImpl.setParentMBean(servicesMBean);
|
||||
} catch (NotCompliantMBeanException e) {
|
||||
log.error("Error creating ProfileMBeanImpl for [" + entaxyRuntimeObject.getObjectFullId() + "]", e);
|
||||
return null;
|
||||
}
|
||||
return (T) beanImpl;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
public void setServicesMBean(ServicesMBeanImpl servicesMBean) {
|
||||
log.info("setServicesMBean");
|
||||
this.servicesMBean = servicesMBean;
|
||||
}
|
||||
|
||||
public void unsetServicesMBean(ServicesMBeanImpl servicesMBean) {
|
||||
log.info("unsetServicesMBean");
|
||||
this.servicesMBean = null;
|
||||
}
|
||||
*/
|
||||
@Override
|
||||
public List<? extends EntaxyRuntimeItemMBean> createMBeans() {
|
||||
return Collections.singletonList(servicesMBean);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
/*-
|
||||
* ~~~~~~licensing~~~~~~
|
||||
* service-management
|
||||
* ==========
|
||||
* Copyright (C) 2020 - 2024 EmDev LLC
|
||||
* ==========
|
||||
* You may not use this file except in accordance with the License Terms of the Copyright
|
||||
* Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
|
||||
* rights to the Software and any copies are the property of the Copyright Holder. Unless
|
||||
* it is explicitly allowed the Copyright Holder, the User is prohibited from using the
|
||||
* Software for commercial purposes to provide services to third parties.
|
||||
*
|
||||
* The Copyright Holder hereby declares that the Software is provided on an "AS IS".
|
||||
* Under no circumstances does the Copyright Holder guarantee or promise that the
|
||||
* Software provided by him will be suitable or not suitable for the specific purposes
|
||||
* of the User, that the Software will meet all commercial and personal subjective
|
||||
* expectations of the User, that the Software will work properly, without technical
|
||||
* errors, quickly and uninterruptedly.
|
||||
*
|
||||
* Under no circumstances shall the Copyright Holder or its Affiliates is not liable
|
||||
* to the User for any direct or indirect losses of the User, his expenses or actual
|
||||
* damage, including, downtime; loss of bussines; lost profit; lost earnings; loss
|
||||
* or damage to data, property, etc.
|
||||
* ~~~~~~/licensing~~~~~~
|
||||
*/
|
||||
package ru.entaxy.platform.core.management.service.impl;
|
||||
|
||||
import javax.management.NotCompliantMBeanException;
|
||||
|
||||
import ru.entaxy.esb.platform.base.management.core.api.EntaxyRuntimeTyped;
|
||||
import ru.entaxy.platform.core.management.object.ObjectMBean;
|
||||
import ru.entaxy.platform.core.management.object.factory.AbstractObjectMBean;
|
||||
import ru.entaxy.platform.core.management.service.ServiceMBean;
|
||||
import ru.entaxy.platform.objects.runtime.EntaxyRuntimeObject;
|
||||
|
||||
@EntaxyRuntimeTyped(name = "entaxy.runtime.service")
|
||||
@ObjectMBean(subQualifierName = ServiceMBean.SERVICE_KEY)
|
||||
public class ServiceMBeanImpl extends AbstractObjectMBean<ServiceMBean> implements ServiceMBean {
|
||||
|
||||
public ServiceMBeanImpl(EntaxyRuntimeObject entaxyRuntimeObject)
|
||||
throws NotCompliantMBeanException {
|
||||
super(ServiceMBean.class, entaxyRuntimeObject);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* methood is overridden for compatibility with current UI
|
||||
*
|
||||
* TODO: remove after the above is not actual
|
||||
*/
|
||||
@Override
|
||||
public String getJMXSubQualifierName() {
|
||||
return SERVICE_KEY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJMXSubQualifierValue() {
|
||||
return getObjectId();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,141 @@
|
||||
/*-
|
||||
* ~~~~~~licensing~~~~~~
|
||||
* service-management
|
||||
* ==========
|
||||
* Copyright (C) 2020 - 2024 EmDev LLC
|
||||
* ==========
|
||||
* You may not use this file except in accordance with the License Terms of the Copyright
|
||||
* Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
|
||||
* rights to the Software and any copies are the property of the Copyright Holder. Unless
|
||||
* it is explicitly allowed the Copyright Holder, the User is prohibited from using the
|
||||
* Software for commercial purposes to provide services to third parties.
|
||||
*
|
||||
* The Copyright Holder hereby declares that the Software is provided on an "AS IS".
|
||||
* Under no circumstances does the Copyright Holder guarantee or promise that the
|
||||
* Software provided by him will be suitable or not suitable for the specific purposes
|
||||
* of the User, that the Software will meet all commercial and personal subjective
|
||||
* expectations of the User, that the Software will work properly, without technical
|
||||
* errors, quickly and uninterruptedly.
|
||||
*
|
||||
* Under no circumstances shall the Copyright Holder or its Affiliates is not liable
|
||||
* to the User for any direct or indirect losses of the User, his expenses or actual
|
||||
* damage, including, downtime; loss of bussines; lost profit; lost earnings; loss
|
||||
* or damage to data, property, etc.
|
||||
* ~~~~~~/licensing~~~~~~
|
||||
*/
|
||||
package ru.entaxy.platform.core.management.service.impl;
|
||||
|
||||
import javax.management.NotCompliantMBeanException;
|
||||
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.service.component.ComponentContext;
|
||||
import org.osgi.service.component.annotations.Activate;
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
import org.osgi.service.component.annotations.Deactivate;
|
||||
import org.osgi.service.component.annotations.Reference;
|
||||
import org.osgi.service.component.annotations.ReferenceCardinality;
|
||||
import org.osgi.service.component.annotations.ReferencePolicy;
|
||||
import org.osgi.service.component.annotations.ReferencePolicyOption;
|
||||
import org.osgi.service.component.annotations.ServiceScope;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import ru.entaxy.platform.base.objects.EntaxyObjectService;
|
||||
import ru.entaxy.platform.core.management.object.ContainerMBean;
|
||||
import ru.entaxy.platform.core.management.object.factory.AbstractObjectContainerMBean;
|
||||
import ru.entaxy.platform.core.management.service.ServicesMBean;
|
||||
import ru.entaxy.platform.objects.runtime.EntaxyRuntimeObjectManager;
|
||||
|
||||
@Component(service = {ServicesMBeanImpl.class}, scope = ServiceScope.SINGLETON, immediate = true)
|
||||
@ContainerMBean(id = "services", subQualifierName = "category", subQualifierValue = "services")
|
||||
public class ServicesMBeanImpl extends AbstractObjectContainerMBean<ServicesMBean> implements ServicesMBean {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(ServicesMBeanImpl.class);
|
||||
|
||||
protected BundleContext bundleContext;
|
||||
|
||||
private String SERVICE_RUNTIME_TYPE = "entaxy.runtime.service";
|
||||
|
||||
@Reference(cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.DYNAMIC,
|
||||
policyOption = ReferencePolicyOption.GREEDY)
|
||||
volatile public EntaxyObjectService entaxyObjectService;
|
||||
/*
|
||||
@Reference(cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.DYNAMIC,
|
||||
policyOption = ReferencePolicyOption.GREEDY)
|
||||
volatile private BundleManager bundleManager;
|
||||
*/
|
||||
@Reference(cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.DYNAMIC,
|
||||
policyOption = ReferencePolicyOption.GREEDY)
|
||||
volatile private EntaxyRuntimeObjectManager entaxyRuntimeObjectManager;
|
||||
|
||||
public ServicesMBeanImpl() throws NotCompliantMBeanException {
|
||||
super(ServicesMBean.class);
|
||||
}
|
||||
|
||||
@Activate
|
||||
public void activate(ComponentContext componentContext) {
|
||||
this.bundleContext = componentContext.getBundleContext();
|
||||
// log.info("Activating ServicesMBeanImpl");
|
||||
}
|
||||
|
||||
/*
|
||||
public void setEntaxyObjectService(EntaxyObjectService entaxyObjectService) {
|
||||
log.info("setEntaxyObjectService");
|
||||
this.entaxyObjectService = entaxyObjectService;
|
||||
}
|
||||
|
||||
public void unsetEntaxyObjectService(EntaxyObjectService entaxyObjectService) {
|
||||
log.info("unsetEntaxyObjectService");
|
||||
this.entaxyObjectService = null;
|
||||
}
|
||||
|
||||
public void setBundleManager(BundleManager bundleManager) {
|
||||
log.info("setBundleManager");
|
||||
this.bundleManager = bundleManager;
|
||||
}
|
||||
|
||||
public void unsetBundleManager(BundleManager bundleManager) {
|
||||
log.info("unsetBundleManager");
|
||||
this.bundleManager = null;
|
||||
}
|
||||
*/
|
||||
@Deactivate
|
||||
public void deactivate() {
|
||||
log.info("Deactivating ServicesMBeanImpl");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServiceConfig(String idOrName) {
|
||||
return entaxyObjectService.findObject(idOrName, SERVICE_RUNTIME_TYPE).getConfiguration();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startService(String idOrName) throws Exception {
|
||||
// long bundleId = entaxyObjectService.findObject(idOrName,
|
||||
// SERVICE_RUNTIME_TYPE).getBundleInfo().getBundleId();
|
||||
// bundleManager.startBundle(bundleContext.getBundle(bundleId).getSymbolicName());
|
||||
entaxyRuntimeObjectManager
|
||||
.start(entaxyObjectService.findObject(idOrName, SERVICE_RUNTIME_TYPE).getObjectFullId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopService(String idOrName) throws Exception {
|
||||
// long bundleId = entaxyObjectService.findObject(idOrName,
|
||||
// SERVICE_RUNTIME_TYPE).getBundleInfo().getBundleId();
|
||||
// bundleManager.stopBundle(bundleContext.getBundle(bundleId).getSymbolicName());
|
||||
entaxyRuntimeObjectManager
|
||||
.stopForced(entaxyObjectService.findObject(idOrName, SERVICE_RUNTIME_TYPE).getObjectFullId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uninstallService(String idOrName) throws Exception {
|
||||
// long bundleId = entaxyObjectService.findObject(idOrName,
|
||||
// SERVICE_RUNTIME_TYPE).getBundleInfo().getBundleId();
|
||||
// Bundle bundle = bundleContext.getBundle(bundleId);
|
||||
// bundleManager.uninstallBundleByName(bundle.getSymbolicName(), "service",
|
||||
// bundle.getVersion().toString());
|
||||
// todo remove all connected resources
|
||||
entaxyRuntimeObjectManager
|
||||
.uninstallForced(entaxyObjectService.findObject(idOrName, SERVICE_RUNTIME_TYPE).getObjectFullId());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user