release version 1.10.0

This commit is contained in:
2024-12-14 04:07:49 +03:00
parent a5088587f7
commit c6b3d793c4
1916 changed files with 254306 additions and 0 deletions

View File

@ -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();
};
}

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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());
}
}