📄 topicsend.java
字号:
//声明本类在包examples.jms中
package examples.jms.topic;
//本类需要导入的其他类或包
//Java 基础类库中的类
import java.io.*;
import java.util.*;
//Java扩展类库中的包,依次是名称服务器类和Java消息包
import javax.naming.*;
import javax.jms.*;
/**
* 这个实例描述怎样和消息服务器上的一个消息主题建立连接,以及怎样发送这个
* 主题的消息。创建一个消息主题连接和发送消息,可以分为三个步骤,在类TopicSend中,
* 这三个步骤封装成了三个方法,在main方法中依次调用。
*/
public class TopicSend
{
/**
* 定义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";
//声明主题消息连接器变量
protected TopicConnectionFactory tconFactory;
//声明主题消息连接变量
protected TopicConnection tcon;
//声明主题消息会话器变量
protected TopicSession tsession;
//声明主题消息发布器变量
protected TopicPublisher tpublisher;
//声明主题消息变量
protected Topic topic;
//声明文本主题消息变量
protected TextMessage msg;
/**
* 创建发送主体消息相关的对象
*
* @参数 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);
//在主体会话中创建主题发布
tpublisher = tsession.createPublisher(topic);
//在主体会话中创建创建文本消息
msg = tsession.createTextMessage();
//启动连接
tcon.start();
}
/**
* 向JMS topic发送消息
*
* @参数 message 发送的消息
* @异常 JMSException JMS 异常
*
*/
public void send(String message)
throws JMSException
{
//为文本消息设定文本
msg.setText(message);
//发布文本消息
tpublisher.publish(msg);
}
/**
* 关闭所有JMS 对象
*
* @异常 JMSException 关闭对象错误跑出的JMS异常
*/
public void close()
throws JMSException
{
//关闭主题消息发布对象
tpublisher.close();
//关闭主题消息会话对象
tsession.close();
//关闭主题消息连接对象
tcon.close();
}
/**
* 主方法
*
* @参数 args 消息服务器的 URL
* @异常 操作失败产生的异常
*/
public static void main(String[] args)
throws Exception
{
//运行这个程序,给出应用服务器的URL作为命令行参数
//如果没有给出URL的命令行参数,打印出用法提示。
if (args.length != 1) {
System.out.println("用法: java examples.jms.topic.TopicSend WebLogicURL");
return;
}
//创建初始化上下文实例
InitialContext ic = getInitialContext(args[0]);
//声明本类的一个实例
TopicSend ts = new TopicSend();
//建立给定主题的消息服务器连接
ts.init(ic, TOPIC);
//从键盘输入读取文本并作为消息发送到服务器
readAndSend(ts);
ts.close();
}
/**
* 从键盘读取消息,发送消息
*
* @参数 ts TopicSend
* @异常 IOException 读写操作错误抛出的异常
* @异常 JMSException JMS内部错误抛出的异常
*/
protected static void readAndSend(TopicSend ts)
throws IOException, JMSException
{
//创建命令行输入流
BufferedReader msgStream = new BufferedReader (new InputStreamReader(System.in));
String line=null;
do {
System.out.print("Enter message (\"quit\" to quit): ");
//从键盘输入读入一行文本。
line = msgStream.readLine();
if (line != null && line.trim().length() != 0) {
//发送文本
ts.send(line);
System.out.println("JMS Message Sent: "+line+"\n");
}
} while (line != null && ! line.equalsIgnoreCase("quit"));
}
/**
* 得到初始化的JNDI上下文
*
* @参数 url 消息服务器
* @异常 NamingException JNDI错误抛出的异常
*/
protected 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");
//构造InitialContext实例
return new InitialContext(env);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -