- PR -

Tomcat上でのJMS受信

1
投稿者投稿内容
バロック
会議室デビュー日: 2005/12/20
投稿数: 2
投稿日時: 2005-12-20 15:25
Tomcat4.1 & axis1.0上でJMSConsumerを動かし、通信させたいのですがうまくいきません。
J2ee(ver1.3.1)サーバを立てて、JMSProducerからサーバにメッセージを投げるところまではできているようです。
おそらくはサーバのコンフィグレーションが問題なのですが、tomcatでのやり方がわかりません。

javax.naming.NameNotFoundException:名前 QueueConnectionFactoryはこのコンテキストにバインドされていません
という例外になります

以下JMSConsumer.jws

import javax.jms.*;
import javax.naming.*;

public class JMSConsumer {
public final static String JMS_FACTORY="QueueConnectionFactory";
public final static String QUEUE="MyQueue";

public static boolean JmsConnection(boolean f) {
boolean flag=false;
try {
QueueConnectionFactory queueConnectionFactory;
QueueConnection queueConnection;
QueueSession queueSession;
QueueReceiver queueReceiver;
Queue queue;
TextMessage msg;

InitialContext ctx = new InitialContext();
queueConnectionFactory = (QueueConnectionFactory)ctx.lookup(JMS_FACTORY);
queue = (Queue) ctx.lookup(QUEUE);

queueConnection = queueConnectionFactory.createQueueConnection();

queueSession = queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);

queueReceiver = queueSession.createReceiver(queue);

queueConnection.start();

while (true) {
Message m = queueReceiver.receive(1);
if (m != null) {
if (m instanceof TextMessage) {
msg = (TextMessage) m;
System.out.println(msg.getText());
if(msg.getText().equals("100")){
flag = true;
}
} else {
break;
}
}
}
queueReceiver.close();
queueSession.close();
queueConnection.close();
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
}

以下JMSProducer
class JavaMessageService{
public final static String JMS_FACTORY="QueueConnectionFactory";
public final static String QUEUE="MyQueue";
public static void jms(String args) {
try {
QueueConnectionFactory queueConnectionFactory;
QueueConnection queueConnection;
QueueSession queueSession;
QueueSender queueSender;
Queue queue;
TextMessage msg;

InitialContext ctx = new InitialContext();
queueConnectionFactory = (QueueConnectionFactory)ctx.lookup(JMS_FACTORY);
queue = (Queue) ctx.lookup(QUEUE);

queueConnection = queueConnectionFactory .createQueueConnection();
queueSession = queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(queue);
msg = queueSession.createTextMessage();
msg.setText(args);

queueConnection.start();

queueSender.send(msg);

queueSender.close();
queueSession.close();
queueConnection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-12-20 17:02
InitialContext を引数なしで生成しているのでローカルの JNDI ツリーにコネクションファクトリがバインドされていないと動かなそうです。
Tomcat上ではなくスタンドアロンのプログラムでは受信できますか?
バロック
会議室デビュー日: 2005/12/20
投稿数: 2
投稿日時: 2005-12-21 10:05
InitialContextの生成時に引数を与えればバインドなしでも大丈夫でしょうか?

InitialContext ic = getInitialContext(args[0]);
・・・
private static InitialContext getInitialContext( String url) throwsNamingException{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
env.put(Context.PROVIDER_URL, url);
return new InitialContext(env);
}
というのを見つけたのでいろいろと試してみます

スタンドアロンのものは動きます
1

スキルアップ/キャリアアップ(JOB@IT)