use of org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryInternal in project activemq-artemis by apache.
the class BridgeImpl method reconnectOnOriginalNode.
protected ClientSessionFactoryInternal reconnectOnOriginalNode() throws Exception {
String targetNodeIdUse = targetNodeID;
TopologyMember nodeUse = targetNode;
if (targetNodeIdUse != null && nodeUse != null) {
// live and backup
TransportConfiguration[] configs = new TransportConfiguration[2];
int numberOfConfigs = 0;
if (nodeUse.getLive() != null) {
configs[numberOfConfigs++] = nodeUse.getLive();
}
if (nodeUse.getBackup() != null) {
configs[numberOfConfigs++] = nodeUse.getBackup();
}
if (numberOfConfigs > 0) {
// It will bounce between all the available configs
int nodeTry = (retryCount - 1) % numberOfConfigs;
return (ClientSessionFactoryInternal) serverLocator.createSessionFactory(configs[nodeTry]);
}
}
return null;
}
use of org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryInternal in project activemq-artemis by apache.
the class ActiveMQRASession method getNodeId.
/**
* Returns the ID of the Node that this session is associated with.
*
* @return Node ID
*/
public String getNodeId() throws JMSException {
ActiveMQSession session = (ActiveMQSession) getSessionInternal();
ClientSessionFactoryInternal factory = (ClientSessionFactoryInternal) session.getCoreSession().getSessionFactory();
return factory.getLiveNodeId();
}
use of org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryInternal in project activemq-artemis by apache.
the class ReattachTest method testReattachAttemptsFailsToReconnect.
@Test
public void testReattachAttemptsFailsToReconnect() throws Exception {
final long retryInterval = 50;
final double retryMultiplier = 1d;
final int reconnectAttempts = 3;
locator.setRetryInterval(retryInterval).setRetryIntervalMultiplier(retryMultiplier).setReconnectAttempts(reconnectAttempts).setConfirmationWindowSize(1024 * 1024);
ClientSessionFactoryInternal sf = (ClientSessionFactoryInternal) createSessionFactory(locator);
ClientSession session = sf.createSession(false, true, true);
session.createQueue(ReattachTest.ADDRESS, ReattachTest.ADDRESS, null, false);
ClientProducer producer = session.createProducer(ReattachTest.ADDRESS);
final int numMessages = 1000;
for (int i = 0; i < numMessages; i++) {
ClientMessage message = session.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
message.putIntProperty(new SimpleString("count"), i);
message.getBodyBuffer().writeString("aardvarks");
producer.send(message);
}
session.createConsumer(ReattachTest.ADDRESS);
InVMConnector.failOnCreateConnection = true;
RemotingConnection conn = ((ClientSessionInternal) session).getConnection();
// Sleep for longer than max retries so should fail to reconnect
Thread t = new Thread() {
@Override
public void run() {
try {
Thread.sleep(retryInterval * (reconnectAttempts + 1));
} catch (InterruptedException ignore) {
}
InVMConnector.failOnCreateConnection = false;
}
};
t.start();
conn.fail(new ActiveMQNotConnectedException());
try {
session.start();
Assert.fail("Should throw exception");
} catch (ActiveMQObjectClosedException oce) {
// ok
} catch (ActiveMQException e) {
fail("Invalid Exception type:" + e.getType());
}
session.close();
sf.close();
t.join();
}
use of org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryInternal in project activemq-artemis by apache.
the class ReattachTest method testCreateQueue.
@Test
public void testCreateQueue() throws Exception {
final long retryInterval = 100;
final double retryMultiplier = 1d;
final int reconnectAttempts = 300;
locator.setRetryInterval(retryInterval).setRetryIntervalMultiplier(retryMultiplier).setReconnectAttempts(reconnectAttempts).setConfirmationWindowSize(1024 * 1024);
ClientSessionFactoryInternal sf = (ClientSessionFactoryInternal) createSessionFactory(locator);
ClientSession session = sf.createSession(false, true, true);
// Sleep 3 times retryInterval, so it should at least have 3 retries
RemotingConnection conn = ((ClientSessionInternal) session).getConnection();
InVMConnector.failOnCreateConnection = false;
conn.fail(new ActiveMQNotConnectedException());
Thread t = new Thread() {
@Override
public void run() {
try {
Thread.sleep(retryInterval * 3);
} catch (InterruptedException ignore) {
}
InVMConnector.failOnCreateConnection = false;
}
};
t.start();
for (int i = 0; i < 10; i++) {
session.createQueue("address", RoutingType.ANYCAST, "queue" + i);
}
//
// InVMConnector.failOnCreateConnection = true;
//
// //Should throw exception since didn't reconnect
//
// try
// {
// session.start();
//
// fail("Should throw exception");
// }
// catch (ActiveMQException e)
// {
// assertEquals(ActiveMQException.OBJECT_CLOSED, e.getCode());
// }
session.close();
sf.close();
t.join();
}
use of org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryInternal in project activemq-artemis by apache.
the class ReattachTest method testOverflowCredits.
/*
* Test failure on connection, but server is still up so should immediately reconnect
*/
@Test
public void testOverflowCredits() throws Exception {
final long retryInterval = 500;
final double retryMultiplier = 1d;
final int reconnectAttempts = 1;
locator.setRetryInterval(retryInterval).setRetryIntervalMultiplier(retryMultiplier).setReconnectAttempts(reconnectAttempts).setConfirmationWindowSize(1024 * 1024).setProducerWindowSize(1000);
final AtomicInteger count = new AtomicInteger(0);
Interceptor intercept = new Interceptor() {
@Override
public boolean intercept(Packet packet, RemotingConnection connection) throws ActiveMQException {
System.out.println("Intercept..." + packet.getClass().getName());
if (packet instanceof SessionProducerCreditsMessage) {
SessionProducerCreditsMessage credit = (SessionProducerCreditsMessage) packet;
System.out.println("Credits: " + credit.getCredits());
if (count.incrementAndGet() == 2) {
System.out.println("Failing");
connection.fail(new ActiveMQException(ActiveMQExceptionType.UNSUPPORTED_PACKET, "bye"));
return false;
}
}
return true;
}
};
locator.addIncomingInterceptor(intercept);
ClientSessionFactoryInternal sf = (ClientSessionFactoryInternal) createSessionFactory(locator);
ClientSession session = sf.createSession(false, true, true);
session.createQueue(ReattachTest.ADDRESS, ReattachTest.ADDRESS, null, false);
ClientProducer producer = session.createProducer(ReattachTest.ADDRESS);
final int numMessages = 10;
for (int i = 0; i < numMessages; i++) {
ClientMessage message = session.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1);
message.putIntProperty(new SimpleString("count"), i);
message.getBodyBuffer().writeBytes(new byte[5000]);
producer.send(message);
}
session.close();
sf.close();
}
Aggregations