- - PR -
Tomcat上でのJMS受信
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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(); } } } |
|
投稿日時: 2005-12-20 17:02
InitialContext を引数なしで生成しているのでローカルの JNDI ツリーにコネクションファクトリがバインドされていないと動かなそうです。
Tomcat上ではなくスタンドアロンのプログラムでは受信できますか? |
|
投稿日時: 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