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,76 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.esb.platform.core.management.connection.to_remove;
import ru.entaxy.esb.platform.base.management.core.api.RuntimeTypedMBean;
public interface ConnectionMBean extends RuntimeTypedMBean {
public static final String CONNECTION_KEY = "connection";
/*
* connection name
*/
public String getName();
/*
* if connection is platform one or user defined
*/
public boolean isPlatform();
/*
* status of the bundle if connection is deplyed
*/
public String getStatus();
/*
* if the connection local or shared (cluster)
*/
public boolean isLocal();
/*
* if the connection is shared (single malt)
* or prototype-like (blended)
*/
public boolean isShared();
/*
* if the connection is deployed or only defined
*/
public boolean isDeployed();
/*
* bundle id for single malt connection
* null for blended
*/
public String getBundleId();
/*
* connection label
*/
public String getLabel();
}

View File

@ -0,0 +1,46 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.esb.platform.core.management.connection.to_remove;
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;
@MBeanAnnotated(policy = MBeanExportPolicy.ANNOTATION_ENRICH)
public interface ConnectionsMBean {
public static final String CAPABILITY_NAMESPACE = "entaxy.runtime.connection";
public static final String CONNECTIONS_KEY = "category";
public static final String CONNECTIONS_KEY_VALUE = "connections";
@Operation(desc = "Gets connection's configuration")
public String getConnectionConfig(
@Parameter(name = "connectionName", desc = "Connection name") String connectionName) throws Exception;
}

View File

@ -0,0 +1,105 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.esb.platform.core.management.connection.to_remove.impl;
import javax.management.NotCompliantMBeanException;
import javax.management.StandardMBean;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import ru.entaxy.esb.platform.base.management.core.api.EntaxyRuntimeTyped;
import ru.entaxy.esb.platform.core.management.connection.to_remove.ConnectionMBean;
//@TODO move string to constant
@EntaxyRuntimeTyped(name = "entaxy.runtime.connection")
public class ConnectionMBeanImpl extends StandardMBean implements ConnectionMBean {
protected ManagedConnection connection;
protected BundleContext bundleContext;
public ConnectionMBeanImpl(BundleContext bundleContext, ManagedConnection connection) throws NotCompliantMBeanException {
super(ConnectionMBean.class);
this.bundleContext = bundleContext;
this.connection = connection;
}
@Override
public String getName() {
return connection.getName();
}
@Override
public boolean isPlatform() {
return connection.isPlatform();
}
@Override
public String getStatus() {
int state = this.bundleContext.getBundle(connection.getBundleId()).getState();
switch (state) {
case Bundle.ACTIVE:
return "Active";
case Bundle.INSTALLED:
return "Installed";
case Bundle.RESOLVED:
return "Resolved";
case Bundle.STARTING:
return "Starting";
case Bundle.STOPPING:
return "Stopping";
default:
return "Unknown";
}
}
@Override
public boolean isLocal() {
return connection.isLocal;
}
@Override
public boolean isShared() {
return connection.isShared();
}
@Override
public boolean isDeployed() {
return connection.isDeployed;
}
@Override
public String getBundleId() {
return connection.getBundleId() + "";
}
@Override
public String getLabel() {
return connection.getLabel();
}
}

View File

@ -0,0 +1,145 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.esb.platform.core.management.connection.to_remove.impl;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import javax.management.NotCompliantMBeanException;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.AnnotatedMBean;
import ru.entaxy.esb.platform.core.management.connection.to_remove.ConnectionMBean;
import ru.entaxy.esb.platform.core.management.connection.to_remove.ConnectionsMBean;
import ru.entaxy.esb.platform.core.management.connection.to_remove.tracker.DeployedConnectionTracker;
import ru.entaxy.platform.base.objects.EntaxyObjectService;
/*
@Component(
service = {ConnectionsMBean.class, DynamicMBean.class, MBeanRegistration.class},
property = {ManagementCore.JMX_OBJECTNAME
+ "=" + ManagementCore.Q_RUNTIME_S
+ "," + ConnectionsMBean.CONNECTIONS_KEY
+ "=" + ConnectionsMBean.CONNECTIONS_KEY_VALUE},
scope = ServiceScope.SINGLETON,
immediate = true
)
*/
public class ConnectionsMBeanImpl extends AnnotatedMBean<ConnectionsMBean>
implements ConnectionsMBean, ManagedConnectionsListener {
private static final Logger log = LoggerFactory.getLogger(ConnectionsMBeanImpl.class);
public static final Qualifier Q_CONNECTIONS = ManagementCore.Q_RUNTIME
.qualifier(ConnectionsMBean.CONNECTIONS_KEY, ConnectionsMBean.CONNECTIONS_KEY_VALUE);
protected BundleContext bundleContext;
protected DeployedConnectionTracker tracker;
@Reference(cardinality = ReferenceCardinality.MANDATORY)
EntaxyObjectService entaxyObjectService;
protected static class ManagedConnectionDescriptor {
ManagedConnection connection;
ServiceRegistration<ConnectionMBean> registration;
}
protected Map<String, ManagedConnectionDescriptor> managed = new HashMap<>();
public ConnectionsMBeanImpl() throws NotCompliantMBeanException {
super(ConnectionsMBean.class);
}
@Activate
public void activate(ComponentContext componentContext) {
this.bundleContext = componentContext.getBundleContext();
tracker = new DeployedConnectionTracker(bundleContext, this);
tracker.open();
}
@Deactivate
public void deactivate() {
tracker.close();
}
@Override
public void added(ManagedConnections connections) {
Hashtable props = new Hashtable<>();
// String jmxObjectName = "jmx.objectname";
// String objectName = "ru.entaxy.esb:group=platform,category=connections,connection=";
for (ManagedConnection connection: connections.managedConnections) {
if (managed.containsKey(connection.getName()))
this.managed.get(connection.getName()).registration.unregister();
try {
ConnectionMBeanImpl service = new ConnectionMBeanImpl(bundleContext, connection);
ManagedConnectionDescriptor descriptor = new ManagedConnectionDescriptor();
descriptor.connection = connection;
props.put(ManagementCore.JMX_OBJECTNAME
, Q_CONNECTIONS.qualifier(ConnectionMBean.CONNECTION_KEY
, connection.getName()).getValue());
descriptor.registration = bundleContext.registerService(ConnectionMBean.class
, service
, props);
managed.put(connection.getName(), descriptor);
} catch (Exception e) {
log.error("Error adding connection [" + connection.getName() + "]", e);
}
}
}
@Override
public void removed(ManagedConnections connections) {
for (ManagedConnection connection: connections.managedConnections) {
if (managed.containsKey(connection.getName())) {
this.managed.get(connection.getName()).registration.unregister();
this.managed.remove(connection.getName());
}
}
}
@Override
public String getConnectionConfig(String connectionName) throws Exception {
return entaxyObjectService.findObject(connectionName, "entaxy.runtime.connection").getConfiguration();
}
}

View File

@ -0,0 +1,116 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.esb.platform.core.management.connection.to_remove.impl;
public class ManagedConnection {
protected String name;
protected boolean isPlatform;
protected boolean isLocal;
protected boolean isShared;
protected long bundleId;
protected boolean isDeployed;
protected String label;
public String getName() {
return name;
}
public boolean isPlatform() {
return isPlatform;
}
public boolean isLocal() {
return isLocal;
}
public boolean isShared() {
return isShared;
}
public long getBundleId() {
return bundleId;
}
public boolean isDeployed() {
return isDeployed;
}
public String getLabel() {
return label;
}
public void setName(String name) {
this.name = name;
}
public void setPlatform(boolean isPlatform) {
this.isPlatform = isPlatform;
}
public void setLocal(boolean isLocal) {
this.isLocal = isLocal;
}
public void setShared(boolean isShared) {
this.isShared = isShared;
}
public void setBundleId(long bundleId) {
this.bundleId = bundleId;
}
public void setDeployed(boolean isDeployed) {
this.isDeployed = isDeployed;
}
public void setLabel(String label) {
this.label = label;
}
public ManagedConnection name(String name) {
setName(name);
return this;
}
public ManagedConnection platform(boolean isPlatform) {
setPlatform(isPlatform);
return this;
}
public ManagedConnection local(boolean isLocal) {
setLocal(isLocal);
return this;
}
public ManagedConnection shared(boolean isShared) {
setShared(isShared);
return this;
}
public ManagedConnection bundleId(long bundleId) {
setBundleId(bundleId);
return this;
}
public ManagedConnection deployed(boolean deployed) {
setDeployed(deployed);
return this;
}
public ManagedConnection label(String label) {
setLabel(label);
return this;
}
}

View File

@ -0,0 +1,35 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.esb.platform.core.management.connection.to_remove.impl;
import java.util.ArrayList;
import java.util.List;
public class ManagedConnections {
public List<ManagedConnection> managedConnections = new ArrayList<>();
}

View File

@ -0,0 +1,33 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.esb.platform.core.management.connection.to_remove.impl;
public interface ManagedConnectionsListener {
public void added(ManagedConnections connections);
public void removed(ManagedConnections connections);
}

View File

@ -0,0 +1,102 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.esb.platform.core.management.connection.to_remove.tracker;
import java.util.List;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleEvent;
import org.osgi.framework.wiring.BundleCapability;
import org.osgi.framework.wiring.BundleRevision;
import org.osgi.util.tracker.BundleTrackerCustomizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.entaxy.esb.platform.core.management.connection.to_remove.ConnectionsMBean;
import ru.entaxy.esb.platform.core.management.connection.to_remove.impl.ManagedConnection;
import ru.entaxy.esb.platform.core.management.connection.to_remove.impl.ManagedConnections;
import ru.entaxy.esb.platform.core.management.connection.to_remove.impl.ManagedConnectionsListener;
import ru.entaxy.platform.base.support.CommonUtils;
public class DeployedConnectionCustomizer implements BundleTrackerCustomizer<ManagedConnections> {
private static final Logger log = LoggerFactory.getLogger(DeployedConnectionCustomizer.class);
protected ManagedConnectionsListener listener;
public DeployedConnectionCustomizer(ManagedConnectionsListener listener) {
this.listener = listener;
}
@Override
public ManagedConnections addingBundle(Bundle bundle, BundleEvent event) {
log.debug("INSPECTING: " + bundle.getBundleId());
BundleRevision revision = bundle.adapt(BundleRevision.class);
if (revision == null)
return null;
log.debug("REVISION FOUND: " + bundle.getBundleId());
List<BundleCapability> capabilities = revision.getDeclaredCapabilities(ConnectionsMBean.CAPABILITY_NAMESPACE);
if ((capabilities==null) || (capabilities.size()==0))
return null;
log.debug("CAPABILITIES FOUND: " + bundle.getBundleId());
ManagedConnections result = new ManagedConnections();
for (BundleCapability capability: capabilities) {
Object val = capability.getAttributes().get("name");
String name = val==null?"":val.toString();
log.debug("CAPABILITIES/NAME [" + name + "] : " + bundle.getBundleId());
if (!CommonUtils.isValid(name))
continue;
val = capability.getAttributes().get("platform");
boolean isPlatform = val==null?false:"true".equals(val.toString());
val = capability.getAttributes().get("label");
String label = val == null ? "" : val.toString();
ManagedConnection mc = (new ManagedConnection())
.name(name)
.platform(isPlatform)
.deployed(true)
.local(isPlatform)
.shared(true)
.bundleId(bundle.getBundleId())
.label(label);
result.managedConnections.add(mc);
}
listener.added(result);
return result;
}
@Override
public void modifiedBundle(Bundle bundle, BundleEvent event, ManagedConnections object) {
// TODO Auto-generated method stub
}
@Override
public void removedBundle(Bundle bundle, BundleEvent event, ManagedConnections object) {
log.debug("BUNDLE [{}] REMOVING", bundle.getBundleId());
listener.removed(object);
}
}

View File

@ -0,0 +1,43 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.esb.platform.core.management.connection.to_remove.tracker;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.BundleTracker;
import ru.entaxy.esb.platform.core.management.connection.to_remove.impl.ManagedConnections;
import ru.entaxy.esb.platform.core.management.connection.to_remove.impl.ManagedConnectionsListener;
public class DeployedConnectionTracker extends BundleTracker<ManagedConnections> {
public DeployedConnectionTracker(BundleContext bundleContext, ManagedConnectionsListener listener) {
super(bundleContext
, Bundle.ACTIVE | Bundle.INSTALLED | Bundle.RESOLVED | Bundle.STARTING | Bundle.STOPPING
, new DeployedConnectionCustomizer(listener));
}
}

View File

@ -0,0 +1,85 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection;
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 ConnectionMBean extends EntaxyRuntimeObjectMBean {
public static final String CONNECTION_KEY = "connection";
/*
* connection name
*/
@Attribute
default String getName() {
return getObjectId();
};
/*
* if connection is platform one or user defined
*/
@Attribute
public boolean isPlatform();
/*
* status of the bundle if connection is deplyed
*/
@Attribute
public String getStatus();
/*
* if the connection local or shared (cluster)
*/
@Attribute
public boolean isLocal();
/*
* if the connection is shared (single malt) or prototype-like (blended)
*/
@Attribute
public boolean isShared();
/*
* if the connection is deployed or only defined
*/
@Attribute
public boolean isDeployed();
/*
* connection label
*/
@Deprecated(since = "1.10", forRemoval = true)
@Attribute
default String getLabel() {
return getObjectLabel();
};
}

View File

@ -0,0 +1,59 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection;
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 ConnectionsMBean extends EntaxyRuntimeObjectContainerMBean {
public static final String CONNECTION_TYPE = "entaxy.runtime.connection";
public static final String CONNECTIONS_KEY = "category";
public static final String CONNECTIONS_KEY_VALUE = "connections";
@Operation(desc = "Gets connection's configuration")
public String getConnectionConfig(
@Parameter(name = "connectionName", desc = "Connection name") String connectionName) throws Exception;
@Operation(desc = "Start connection")
void startConnection(
@Parameter(name = "idOrName", desc = "Id or name of the connection") String idOrName) throws Exception;
@Operation(desc = "Stop connection")
void stopConnection(
@Parameter(name = "idOrName", desc = "Id or name of the connection") String idOrName) throws Exception;
@Operation(desc = "Uninstall connection")
void uninstallConnection(
@Parameter(name = "idOrName", desc = "Id or name of the connection") String idOrName) throws Exception;
}

View File

@ -0,0 +1,75 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection.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.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 = "connection-factory", supportedTypes = {"entaxy.runtime.connection", "entaxy.runtime.connection.*"})
@Component(service = EntaxyRuntimeObjectMBeanFactory.class, immediate = true)
public class ConnectionMBeanFactory extends AbstractMBeanFactory {
private static final Logger log = LoggerFactory.getLogger(ConnectionMBeanFactory.class);
@Reference(cardinality = ReferenceCardinality.MANDATORY, policyOption = ReferencePolicyOption.GREEDY)
ConnectionsMBeanImpl connectionsMBean;
@Override
public <T extends EntaxyRuntimeObjectMBean> T createMBean(EntaxyRuntimeObject entaxyRuntimeObject) {
ConnectionMBeanImpl beanImpl;
try {
beanImpl = new ConnectionMBeanImpl(entaxyRuntimeObject);
beanImpl.setParentMBean(connectionsMBean);
} catch (NotCompliantMBeanException e) {
log.error("Error creating ProfileMBeanImpl for [" + entaxyRuntimeObject.getObjectFullId() + "]", e);
return null;
}
return (T) beanImpl;
}
@Override
public List<? extends EntaxyRuntimeItemMBean> createMBeans() {
return Collections.singletonList(connectionsMBean);
}
}

View File

@ -0,0 +1,76 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection.impl;
import javax.management.NotCompliantMBeanException;
import ru.entaxy.esb.platform.base.management.core.api.EntaxyRuntimeTyped;
import ru.entaxy.platform.core.management.connection.ConnectionMBean;
import ru.entaxy.platform.core.management.object.ObjectMBean;
import ru.entaxy.platform.core.management.object.factory.AbstractObjectMBean;
import ru.entaxy.platform.objects.runtime.EntaxyRuntimeObject;
// @TODO move string to constant
@EntaxyRuntimeTyped(name = "entaxy.runtime.connection")
@ObjectMBean(subQualifierName = "connection")
public class ConnectionMBeanImpl extends AbstractObjectMBean<ConnectionMBean> implements ConnectionMBean {
public ConnectionMBeanImpl(EntaxyRuntimeObject entaxyRuntimeObject)
throws NotCompliantMBeanException {
super(ConnectionMBean.class, entaxyRuntimeObject);
}
@Override
public String getJMXSubQualifierValue() {
return getObjectId();
}
@Override
public boolean isPlatform() {
return entaxyRuntimeObject.getAttributeOrDefault("platform", "false").toString().equals("true");
}
@Override
public String getStatus() {
return getBundleState();
}
@Override
public boolean isLocal() {
return isPlatform();
}
@Override
public boolean isShared() {
return true;
}
@Override
public boolean isDeployed() {
return true;
}
}

View File

@ -0,0 +1,108 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection.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.ServiceScope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.entaxy.esb.platform.base.management.core.ManagementCore;
import ru.entaxy.esb.platform.base.management.core.Qualifier;
import ru.entaxy.platform.base.objects.EntaxyObjectService;
import ru.entaxy.platform.core.management.connection.ConnectionsMBean;
import ru.entaxy.platform.core.management.object.ContainerMBean;
import ru.entaxy.platform.core.management.object.factory.AbstractObjectContainerMBean;
import ru.entaxy.platform.objects.runtime.EntaxyRuntimeObjectManager;
@Component(
service = {ConnectionsMBeanImpl.class},
scope = ServiceScope.SINGLETON,
immediate = true)
@ContainerMBean(id = "connections", subQualifierName = "category", subQualifierValue = "connections")
public class ConnectionsMBeanImpl extends AbstractObjectContainerMBean<ConnectionsMBean>
implements ConnectionsMBean {
private static final Logger log = LoggerFactory.getLogger(ConnectionsMBeanImpl.class);
public static final Qualifier Q_CONNECTIONS = ManagementCore.Q_RUNTIME
.qualifier(ConnectionsMBean.CONNECTIONS_KEY, ConnectionsMBean.CONNECTIONS_KEY_VALUE);
protected BundleContext bundleContext;
@Reference(cardinality = ReferenceCardinality.MANDATORY)
EntaxyObjectService entaxyObjectService;
@Reference(cardinality = ReferenceCardinality.MANDATORY)
EntaxyRuntimeObjectManager entaxyRuntimeObjectManager;
public ConnectionsMBeanImpl() throws NotCompliantMBeanException {
super(ConnectionsMBean.class);
}
@Activate
public void activate(ComponentContext componentContext) {
this.bundleContext = componentContext.getBundleContext();
}
@Deactivate
public void deactivate() {}
@Override
public String getConnectionConfig(String connectionName) throws Exception {
return entaxyObjectService.findObject(connectionName, ConnectionsMBean.CONNECTION_TYPE).getConfiguration();
}
@Override
public void startConnection(String idOrName) throws Exception {
entaxyRuntimeObjectManager
.start(entaxyObjectService.findObject(idOrName, ConnectionsMBean.CONNECTION_TYPE).getObjectFullId());
}
@Override
public void stopConnection(String idOrName) throws Exception {
entaxyRuntimeObjectManager
.stopForced(entaxyObjectService.findObject(idOrName, ConnectionsMBean.CONNECTION_TYPE)
.getObjectFullId());
}
@Override
public void uninstallConnection(String idOrName) throws Exception {
entaxyRuntimeObjectManager
.uninstallForced(entaxyObjectService.findObject(idOrName, ConnectionsMBean.CONNECTION_TYPE)
.getObjectFullId());
}
}

View File

@ -0,0 +1,105 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection.support.legacy;
import java.util.List;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleEvent;
import org.osgi.framework.wiring.BundleCapability;
import org.osgi.framework.wiring.BundleRevision;
import org.osgi.util.tracker.BundleTrackerCustomizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.entaxy.platform.base.support.CommonUtils;
public class DeployedLegacyConnectionCustomizer implements BundleTrackerCustomizer<ManagedLegacyConnections> {
private static final Logger log = LoggerFactory.getLogger(DeployedLegacyConnectionCustomizer.class);
public static final String CAPABILITY_NAMESPACE = "entaxy.runtime.connection";
protected ManagedLegacyConnectionsListener listener;
public DeployedLegacyConnectionCustomizer(ManagedLegacyConnectionsListener listener) {
this.listener = listener;
}
@Override
public ManagedLegacyConnections addingBundle(Bundle bundle, BundleEvent event) {
log.debug("INSPECTING: " + bundle.getBundleId());
BundleRevision revision = bundle.adapt(BundleRevision.class);
if (revision == null)
return null;
log.debug("REVISION FOUND: " + bundle.getBundleId());
List<BundleCapability> capabilities = revision.getDeclaredCapabilities(CAPABILITY_NAMESPACE);
if ((capabilities == null) || (capabilities.size() == 0))
return null;
log.debug("CAPABILITIES FOUND: " + bundle.getBundleId());
ManagedLegacyConnections result = new ManagedLegacyConnections();
for (BundleCapability capability : capabilities) {
// process only legacy connections
if (capability.getAttributes().containsKey("objectId") && capability.getAttributes().containsKey("factory"))
continue;
Object val = capability.getAttributes().get("name");
String name = val == null ? "" : val.toString();
log.debug("CAPABILITIES/NAME [" + name + "] : " + bundle.getBundleId());
if (!CommonUtils.isValid(name))
continue;
val = capability.getAttributes().get("platform");
boolean isPlatform = val == null ? false : "true".equals(val.toString());
val = capability.getAttributes().get("label");
String label = val == null ? "" : val.toString();
ManagedLegacyConnection mc = (new ManagedLegacyConnection())
.name(name)
.platform(isPlatform)
.deployed(true)
.local(isPlatform)
.shared(true)
.bundleId(bundle.getBundleId())
.label(label);
result.managedConnections.add(mc);
}
listener.added(result);
return result;
}
@Override
public void modifiedBundle(Bundle bundle, BundleEvent event, ManagedLegacyConnections object) {
// TODO Auto-generated method stub
}
@Override
public void removedBundle(Bundle bundle, BundleEvent event, ManagedLegacyConnections object) {
log.debug("BUNDLE [{}] REMOVING", bundle.getBundleId());
listener.removed(object);
}
}

View File

@ -0,0 +1,39 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection.support.legacy;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.BundleTracker;
public class DeployedLegacyConnectionTracker extends BundleTracker<ManagedLegacyConnections> {
public DeployedLegacyConnectionTracker(BundleContext bundleContext, ManagedLegacyConnectionsListener listener) {
super(bundleContext, Bundle.ACTIVE | Bundle.INSTALLED | Bundle.RESOLVED | Bundle.STARTING | Bundle.STOPPING,
new DeployedLegacyConnectionCustomizer(listener));
}
}

View File

