前回、WASCE を入れて EJB3 を動かしてみた。管理コンソールを見ていると、ActiveMQ が JMS として使えるようなので、ついでにやってみる。
■ Queue 設定
まず WASCE で Queue の準備をする。
最初にリソースグループを作る
- 管理画面に入る。
- Services/"JMS Resources"を開く
- "Create a new JMS Resource Group"/"For ActiveMQ"を選択
- "Resource Group Name" に HelloResourceGroup とか適当 な名前を入力し[Next] 押下。
次に Queue を作る
- [Add Destination] 押下
- "JMS Destination Type" で Queue が選択されていることを確認して[Next] 押下。
- "Message Destination Name" に HelloQueue と入力し、[Next] 押下。
[Deploy Now] 押下で JMS Resources 画面に行くので、そこでちゃんと追加されたことが確認できる。
(追加したリソースグループの削除は、このJMS Resources 画面じゃなくて、Applications/J2EE Connector 画面かららしい。ちょっと分かりづらいが・・・)
■ クライアントコード
この JMS Queue を使うテストコードを書いて、JUnit4 でメソッドを個別実行してみる。
- Java Project 作成。
- {WASCE_HOME}/repository 下の 以下のjar を、External Jar としてBuild path に追加。
- activemq-core-4.1.2.jar
- backport-util-concurrent-2.2.jar
- Library を Build path に追加。
- "Server Runtime"/"IBM WASCE v2.1"
- JUnit 4
- 適当なパッケージに クラス JMSTestを作成。
import java.util.Date;
import ・・・略
public class JMSTest {
static final Hashtable<String, String> env = new Hashtable<String, String>();
static {
env.put("java.naming.factory.initial",
"org.apache.activemq.jndi.ActiveMQInitialContextFactory");
env.put("java.naming.provider.url", "tcp://localhost:61616");
env.put("queue.HelloQueue", "HelloQueue");
}
QueueConnection conn = null;
QueueSession session = null;
Queue queue = null;
@Before
public void setUp() throws Exception {
Context jndiContext = new InitialContext(env);
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) jndiContext.lookup(
"QueueConnectionFactory");
queue = (Queue) jndiContext.lookup("HelloQueue");
conn = queueConnectionFactory.createQueueConnection();
session = conn.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
}
@After
public void tearDown() throws Exception {
if (conn != null)
conn.close();
}
@Test
public void testSend() throws Exception {
QueueSender queueSender = session.createSender(queue);
TextMessage message = session.createTextMessage(
String.format(
"Hello, JMS!: %1$tH:%1$tM:%1$tS", new Date()));
queueSender.send(message);
}
@Test
public void testReceive() throws Exception {
QueueReceiver receiver = session.createReceiver(queue);
conn.start();
TextMessage m = (TextMessage)receiver.receive();
System.out.println(m.getText());
}
}
■ 実行- Outline ビューから testSend() を実行。正常に実行されることを確認。
- Outline ビューから testReceive() を実行。正常に実行され、コンソールにHello, JMS!: 22:48:06みたいな感じで1行出力されることを確認。
0 件のコメント:
コメントを投稿