This example demonstrates how you can colocate live and backup servers in the same VM..
This example starts 2 live servers each with a backup server that backs up the other live server.
The first live server will be killed and the backup in the second will become live
The following shows how to configure the backup, notice we have over ridden some of the configuration since we want it to use the same journal as server1 since it is using shared store.
<backup-servers>
<backup-server name="backup2">
<configuration>
<bindings-directory>target/server1/data/messaging/bindings</bindings-directory>
<journal-directory>target/server1/data/messaging/journal</journal-directory>
<large-messages-directory>target/server1/data/messaging/largemessages</large-messages-directory>
<paging-directory>target/server1/data/messaging/paging</paging-directory>
</configuration>
</backup-server>
</backup-servers>
To run the example, simply type mvn verify
from this directory
initialContext1 = getContext(1);
initialContext = getContext(0);
Queue queue = (Queue)initialContext.lookup("/queue/exampleQueue");
ConnectionFactory connectionFactory = (ConnectionFactory)initialContext.lookup("/ConnectionFactory");
ConnectionFactory connectionFactory1 = (ConnectionFactory)initialContext1.lookup("/ConnectionFactory");
connection = connectionFactory.createConnection();
connection1 = connectionFactory1.createConnection();
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
Session session1 = connection1.createSession(false, Session.CLIENT_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(queue);
MessageProducer producer1 = session1.createProducer(queue);
for (int i = 0; i < numMessages; i++)
{
TextMessage message = session.createTextMessage("This is text message " + i);
producer.send(message);
System.out.println("Sent message: " + message.getText());
message = session1.createTextMessage("This is another text message " + i);
producer1.send(message);
System.out.println("Sent message: " + message.getText());
}
killServer(0);
connection1.start();
MessageConsumer consumer = session1.createConsumer(queue);
TextMessage message0 = null;
for (int i = 0; i < numMessages * 2; i++)
{
message0 = (TextMessage)consumer.receive(5000);
System.out.println("Got message: " + message0.getText());
}
message0.acknowledge();
finally
block. Closing a JMS connection will automatically close all of its sessions, consumers, producer and browser objects
finally
{
if (connection != null)
{
connection.close();
}
if (initialContext != null)
{
initialContext.close();
}
if (connection1 != null)
{
connection1.close();
}
if (initialContext1 != null)
{
initialContext1.close();
}
}