@ -0,0 +1,76 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection.support.legacy;
import ru.entaxy.esb.platform.base.management.core.api.RuntimeTypedMBean;
public interface LegacyConnectionMBean extends RuntimeTypedMBean {
public static final String CONNECTION_KEY = "connection";
/*
* connection name
*/
public String getName();
/*
* if connection is platform one or user defined
*/
public boolean isPlatform();
/*
* status of the bundle if connection is deplyed
*/
public String getStatus();
/*
* if the connection local or shared (cluster)
*/
public boolean isLocal();
/*
* if the connection is shared (single malt)
* or prototype-like (blended)
*/
public boolean isShared();
/*
* if the connection is deployed or only defined
*/
public boolean isDeployed();
/*
* bundle id for single malt connection
* null for blended
*/
public String getBundleId();
/*
* connection label
*/
public String getLabel();
}

View File

@ -0,0 +1,106 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection.support.legacy;
import javax.management.NotCompliantMBeanException;
import javax.management.StandardMBean;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import ru.entaxy.esb.platform.base.management.core.api.EntaxyRuntimeTyped;
// @TODO move string to constant
@EntaxyRuntimeTyped(name = "entaxy.runtime.connection")
public class LegacyConnectionMBeanImpl extends StandardMBean implements LegacyConnectionMBean {
protected ManagedLegacyConnection connection;
protected BundleContext bundleContext;
public LegacyConnectionMBeanImpl(BundleContext bundleContext, ManagedLegacyConnection connection)
throws NotCompliantMBeanException {
super(LegacyConnectionMBean.class);
this.bundleContext = bundleContext;
this.connection = connection;
}
@Override
public String getName() {
return connection.getName();
}
@Override
public boolean isPlatform() {
return connection.isPlatform();
}
@Override
public String getStatus() {
int state = this.bundleContext.getBundle(connection.getBundleId()).getState();
switch (state) {
case Bundle.ACTIVE:
return "Active";
case Bundle.INSTALLED:
return "Installed";
case Bundle.RESOLVED:
return "Resolved";
case Bundle.STARTING:
return "Starting";
case Bundle.STOPPING:
return "Stopping";
default:
return "Unknown";
}
}
@Override
public boolean isLocal() {
return connection.isLocal;
}
@Override
public boolean isShared() {
return connection.isShared();
}
@Override
public boolean isDeployed() {
return connection.isDeployed;
}
@Override
public String getBundleId() {
return connection.getBundleId() + "";
}
@Override
public String getLabel() {
return connection.getLabel();
}
}

View File

