This closes #138 JNDI Name on XARecoveryConfig
This commit is contained in:
commit
bdd04ebc53
|
@ -891,7 +891,7 @@ public final class JMSBridgeImpl implements JMSBridge {
|
||||||
Object cf = cff.createConnectionFactory();
|
Object cf = cff.createConnectionFactory();
|
||||||
|
|
||||||
if (cf instanceof ActiveMQConnectionFactory && registry != null) {
|
if (cf instanceof ActiveMQConnectionFactory && registry != null) {
|
||||||
registry.register(XARecoveryConfig.newConfig((ActiveMQConnectionFactory) cf, username, password));
|
registry.register(XARecoveryConfig.newConfig((ActiveMQConnectionFactory) cf, username, password, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qualityOfServiceMode == QualityOfServiceMode.ONCE_AND_ONLY_ONCE && !(cf instanceof XAConnectionFactory)) {
|
if (qualityOfServiceMode == QualityOfServiceMode.ONCE_AND_ONLY_ONCE && !(cf instanceof XAConnectionFactory)) {
|
||||||
|
|
|
@ -26,7 +26,9 @@ import javax.resource.spi.ResourceAdapter;
|
||||||
import javax.resource.spi.ResourceAdapterAssociation;
|
import javax.resource.spi.ResourceAdapterAssociation;
|
||||||
import javax.security.auth.Subject;
|
import javax.security.auth.Subject;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
|
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
|
||||||
|
@ -158,7 +160,10 @@ public final class ActiveMQRAManagedConnectionFactory implements ManagedConnecti
|
||||||
private synchronized void registerRecovery() {
|
private synchronized void registerRecovery() {
|
||||||
if (recoveryConnectionFactory == null) {
|
if (recoveryConnectionFactory == null) {
|
||||||
recoveryConnectionFactory = ra.createRecoveryActiveMQConnectionFactory(mcfProperties);
|
recoveryConnectionFactory = ra.createRecoveryActiveMQConnectionFactory(mcfProperties);
|
||||||
resourceRecovery = ra.getRecoveryManager().register(recoveryConnectionFactory, null, null);
|
|
||||||
|
Map<String, String> recoveryConfProps = new HashMap<String, String>();
|
||||||
|
recoveryConfProps.put(XARecoveryConfig.JNDI_NAME_PROPERTY_KEY, ra.getJndiName());
|
||||||
|
resourceRecovery = ra.getRecoveryManager().register(recoveryConnectionFactory, null, null, recoveryConfProps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ import org.apache.activemq.artemis.ra.inflow.ActiveMQActivationSpec;
|
||||||
import org.apache.activemq.artemis.ra.recovery.RecoveryManager;
|
import org.apache.activemq.artemis.ra.recovery.RecoveryManager;
|
||||||
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
|
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
|
||||||
import org.apache.activemq.artemis.service.extensions.ServiceUtils;
|
import org.apache.activemq.artemis.service.extensions.ServiceUtils;
|
||||||
|
import org.apache.activemq.artemis.service.extensions.xa.recovery.XARecoveryConfig;
|
||||||
import org.apache.activemq.artemis.utils.SensitiveDataCodec;
|
import org.apache.activemq.artemis.utils.SensitiveDataCodec;
|
||||||
import org.jgroups.JChannel;
|
import org.jgroups.JChannel;
|
||||||
|
|
||||||
|
@ -1545,7 +1546,10 @@ public class ActiveMQResourceAdapter implements ResourceAdapter, Serializable {
|
||||||
raProperties.init();
|
raProperties.init();
|
||||||
defaultActiveMQConnectionFactory = createActiveMQConnectionFactory(raProperties);
|
defaultActiveMQConnectionFactory = createActiveMQConnectionFactory(raProperties);
|
||||||
recoveryActiveMQConnectionFactory = createRecoveryActiveMQConnectionFactory(raProperties);
|
recoveryActiveMQConnectionFactory = createRecoveryActiveMQConnectionFactory(raProperties);
|
||||||
recoveryManager.register(recoveryActiveMQConnectionFactory, raProperties.getUserName(), raProperties.getPassword());
|
|
||||||
|
Map<String, String> recoveryConfProps = new HashMap<String, String>();
|
||||||
|
recoveryConfProps.put(XARecoveryConfig.JNDI_NAME_PROPERTY_KEY, getJndiName());
|
||||||
|
recoveryManager.register(recoveryActiveMQConnectionFactory, raProperties.getUserName(), raProperties.getPassword(), recoveryConfProps);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<ActivationSpec, ActiveMQActivation> getActivations() {
|
public Map<ActivationSpec, ActiveMQActivation> getActivations() {
|
||||||
|
|
|
@ -30,7 +30,9 @@ import javax.resource.spi.work.WorkManager;
|
||||||
import javax.transaction.xa.XAResource;
|
import javax.transaction.xa.XAResource;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import org.apache.activemq.artemis.api.core.ActiveMQException;
|
import org.apache.activemq.artemis.api.core.ActiveMQException;
|
||||||
|
@ -333,7 +335,9 @@ public class ActiveMQActivation {
|
||||||
handler.start();
|
handler.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
resourceRecovery = ra.getRecoveryManager().register(factory, spec.getUser(), spec.getPassword());
|
Map<String, String> recoveryConfProps = new HashMap<String, String>();
|
||||||
|
recoveryConfProps.put(XARecoveryConfig.JNDI_NAME_PROPERTY_KEY, ra.getJndiName());
|
||||||
|
resourceRecovery = ra.getRecoveryManager().register(factory, spec.getUser(), spec.getPassword(), recoveryConfProps);
|
||||||
|
|
||||||
ActiveMQRALogger.LOGGER.debug("Setup complete " + this);
|
ActiveMQRALogger.LOGGER.debug("Setup complete " + this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.apache.activemq.artemis.service.extensions.xa.recovery.ActiveMQRegist
|
||||||
import org.apache.activemq.artemis.service.extensions.xa.recovery.XARecoveryConfig;
|
import org.apache.activemq.artemis.service.extensions.xa.recovery.XARecoveryConfig;
|
||||||
import org.apache.activemq.artemis.utils.ConcurrentHashSet;
|
import org.apache.activemq.artemis.utils.ConcurrentHashSet;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.ServiceLoader;
|
import java.util.ServiceLoader;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -43,10 +44,10 @@ public final class RecoveryManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public XARecoveryConfig register(ActiveMQConnectionFactory factory, String userName, String password) {
|
public XARecoveryConfig register(ActiveMQConnectionFactory factory, String userName, String password, Map<String, String> properties) {
|
||||||
ActiveMQRALogger.LOGGER.debug("registering recovery for factory : " + factory);
|
ActiveMQRALogger.LOGGER.debug("registering recovery for factory : " + factory);
|
||||||
|
|
||||||
XARecoveryConfig config = XARecoveryConfig.newConfig(factory, userName, password);
|
XARecoveryConfig config = XARecoveryConfig.newConfig(factory, userName, password, properties);
|
||||||
resources.add(config);
|
resources.add(config);
|
||||||
if (registry != null) {
|
if (registry != null) {
|
||||||
registry.register(config);
|
registry.register(config);
|
||||||
|
|
|
@ -49,8 +49,10 @@ public class ActiveMQXAResourceWrapperImpl implements ActiveMQXAResourceWrapper
|
||||||
//this.productVersion = VersionLoader.getVersion().getFullVersion();
|
//this.productVersion = VersionLoader.getVersion().getFullVersion();
|
||||||
this.productVersion = (String) properties.get(ACTIVEMQ_PRODUCT_VERSION);
|
this.productVersion = (String) properties.get(ACTIVEMQ_PRODUCT_VERSION);
|
||||||
|
|
||||||
this.jndiNameNodeId = properties.get(ACTIVEMQ_JNDI_NAME) +
|
String jndiName = (String) properties.get(ACTIVEMQ_JNDI_NAME);
|
||||||
" NodeId:" + properties.get(ACTIVEMQ_NODE_ID);
|
String nodeId = "NodeId:" + properties.get(ACTIVEMQ_NODE_ID);
|
||||||
|
|
||||||
|
this.jndiNameNodeId = jndiName == null ? nodeId : jndiName + " " + nodeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public XAResource getResource() {
|
public XAResource getResource() {
|
||||||
|
|
|
@ -75,7 +75,7 @@ public class ActiveMQXAResourceRecovery {
|
||||||
String username = parser.getUsername();
|
String username = parser.getUsername();
|
||||||
String password = parser.getPassword();
|
String password = parser.getPassword();
|
||||||
TransportConfiguration transportConfiguration = new TransportConfiguration(connectorFactoryClassName, connectorParams);
|
TransportConfiguration transportConfiguration = new TransportConfiguration(connectorFactoryClassName, connectorParams);
|
||||||
xaRecoveryConfigs[i] = new XARecoveryConfig(false, new TransportConfiguration[]{transportConfiguration}, username, password);
|
xaRecoveryConfigs[i] = new XARecoveryConfig(false, new TransportConfiguration[]{transportConfiguration}, username, password, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = new ActiveMQXAResourceWrapper(xaRecoveryConfigs);
|
res = new ActiveMQXAResourceWrapper(xaRecoveryConfigs);
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
package org.apache.activemq.artemis.service.extensions.xa.recovery;
|
package org.apache.activemq.artemis.service.extensions.xa.recovery;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration;
|
import org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration;
|
||||||
import org.apache.activemq.artemis.api.core.TransportConfiguration;
|
import org.apache.activemq.artemis.api.core.TransportConfiguration;
|
||||||
|
@ -31,18 +34,21 @@ import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
|
||||||
*/
|
*/
|
||||||
public class XARecoveryConfig {
|
public class XARecoveryConfig {
|
||||||
|
|
||||||
|
public static final String JNDI_NAME_PROPERTY_KEY = "JNDI_NAME";
|
||||||
|
|
||||||
private final boolean ha;
|
private final boolean ha;
|
||||||
private final TransportConfiguration[] transportConfiguration;
|
private final TransportConfiguration[] transportConfiguration;
|
||||||
private final DiscoveryGroupConfiguration discoveryConfiguration;
|
private final DiscoveryGroupConfiguration discoveryConfiguration;
|
||||||
private final String username;
|
private final String username;
|
||||||
private final String password;
|
private final String password;
|
||||||
|
private final Map<String, String> properties;
|
||||||
|
|
||||||
public static XARecoveryConfig newConfig(ActiveMQConnectionFactory factory, String userName, String password) {
|
public static XARecoveryConfig newConfig(ActiveMQConnectionFactory factory, String userName, String password, Map<String, String> properties) {
|
||||||
if (factory.getServerLocator().getDiscoveryGroupConfiguration() != null) {
|
if (factory.getServerLocator().getDiscoveryGroupConfiguration() != null) {
|
||||||
return new XARecoveryConfig(factory.getServerLocator().isHA(), factory.getServerLocator().getDiscoveryGroupConfiguration(), userName, password);
|
return new XARecoveryConfig(factory.getServerLocator().isHA(), factory.getServerLocator().getDiscoveryGroupConfiguration(), userName, password, properties);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return new XARecoveryConfig(factory.getServerLocator().isHA(), factory.getServerLocator().getStaticTransportConfigurations(), userName, password);
|
return new XARecoveryConfig(factory.getServerLocator().isHA(), factory.getServerLocator().getStaticTransportConfigurations(), userName, password, properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -50,23 +56,27 @@ public class XARecoveryConfig {
|
||||||
public XARecoveryConfig(final boolean ha,
|
public XARecoveryConfig(final boolean ha,
|
||||||
final TransportConfiguration[] transportConfiguration,
|
final TransportConfiguration[] transportConfiguration,
|
||||||
final String username,
|
final String username,
|
||||||
final String password) {
|
final String password,
|
||||||
|
final Map<String, String> properties) {
|
||||||
this.transportConfiguration = transportConfiguration;
|
this.transportConfiguration = transportConfiguration;
|
||||||
this.discoveryConfiguration = null;
|
this.discoveryConfiguration = null;
|
||||||
this.username = username;
|
this.username = username;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
this.ha = ha;
|
this.ha = ha;
|
||||||
|
this.properties = properties == null ? Collections.unmodifiableMap(new HashMap<String, String>()) : Collections.unmodifiableMap(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
public XARecoveryConfig(final boolean ha,
|
public XARecoveryConfig(final boolean ha,
|
||||||
final DiscoveryGroupConfiguration discoveryConfiguration,
|
final DiscoveryGroupConfiguration discoveryConfiguration,
|
||||||
final String username,
|
final String username,
|
||||||
final String password) {
|
final String password,
|
||||||
|
final Map<String, String> properties) {
|
||||||
this.discoveryConfiguration = discoveryConfiguration;
|
this.discoveryConfiguration = discoveryConfiguration;
|
||||||
this.transportConfiguration = null;
|
this.transportConfiguration = null;
|
||||||
this.username = username;
|
this.username = username;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
this.ha = ha;
|
this.ha = ha;
|
||||||
|
this.properties = properties == null ? Collections.unmodifiableMap(new HashMap<String, String>()) : Collections.unmodifiableMap(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isHA() {
|
public boolean isHA() {
|
||||||
|
@ -89,6 +99,10 @@ public class XARecoveryConfig {
|
||||||
return password;
|
return password;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getProperties() {
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a serverLocator using the configuration
|
* Create a serverLocator using the configuration
|
||||||
*
|
*
|
||||||
|
@ -142,10 +156,18 @@ public class XARecoveryConfig {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "XARecoveryConfig [transportConfiguration = " + Arrays.toString(transportConfiguration) +
|
StringBuilder builder = new StringBuilder();
|
||||||
", discoveryConfiguration = " + discoveryConfiguration +
|
|
||||||
", username=" +
|
builder.append("XARecoveryConfig [transportConfiguration=" + Arrays.toString(transportConfiguration));
|
||||||
username +
|
builder.append(", discoveryConfiguration=" + discoveryConfiguration);
|
||||||
", password=****]";
|
builder.append(", username=" + username);
|
||||||
|
builder.append(", password=****");
|
||||||
|
|
||||||
|
for (Map.Entry<String, String> entry : properties.entrySet()) {
|
||||||
|
builder.append(", " + entry.getKey() + "=" + entry.getValue());
|
||||||
|
}
|
||||||
|
builder.append("]");
|
||||||
|
|
||||||
|
return builder.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue