This closes #138 JNDI Name on XARecoveryConfig

This commit is contained in:
Clebert Suconic 2015-08-27 14:09:33 -04:00
commit bdd04ebc53
8 changed files with 57 additions and 19 deletions

View File

@ -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)) {

View File

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

View File

@ -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() {

View File

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

View File

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

View File

@ -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() {

View File

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

View File

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