@ -0,0 +1,125 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection.support.legacy;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
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.ServiceScope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.entaxy.esb.platform.base.management.core.ManagementCore;
import ru.entaxy.esb.platform.base.management.core.Qualifier;
import ru.entaxy.esb.platform.core.management.connection.to_remove.ConnectionMBean;
import ru.entaxy.esb.platform.core.management.connection.to_remove.ConnectionsMBean;
import ru.entaxy.platform.base.objects.EntaxyObjectService;
@Component(
service = {LegacyConnectionsManager.class},
scope = ServiceScope.SINGLETON,
immediate = true)
public class LegacyConnectionsManager implements ManagedLegacyConnectionsListener {
private static final Logger log = LoggerFactory.getLogger(LegacyConnectionsManager.class);
public static final Qualifier Q_CONNECTIONS = ManagementCore.Q_RUNTIME
.qualifier(ConnectionsMBean.CONNECTIONS_KEY, ConnectionsMBean.CONNECTIONS_KEY_VALUE);
protected BundleContext bundleContext;
protected DeployedLegacyConnectionTracker tracker;
@Reference(cardinality = ReferenceCardinality.MANDATORY)
EntaxyObjectService entaxyObjectService;
protected static class ManagedConnectionDescriptor {
ManagedLegacyConnection connection;
ServiceRegistration<LegacyConnectionMBean> registration;
}
protected Map<String, ManagedConnectionDescriptor> managed = new HashMap<>();
public LegacyConnectionsManager() {
super();
}
@Activate
public void activate(ComponentContext componentContext) {
this.bundleContext = componentContext.getBundleContext();
tracker = new DeployedLegacyConnectionTracker(bundleContext, this);
tracker.open();
}
@Deactivate
public void deactivate() {
tracker.close();
}
@Override
public void added(ManagedLegacyConnections connections) {
Hashtable props = new Hashtable<>();
// String jmxObjectName = "jmx.objectname";
// String objectName = "ru.entaxy.esb:group=platform,category=connections,connection=";
for (ManagedLegacyConnection connection : connections.managedConnections) {
if (managed.containsKey(connection.getName()))
this.managed.get(connection.getName()).registration.unregister();
try {
LegacyConnectionMBeanImpl service = new LegacyConnectionMBeanImpl(bundleContext, connection);
ManagedConnectionDescriptor descriptor = new ManagedConnectionDescriptor();
descriptor.connection = connection;
props.put(ManagementCore.JMX_OBJECTNAME,
Q_CONNECTIONS.qualifier(ConnectionMBean.CONNECTION_KEY, connection.getName()).getValue());
descriptor.registration = bundleContext.registerService(LegacyConnectionMBean.class, service, props);
managed.put(connection.getName(), descriptor);
} catch (Exception e) {
log.error("Error adding connection [" + connection.getName() + "]", e);
}
}
}
@Override
public void removed(ManagedLegacyConnections connections) {
for (ManagedLegacyConnection connection : connections.managedConnections) {
if (managed.containsKey(connection.getName())) {
this.managed.get(connection.getName()).registration.unregister();
this.managed.remove(connection.getName());
}
}
}
}

View File

@ -0,0 +1,116 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection.support.legacy;
public class ManagedLegacyConnection {
protected String name;
protected boolean isPlatform;
protected boolean isLocal;
protected boolean isShared;
protected long bundleId;
protected boolean isDeployed;
protected String label;
public String getName() {
return name;
}
public boolean isPlatform() {
return isPlatform;
}
public boolean isLocal() {
return isLocal;
}
public boolean isShared() {
return isShared;
}
public long getBundleId() {
return bundleId;
}
public boolean isDeployed() {
return isDeployed;
}
public String getLabel() {
return label;
}
public void setName(String name) {
this.name = name;
}
public void setPlatform(boolean isPlatform) {
this.isPlatform = isPlatform;
}
public void setLocal(boolean isLocal) {
this.isLocal = isLocal;
}
public void setShared(boolean isShared) {
this.isShared = isShared;
}
public void setBundleId(long bundleId) {
this.bundleId = bundleId;
}
public void setDeployed(boolean isDeployed) {
this.isDeployed = isDeployed;
}
public void setLabel(String label) {
this.label = label;
}
public ManagedLegacyConnection name(String name) {
setName(name);
return this;
}
public ManagedLegacyConnection platform(boolean isPlatform) {
setPlatform(isPlatform);
return this;
}
public ManagedLegacyConnection local(boolean isLocal) {
setLocal(isLocal);
return this;
}
public ManagedLegacyConnection shared(boolean isShared) {
setShared(isShared);
return this;
}
public ManagedLegacyConnection bundleId(long bundleId) {
setBundleId(bundleId);
return this;
}
public ManagedLegacyConnection deployed(boolean deployed) {
setDeployed(deployed);
return this;
}
public ManagedLegacyConnection label(String label) {
setLabel(label);
return this;
}
}

View File

@ -0,0 +1,35 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection.support.legacy;
import java.util.ArrayList;
import java.util.List;
public class ManagedLegacyConnections {
public List<ManagedLegacyConnection> managedConnections = new ArrayList<>();
}

View File

@ -0,0 +1,34 @@
/*-
* ~~~~~~licensing~~~~~~
* connection-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.connection.support.legacy;
public interface ManagedLegacyConnectionsListener {
public void added(ManagedLegacyConnections connections);
public void removed(ManagedLegacyConnections connections);
}