package org.jboss.seam.test.integration;
import javax.jms.JMSException;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.OverProtocol;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.mock.JUnitSeamTest;
import org.jboss.shrinkwrap.api.Archive;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public class MessagingTest
extends JUnitSeamTest
{
@Deployment(name="MessagingTest")
@OverProtocol("Servlet 3.0")
public static Archive<?> createDeployment()
{
return Deployments.defaultSeamDeployment().addClasses(TestQueueListener.class, TestTopicListener.class);
}
@Test
public void publishToTopic()
throws Exception
{
final SimpleReference<String> messageText = new SimpleReference<String>();
new FacesRequest() {
@Override
protected void invokeApplication()
throws Exception
{
Contexts.getApplicationContext().set("testMessage", messageText);
invokeAction("#{testTopic.publish}");
}
}.run();
// need to delay a bit to make sure the message is delivered
// might need
Thread.sleep(2000);
assert messageText.getValue().equals("message for topic");
}
@Test
public void sendToQueue()
throws Exception
{
final SimpleReference<String> messageText = new SimpleReference<String>();
new FacesRequest() {
@Override
protected void invokeApplication()
throws Exception
{
Contexts.getApplicationContext().set("testMessage", messageText);
invokeAction("#{testQueue.send}");
}
}.run();
// need to delay a bit to make sure the message is delivered
// might need
Thread.sleep(2000);
assert messageText.getValue().equals("message for queue");
}
@Name("testTopic")
public static class TopicBean {
@In
private TopicPublisher testPublisher;
@In
private TopicSession topicSession;
public void publish()
throws JMSException
{
testPublisher.publish(topicSession.createTextMessage("message for topic"));
}
}
@Name("testQueue")
public static class QueueBean {
@In
private QueueSender testSender;
@In
private QueueSession queueSession;
public void send() throws JMSException {
testSender.send(queueSession.createTextMessage("message for queue"));
}
}
static class SimpleReference<T> {
T value;
public SimpleReference() {
}
public SimpleReference(T value) {
setValue(value);
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
}