⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 topicreceive.java

📁 weblogic应用全实例
💻 JAVA
字号:
//声明本类在包examples.jms中
package examples.jms.topic;
//本类需要导入的其他类或包
//Java 基础类库中的类
import java.io.*;
import java.util.*;
//Java扩展类库中的包,依次是名称服务器类和Java消息包
import javax.naming.*;
import javax.jms.*;

/**
 * 这个实例描述怎样和消息服务器上的一个消息主题建立连接,以及怎样接收这个
 * 主题的消息。创建一个消息主题接收,可以分为三个步骤,在类TopicReceive中,
 * 这三个步骤封装成了三个方法,在main方法中依次调用。
 */

 //消息接收程序必须实现MessageListener接口,才能接收到发送的消息
public class TopicReceive
  implements MessageListener
{
/** 
 * 定义JNDI构造器
 */

  public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";
/**
 * 定义JMS连接器
 */
  public final static String JMS_FACTORY="weblogic.examples.jms.TopicConnectionFactory";
/**
 * 定义主题
 */
  public final static String TOPIC="weblogic.examples.jms.exampleTopic";
  //声明主题消息连接器变量
  private TopicConnectionFactory tconFactory;
  //声明主题消息连接变量
  private TopicConnection tcon;
  //声明主题消息会话器变量
  private TopicSession tsession;
  //声明主题消息接收器变量
  private TopicSubscriber tsubscriber;
  //声明主题消息变量
  private Topic topic;
  private boolean quit = false;

/**
 * 必须实现的接口MessageListener中的方法,这个方法被消息服务器自动激发。
 * @参数 msg 消息
 *
 */
  public void onMessage(Message msg)
  {
    try {
    	//声明文本消息变量
      String msgText;
      //判断消息是否为文本消息实例
      if (msg instanceof TextMessage) {
      	//是,则取出消息文本赋值到变量
        msgText = ((TextMessage)msg).getText();
      } else {
      	//不是,则用toString()方法取出这个消息的信息
        msgText = msg.toString();
      }
      //在控制台显示
      System.out.println("JMS 消息接收: "+ msgText );
      
      if (msgText.equalsIgnoreCase("quit")) {
      	//如果发出退出消息,则置退出标志为真,使本程序终止运行
        synchronized(this) {
          quit = true;
          this.notifyAll(); // 通知主现成退出
        }
      }
    } catch (JMSException jmse) {
      jmse.printStackTrace();
    }
  }

  /**
   * 创建发送主体消息相关的对象
   * 
   * @参数 ctx JNDI 上下文
   * @参数 topicName 主题名
   * @异常 NamingExcpetion JNDI异常
   * @异常 JMSException if JMS异常
   *
   */
  public void init(Context ctx, String topicName)
       throws NamingException, JMSException
  {
    //消息上下文从JNDI服务中寻找到主题连接构造器
    tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);
    //建立主题连接
    tcon = tconFactory.createTopicConnection();
    //创建主题会话
    tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
    //消息上下文从JNDI服务中寻找到主题
    topic = (Topic) ctx.lookup(topicName);
    //在主体会话中创建主题接收器
    tsubscriber = tsession.createSubscriber(topic);
    //设置主题接收的消息监听器
    tsubscriber.setMessageListener(this);
    //启动连接
    tcon.start();
  }

  /**
   * 关闭 JMS 对象.
   *
   * @异常 JMSException JMS 异常
   */
  public void close()
       throws JMSException
  {
    tsubscriber.close();
    tsession.close();
    tcon.close();
  }
/** 
  * 主方法
  *
  * @参数 args WebLogic服务器URL
  * @异常 Exception 操作失误
  */

  public static void main(String[] args)
       throws Exception 
  {
    //运行这个程序,给出应用服务器的URL作为命令行参数
    //如果没有给出URL的命令行参数,打印出用法提示。
    if (args.length != 1) {
      System.out.println("用法: java examples.jms.topic.TopicReceive WebLogicURL");
      return;
    }
    //创建初始化上下文实例
    InitialContext ic = getInitialContext(args[0]);
    //声明本类的一个实例
    TopicReceive tr = new TopicReceive();
    //建立给定主题的消息服务器连接
    tr.init(ic, TOPIC);

    System.out.println("JMS 准备好了接收消息(要退出, 发送一个\"quit\"消息).");

    // 等待,发出直到"quit"消息
    synchronized(tr) {
      while (! tr.quit) {
        try {
          tr.wait();
        } catch (InterruptedException ie) {}
      }
    }
    tr.close();
  }
/**
  * 得到初始化的JNDI上下文
  *
  * @参数  url 消息服务器
  * @异常  NamingException JNDI错误抛出的异常
  */
  private static InitialContext getInitialContext(String url)
       throws NamingException
  {
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
    env.put(Context.PROVIDER_URL, url);
    env.put("weblogic.jndi.createIntermediateContexts", "true");
    return new InitialContext(env);
  }

}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -