/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq.artemis.tests.integration.ra; import javax.jms.Connection; import javax.resource.ResourceException; import javax.resource.spi.endpoint.MessageEndpoint; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.concurrent.CountDownLatch; import org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration; import org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory; import org.apache.activemq.artemis.api.core.client.ClientSession; import org.apache.activemq.artemis.api.core.client.ClientSessionFactory; import org.apache.activemq.artemis.api.core.client.ServerLocator; import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient; import org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl; import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import org.apache.activemq.artemis.jms.client.ActiveMQDestination; import org.apache.activemq.artemis.ra.ActiveMQResourceAdapter; import org.apache.activemq.artemis.ra.inflow.ActiveMQActivation; import org.apache.activemq.artemis.ra.inflow.ActiveMQActivationSpec; import org.apache.activemq.artemis.service.extensions.xa.recovery.XARecoveryConfig; import org.apache.activemq.artemis.tests.unit.ra.BootstrapContext; import org.apache.activemq.artemis.tests.unit.ra.MessageEndpointFactory; import org.apache.activemq.artemis.utils.DefaultSensitiveStringCodec; import org.junit.Test; public class ResourceAdapterTest extends ActiveMQRATestBase { @Test public void testStartStopActivationManyTimes() throws Exception { ServerLocator locator = createInVMNonHALocator(); ClientSessionFactory factory = locator.createSessionFactory(); ClientSession session = factory.createSession(false, false, false); ActiveMQDestination queue = (ActiveMQDestination) ActiveMQJMSClient.createQueue("test"); session.createQueue(queue.getSimpleAddress(), queue.getSimpleAddress(), true); session.close(); ActiveMQResourceAdapter ra = new ActiveMQResourceAdapter(); ra.setConnectorClassName(INVM_CONNECTOR_FACTORY); ra.setUserName("userGlobal"); ra.setPassword("passwordGlobal"); ra.start(new BootstrapContext()); Connection conn = ra.getDefaultActiveMQConnectionFactory().createConnection(); conn.close(); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(ra); spec.setUseJNDI(false); spec.setUser("user"); spec.setPassword("password"); spec.setDestinationType("javax.jms.Topic"); spec.setDestination("test"); spec.setMinSession(1); spec.setMaxSession(15); ActiveMQActivation activation = new ActiveMQActivation(ra, new MessageEndpointFactory(), spec); ServerLocatorImpl serverLocator = (ServerLocatorImpl) ra.getDefaultActiveMQConnectionFactory().getServerLocator(); Set<XARecoveryConfig> resources = ra.getRecoveryManager().getResources(); for (int i = 0; i < 10; i++) { System.out.println(i); activation.start(); assertEquals(1, resources.size()); activation.stop(); } ra.stop(); assertEquals(0, resources.size()); locator.close(); } @Test public void testStartStop() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); CountDownLatch latch = new CountDownLatch(1); DummyMessageEndpoint endpoint = new DummyMessageEndpoint(latch); DummyMessageEndpointFactory endpointFactory = new DummyMessageEndpointFactory(endpoint, false); qResourceAdapter.endpointActivation(endpointFactory, spec); qResourceAdapter.stop(); assertTrue(endpoint.released); } @Test public void testSetters() throws Exception { Boolean b = Boolean.TRUE; Long l = (long) 1000; Integer i = 1000; Double d = (double) 1000; String className = "testConnector"; String backupConn = "testBackupConnector"; String testConfig = "key=val"; String testid = "testid"; String testBalancer = "testBalancer"; String testParams = "key=val"; String testaddress = "testaddress"; String testpass = "testpass"; String testuser = "testuser"; ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); testParams(b, l, i, d, className, backupConn, testConfig, testid, testBalancer, testParams, testaddress, testpass, testuser, qResourceAdapter); } @Test public void testSetters2() throws Exception { Boolean b = Boolean.FALSE; Long l = (long) 2000; Integer i = 2000; Double d = (double) 2000; String className = "testConnector2"; String backupConn = "testBackupConnector2"; String testConfig = "key2=val2"; String testid = "testid2"; String testBalancer = "testBalancer2"; String testParams = "key=val2"; String testaddress = "testaddress2"; String testpass = "testpass2"; String testuser = "testuser2"; ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); testParams(b, l, i, d, className, backupConn, testConfig, testid, testBalancer, testParams, testaddress, testpass, testuser, qResourceAdapter); } private void testParams(Boolean b, Long aLong, Integer i, Double d, String className, String backupConn, String testConfig, String testid, String testBalancer, String testParams, String testaddress, String testpass, String testuser, ActiveMQResourceAdapter qResourceAdapter) { qResourceAdapter.setUseLocalTx(b); qResourceAdapter.setConnectorClassName(className); qResourceAdapter.setAutoGroup(b); qResourceAdapter.setBlockOnAcknowledge(b); qResourceAdapter.setBlockOnDurableSend(b); qResourceAdapter.setBlockOnNonDurableSend(b); qResourceAdapter.setCallTimeout(aLong); qResourceAdapter.setClientFailureCheckPeriod(aLong); qResourceAdapter.setClientID(testid); qResourceAdapter.setConfirmationWindowSize(i); qResourceAdapter.setConnectionLoadBalancingPolicyClassName(testBalancer); qResourceAdapter.setConnectionParameters(testParams); qResourceAdapter.setConnectionTTL(aLong); qResourceAdapter.setConsumerMaxRate(i); qResourceAdapter.setConsumerWindowSize(i); qResourceAdapter.setDiscoveryAddress(testaddress); qResourceAdapter.setDiscoveryInitialWaitTimeout(aLong); qResourceAdapter.setDiscoveryPort(i); qResourceAdapter.setDiscoveryRefreshTimeout(aLong); qResourceAdapter.setDupsOKBatchSize(i); qResourceAdapter.setMinLargeMessageSize(i); qResourceAdapter.setPassword(testpass); qResourceAdapter.setPreAcknowledge(b); qResourceAdapter.setProducerMaxRate(i); qResourceAdapter.setReconnectAttempts(i); qResourceAdapter.setRetryInterval(aLong); qResourceAdapter.setRetryIntervalMultiplier(d); qResourceAdapter.setScheduledThreadPoolMaxSize(i); qResourceAdapter.setThreadPoolMaxSize(i); qResourceAdapter.setTransactionBatchSize(i); qResourceAdapter.setUseGlobalPools(b); qResourceAdapter.setUseLocalTx(b); qResourceAdapter.setUserName(testuser); assertEquals(qResourceAdapter.getUseLocalTx(), b); assertEquals(qResourceAdapter.getConnectorClassName(), className); assertEquals(qResourceAdapter.getAutoGroup(), b); // assertEquals(qResourceAdapter.getBackupTransportConfiguration(),"testConfig"); assertEquals(qResourceAdapter.getBlockOnAcknowledge(), b); assertEquals(qResourceAdapter.getBlockOnDurableSend(), b); assertEquals(qResourceAdapter.getBlockOnNonDurableSend(), b); assertEquals(qResourceAdapter.getCallTimeout(), aLong); assertEquals(qResourceAdapter.getClientFailureCheckPeriod(), aLong); assertEquals(qResourceAdapter.getClientID(), testid); assertEquals(qResourceAdapter.getConfirmationWindowSize(), i); assertEquals(qResourceAdapter.getConnectionLoadBalancingPolicyClassName(), testBalancer); assertEquals(qResourceAdapter.getConnectionParameters(), testParams); assertEquals(qResourceAdapter.getConnectionTTL(), aLong); assertEquals(qResourceAdapter.getConsumerMaxRate(), i); assertEquals(qResourceAdapter.getConsumerWindowSize(), i); assertEquals(qResourceAdapter.getDiscoveryAddress(), testaddress); assertEquals(qResourceAdapter.getDiscoveryInitialWaitTimeout(), aLong); assertEquals(qResourceAdapter.getDiscoveryPort(), i); assertEquals(qResourceAdapter.getDiscoveryRefreshTimeout(), aLong); assertEquals(qResourceAdapter.getDupsOKBatchSize(), i); assertEquals(qResourceAdapter.getMinLargeMessageSize(), i); assertEquals(qResourceAdapter.getPassword(), testpass); assertEquals(qResourceAdapter.getPreAcknowledge(), b); assertEquals(qResourceAdapter.getProducerMaxRate(), i); assertEquals(qResourceAdapter.getReconnectAttempts(), i); assertEquals(qResourceAdapter.getRetryInterval(), aLong); assertEquals(qResourceAdapter.getRetryIntervalMultiplier(), d); assertEquals(qResourceAdapter.getScheduledThreadPoolMaxSize(), i); assertEquals(qResourceAdapter.getThreadPoolMaxSize(), i); assertEquals(qResourceAdapter.getTransactionBatchSize(), i); assertEquals(qResourceAdapter.getUseGlobalPools(), b); assertEquals(qResourceAdapter.getUseLocalTx(), b); assertEquals(qResourceAdapter.getUserName(), testuser); } // https://issues.jboss.org/browse/JBPAPP-5790 @Test public void testResourceAdapterSetup() throws Exception { ActiveMQResourceAdapter adapter = new ActiveMQResourceAdapter(); adapter.setDiscoveryAddress("231.1.1.1"); ActiveMQConnectionFactory factory = adapter.getDefaultActiveMQConnectionFactory(); long initWait = factory.getDiscoveryGroupConfiguration().getDiscoveryInitialWaitTimeout(); long refresh = factory.getDiscoveryGroupConfiguration().getRefreshTimeout(); int port = ((UDPBroadcastEndpointFactory) factory.getDiscoveryGroupConfiguration().getBroadcastEndpointFactory()).getGroupPort(); // defaults assertEquals(10000L, refresh); assertEquals(10000L, initWait); assertEquals(9876, port); adapter = new ActiveMQResourceAdapter(); adapter.setDiscoveryAddress("231.1.1.1"); adapter.setDiscoveryPort(9876); adapter.setDiscoveryRefreshTimeout(1234L); factory = adapter.getDefaultActiveMQConnectionFactory(); initWait = factory.getDiscoveryGroupConfiguration().getDiscoveryInitialWaitTimeout(); refresh = factory.getDiscoveryGroupConfiguration().getRefreshTimeout(); // override refresh timeout assertEquals(1234L, refresh); assertEquals(10000L, initWait); adapter = new ActiveMQResourceAdapter(); adapter.setDiscoveryAddress("231.1.1.1"); adapter.setDiscoveryPort(9876); adapter.setDiscoveryInitialWaitTimeout(9999L); factory = adapter.getDefaultActiveMQConnectionFactory(); initWait = factory.getDiscoveryGroupConfiguration().getDiscoveryInitialWaitTimeout(); refresh = factory.getDiscoveryGroupConfiguration().getRefreshTimeout(); // override initial wait assertEquals(10000L, refresh); assertEquals(9999L, initWait); adapter = new ActiveMQResourceAdapter(); adapter.setDiscoveryAddress("231.1.1.1"); adapter.setDiscoveryPort(9876); adapter.setDiscoveryInitialWaitTimeout(9999L); factory = adapter.getDefaultActiveMQConnectionFactory(); initWait = factory.getDiscoveryGroupConfiguration().getDiscoveryInitialWaitTimeout(); refresh = factory.getDiscoveryGroupConfiguration().getRefreshTimeout(); // override initial wait assertEquals(10000L, refresh); assertEquals(9999L, initWait); } // https://issues.jboss.org/browse/JBPAPP-5836 @Test public void testResourceAdapterSetupOverrideCFParams() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); qResourceAdapter.setConnectionParameters("server-id=0"); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); // now override the connector class spec.setConnectorClassName(NETTY_CONNECTOR_FACTORY); spec.setConnectionParameters("port=61616"); DummyMessageEndpoint endpoint = new DummyMessageEndpoint(new CountDownLatch(1)); DummyMessageEndpointFactory endpointFactory = new DummyMessageEndpointFactory(endpoint, false); qResourceAdapter.endpointActivation(endpointFactory, spec); //make sure 2 recovery resources, one is default, one is in activation. assertEquals(2, qResourceAdapter.getRecoveryManager().getResources().size()); qResourceAdapter.stop(); assertTrue(endpoint.released); } @Test public void testRecoveryRegistrationOnFailure() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); qResourceAdapter.setConnectionParameters("server-id=0"); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); // now override the connector class spec.setConnectorClassName(NETTY_CONNECTOR_FACTORY); spec.setSetupAttempts(2); // using a wrong port number spec.setConnectionParameters("port=6776"); DummyMessageEndpoint endpoint = new DummyMessageEndpoint(new CountDownLatch(1)); DummyMessageEndpointFactory endpointFactory = new DummyMessageEndpointFactory(endpoint, false); qResourceAdapter.endpointActivation(endpointFactory, spec); assertEquals(1, qResourceAdapter.getRecoveryManager().getResources().size()); qResourceAdapter.stop(); assertFalse(endpoint.released); } @Test public void testResourceAdapterSetupOverrideNoCFParams() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); qResourceAdapter.setConnectionParameters("server-id=0"); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); CountDownLatch latch = new CountDownLatch(1); DummyMessageEndpoint endpoint = new DummyMessageEndpoint(latch); DummyMessageEndpointFactory endpointFactory = new DummyMessageEndpointFactory(endpoint, false); qResourceAdapter.endpointActivation(endpointFactory, spec); qResourceAdapter.stop(); assertFalse(spec.isHasBeenUpdated()); assertTrue(endpoint.released); } @Test public void testResourceAdapterSetupNoOverrideDiscovery() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setDiscoveryAddress("231.6.6.6"); qResourceAdapter.setDiscoveryPort(1234); qResourceAdapter.setDiscoveryRefreshTimeout(1L); qResourceAdapter.setDiscoveryInitialWaitTimeout(1L); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); ActiveMQConnectionFactory fac = qResourceAdapter.getConnectionFactory(spec); DiscoveryGroupConfiguration dc = fac.getServerLocator().getDiscoveryGroupConfiguration(); UDPBroadcastEndpointFactory udpDg = (UDPBroadcastEndpointFactory) dc.getBroadcastEndpointFactory(); assertEquals(udpDg.getGroupAddress(), "231.6.6.6"); assertEquals(udpDg.getGroupPort(), 1234); assertEquals(dc.getRefreshTimeout(), 1L); assertEquals(dc.getDiscoveryInitialWaitTimeout(), 1L); qResourceAdapter.stop(); } @Test public void testResourceAdapterSetupOverrideDiscovery() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setDiscoveryAddress("231.7.7.7"); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); spec.setSetupAttempts(0); spec.setDiscoveryAddress("231.6.6.6"); spec.setDiscoveryPort(1234); spec.setDiscoveryInitialWaitTimeout(1L); spec.setDiscoveryRefreshTimeout(1L); ActiveMQConnectionFactory fac = qResourceAdapter.getConnectionFactory(spec); DiscoveryGroupConfiguration dc = fac.getServerLocator().getDiscoveryGroupConfiguration(); UDPBroadcastEndpointFactory udpDg = (UDPBroadcastEndpointFactory) dc.getBroadcastEndpointFactory(); assertEquals(udpDg.getGroupAddress(), "231.6.6.6"); assertEquals(udpDg.getGroupPort(), 1234); assertEquals(dc.getRefreshTimeout(), 1L); assertEquals(dc.getDiscoveryInitialWaitTimeout(), 1L); qResourceAdapter.stop(); } @Test public void testResourceAdapterSetupNoHAOverride() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); qResourceAdapter.setConnectionParameters("server-id=0"); qResourceAdapter.setHA(true); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); ActiveMQConnectionFactory fac = qResourceAdapter.getConnectionFactory(spec); assertTrue(fac.isHA()); qResourceAdapter.stop(); assertFalse(spec.isHasBeenUpdated()); } @Test public void testResourceAdapterSetupNoHADefault() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); qResourceAdapter.setConnectionParameters("server-id=0"); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); ActiveMQConnectionFactory fac = qResourceAdapter.getConnectionFactory(spec); assertFalse(fac.isHA()); qResourceAdapter.stop(); assertFalse(spec.isHasBeenUpdated()); } @Test public void testResourceAdapterSetupHAOverride() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); qResourceAdapter.setConnectionParameters("server-id=0"); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); spec.setHA(true); ActiveMQConnectionFactory fac = qResourceAdapter.getConnectionFactory(spec); assertTrue(fac.isHA()); qResourceAdapter.stop(); assertTrue(spec.isHasBeenUpdated()); } @Test public void testResourceAdapterSetupNoReconnectAttemptsOverride() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); qResourceAdapter.setConnectionParameters("server-id=0"); qResourceAdapter.setReconnectAttempts(100); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); ActiveMQConnectionFactory fac = qResourceAdapter.getConnectionFactory(spec); assertEquals(100, fac.getReconnectAttempts()); qResourceAdapter.stop(); assertFalse(spec.isHasBeenUpdated()); } @Test public void testResourceAdapterSetupReconnectAttemptDefault() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); qResourceAdapter.setConnectionParameters("server-id=0"); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); ActiveMQConnectionFactory fac = qResourceAdapter.getConnectionFactory(spec); assertEquals(-1, fac.getReconnectAttempts()); qResourceAdapter.stop(); assertFalse(spec.isHasBeenUpdated()); } @Test public void testResourceAdapterSetupReconnectAttemptsOverride() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); qResourceAdapter.setConnectionParameters("server-id=0"); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.start(ctx); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); spec.setReconnectAttempts(100); ActiveMQConnectionFactory fac = qResourceAdapter.getConnectionFactory(spec); assertEquals(100, fac.getReconnectAttempts()); qResourceAdapter.stop(); assertTrue(spec.isHasBeenUpdated()); } @Test public void testMaskPassword() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); DefaultSensitiveStringCodec codec = new DefaultSensitiveStringCodec(); String mask = (String) codec.encode("helloworld"); qResourceAdapter.setUseMaskedPassword(true); qResourceAdapter.setPassword(mask); qResourceAdapter.start(ctx); assertEquals("helloworld", qResourceAdapter.getPassword()); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); mask = (String) codec.encode("mdbpassword"); spec.setPassword(mask); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); CountDownLatch latch = new CountDownLatch(1); DummyMessageEndpoint endpoint = new DummyMessageEndpoint(latch); DummyMessageEndpointFactory endpointFactory = new DummyMessageEndpointFactory(endpoint, false); qResourceAdapter.endpointActivation(endpointFactory, spec); assertEquals("mdbpassword", spec.getPassword()); qResourceAdapter.stop(); assertTrue(endpoint.released); } @Test public void testMaskPassword2() throws Exception { ActiveMQResourceAdapter qResourceAdapter = new ActiveMQResourceAdapter(); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); ActiveMQRATestBase.MyBootstrapContext ctx = new ActiveMQRATestBase.MyBootstrapContext(); qResourceAdapter.setUseMaskedPassword(true); qResourceAdapter.setPasswordCodec(DefaultSensitiveStringCodec.class.getName() + ";key=anotherkey"); DefaultSensitiveStringCodec codec = new DefaultSensitiveStringCodec(); Map<String, String> prop = new HashMap<>(); prop.put("key", "anotherkey"); codec.init(prop); String mask = (String) codec.encode("helloworld"); qResourceAdapter.setPassword(mask); qResourceAdapter.start(ctx); assertEquals("helloworld", qResourceAdapter.getPassword()); ActiveMQActivationSpec spec = new ActiveMQActivationSpec(); spec.setResourceAdapter(qResourceAdapter); spec.setUseJNDI(false); spec.setDestinationType("javax.jms.Queue"); spec.setDestination(MDBQUEUE); mask = (String) codec.encode("mdbpassword"); spec.setPassword(mask); qResourceAdapter.setConnectorClassName(INVM_CONNECTOR_FACTORY); CountDownLatch latch = new CountDownLatch(1); DummyMessageEndpoint endpoint = new DummyMessageEndpoint(latch); DummyMessageEndpointFactory endpointFactory = new DummyMessageEndpointFactory(endpoint, false); qResourceAdapter.endpointActivation(endpointFactory, spec); assertEquals("mdbpassword", spec.getPassword()); qResourceAdapter.stop(); assertTrue(endpoint.released); } @Override public boolean useSecurity() { return false; } class DummyEndpoint implements MessageEndpoint { @Override public void beforeDelivery(Method method) throws NoSuchMethodException, ResourceException { // To change body of implemented methods use File | Settings | File Templates. } @Override public void afterDelivery() throws ResourceException { // To change body of implemented methods use File | Settings | File Templates. } @Override public void release() { // To change body of implemented methods use File | Settings | File Templates. } } }