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

📄 recvclient.java

📁 精通Jboss——Ejb和Web Services开发精解的随书源代码
💻 JAVA
字号:
/*
 * Created on 2003-7-15
 */
package com.liuyang.jboss.message.jms.topic;

import java.util.Hashtable;
import java.util.Properties;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.ObjectMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;


/**
 * 
 * @version 1.0  Edit on 2003-7-14 10:01:42
 * @author
 * <a href="mailto:liuyang@softtouchit.com">刘洋</a>
 * 
 */
public class RecvClient {

	public static void main(String[] args) {
		RecvClient client = new RecvClient();
		try {
			client.setup();
			System.out.println(client.recv());
			client.stop();			
		} catch (NamingException e) {
			e.printStackTrace();
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
	
	private boolean receiving = false;
	private TopicSession session;
	private Topic topic;
	private TopicConnection conn;
	private TopicSubscriber recv;
	public boolean connected = false;
	private int timeouts = 0;
	private Context iniCtx;
	public void setup() throws NamingException, JMSException{
		if(!connected){
			Properties properties = System.getProperties();
			properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.naming.HttpNamingContextFactory");
			properties.put(Context.PROVIDER_URL,"http://127.0.0.1:8080/invoker/JNDIFactory");
			iniCtx = new InitialContext(properties);		
			Object tmp = iniCtx.lookup("HTTPConnectionFactory");
			TopicConnectionFactory tcf = (TopicConnectionFactory) tmp;

			/*Hashtable env = new Hashtable();
			env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
			env.put(Context.PROVIDER_URL,"localhost");
			Context iniCtx = new InitialContext(env);		
			Object tmp = iniCtx.lookup("ConnectionFactory");
			TopicConnectionFactory tcf = (TopicConnectionFactory) tmp;
			*/			
			conn = tcf.createTopicConnection();
			topic = (Topic)iniCtx.lookup("topic/topictest");
			session = conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE);
			conn.start();
			System.out.println("conn.start()");
			recv = session.createSubscriber(topic, "name = 'liuyang'", false);
			connected = true;
			timeouts = 0;
			receiving = false;
		}
	}	

	public Object recv() throws JMSException{
		if(connected){
			if(!receiving){
				receiving = true;
				Message msg = recv.receive(2000);
				System.out.println(msg.getJMSDestination().toString());
				if(msg instanceof ObjectMessage){
					Object data = ((ObjectMessage)msg).getObject();
					receiving = false;
					return data;
				}else{
					receiving = false;
					return null;
				}
			}else{
				return null;
			}
		}else{
			try {
				this.setup();
			} catch (NamingException e) {
				e.printStackTrace();
			} catch (JMSException e) {
				e.printStackTrace();
			}
			return recv();
		}
	}
	
	public void restart(){
		if(connected){
			try {
				this.stop();
			} catch (JMSException e) {
				e.printStackTrace();
			}
					
		}
	}

	public void stop() throws JMSException{
		if(connected){
			recv.close();
			conn.stop();
			session.close();
			conn.close();
			System.out.println("conn.close()");	
			connected = false;
			try {
				if(iniCtx!=null)				
				iniCtx.close();
			} catch (NamingException e) {
				e.printStackTrace();
			}
		}
	}
}

⌨️ 快捷键说明

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