`
feng88724
  • 浏览: 172871 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

普通类作为JMS消息接收端

    博客分类:
  • JMS
JMS 
阅读更多
public class JMSRequestReply implements MessageListener {
	private InitialContext context;
	private QueueConnectionFactory queueConnectionFactory;
	private QueueConnection queueConnection;
	private QueueSession queueSession;
	private Queue queue;

	public JMSRequestReply() {
		try {
			context = new InitialContext();
			queueConnectionFactory = (QueueConnectionFactory) context
					.lookup("ConnectionFactory");
			// 区别之处
			queue = (Queue) context.lookup("queue/myQueue");
			queueConnection = queueConnectionFactory.createQueueConnection();
			queueSession = queueConnection.createQueueSession(false,
					QueueSession.AUTO_ACKNOWLEDGE);
//			使用QueueReceiver启用监听,而不是会话QueueSession
			QueueReceiver queueReceive = queueSession.createReceiver(queue);
			
			queueReceive.setMessageListener(this);
			
			queueConnection.start();
		} catch (NamingException e) {

			e.printStackTrace();

		} catch (JMSException e) {

			e.printStackTrace();

		}
	}

	public void receive() {

		QueueReceiver queueReceiver;
		QueueSender queuesender = null;
		TextMessage tm = null;
		try {
			System.out
					.println("------------------->i'm a receiver<-------------------");
			queueReceiver = queueSession.createReceiver(queue);
			queueConnection.start();
			// 设置监听类
			// queueReceiver.setMessageListener();
			System.out
					.println("------------------->waiting<-------------------");
			//			ObjectMessage om = (ObjectMessage) queueReceiver.receive();
			//			LogEntry lg = (LogEntry) om.getObject();
			//			System.out.println(lg.getMessage());
			TextMessage tms = (TextMessage) queueReceiver.receive();
			System.out.println(tms.getText());

			// File操作
			// 返回NG、OK
			// return om.getObject();
			queuesender = queueSession
					.createSender((Queue) tms.getJMSReplyTo());
			tm = queueSession.createTextMessage();
			//			 tm.setJMSReplyTo(queue);
			tm.setText("OK");
			queuesender.send(tm);
		} catch (JMSException e) {
			e.printStackTrace();

			try {
				tm.setText("NG");
				queuesender.send(tm);
			} catch (JMSException e1) {
				e1.printStackTrace();
			}

		} finally {
			destroy();
		}
	}

	public String send(LogEntry log) {
		try {
			System.out
					.println("------------------->i'm a sender<-------------------");
			// QueueSender queuesender = queueSession.createSender(queue);
			QueueRequestor queueRequestor = new QueueRequestor(queueSession,
					queue);
			queueConnection.start();
			ObjectMessage ob = queueSession.createObjectMessage(log);
			//			TextMessage txs = queueSession.createTextMessage();
			//			txs.setText("I'am zhuyefeng !it's true");
			TextMessage reply = (TextMessage) queueRequestor.request(ob);
			System.out.println("------------------->等待<-------------------");
			String replys = reply.getText();

			return replys;
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} finally {
			destroy();
		}
	}

	public void destroy() {
		try {
			queueConnection.close();
			queueSession.close();
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void onMessage(Message msg) {
		QueueSender queuesender = null;
		TextMessage tm = null;
		try {
			tm = queueSession.createTextMessage();
			tm.setJMSReplyTo(queue);
		System.out.println("------------------->i'm a receiver<-------------------");
			// queueReceiver = queueSession.createReceiver(queue);

			// 设置监听类
			// queueReceiver.setMessageListener();
			ObjectMessage om = (ObjectMessage) msg;
			System.out
					.println("------------------->Listening waiting<-------------------");
			LogEntry lg = (LogEntry) om.getObject();
			System.out.println(lg.getMessage());
			// File操作
			// 返回NG、OK
			// return om.getObject();
//				此处必须这样设置
			System.out.println("目的地:"+ om.getJMSReplyTo()+"比较:----->"+queue);
			queuesender = queueSession.createSender((Queue) om.getJMSReplyTo());
			tm.setText("OK");
			queuesender.send(tm);
		} catch (JMSException e) {
			e.printStackTrace();
			try {
				tm.setText("NG");
				queuesender.send(tm);
			} catch (JMSException e1) {
				e1.printStackTrace();
			}
		}finally {
			destroy();
		}
	}
}


得到了16:28:34,734 ERROR [STDERR] javax.jms.InvalidDestinationException: This destination does not exist! QUEUE.JMS_TQ7 异常

问题已经解决。

方法:是消息接收端最后不要断开连接,使其一直处于监听状态!
分享到:
评论

相关推荐

    ejb3.0

    1. **POJO(Plain Old Java Object)**:EJB 3.0允许开发者使用普通的Java对象作为EJB组件,极大地简化了EJB的编写过程。 2. **依赖注入**:通过依赖注入机制,可以自动管理EJB组件之间的依赖关系,减少了配置的...

    EJB总结

    - POJO(Plain Old Java Object)支持:EJB 3.0允许开发者使用普通的Java类作为bean,不再需要继承特定的基类或实现接口。 - JPA(Java Persistence API):提供了一种统一的持久化模型,替代了原有的CMP和BMP,使得...

    j2ee ejb编程实例

    - **消息驱动Bean**:作为JMS消息的消费者,接收和处理消息,实现解耦和异步处理。 - **消息生产者**:通常是一个普通的Java类或会话Bean,发布消息到消息队列。 6. **EJB的事务管理** - **自动事务管理**:EJB...

    需求规格说明书及设计文档1

    使用Mysql作为关系型数据库,JDBC+Mybatis处理数据层,Redis作为非关系型数据库,Redisson用于Redis通信,FastJSON处理序列化,Maven管理项目,自研消息队列Flash-MQ负责消息传递,Nginx作为HTTP和反向代理服务器。...

    ejb30入门图文教程.zip

    开发者可以通过在普通的Java类上添加注解,如@Entity、@Table、@Id等,来声明一个实体类。此外,EJB3.0还引入了自动数据持久化的概念,如@ManyToOne、@OneToMany等关联关系注解,使得数据关系的维护更为简单。 2. ...

    java进程间通讯笔记

    在Java中,可以借助于JNI或者第三方库如JMS(Java Message Service)来实现消息队列通信。 5. **共享内存(Shared Memory)**: 共享内存允许多个进程访问同一块内存空间,提供高效的数据交换。Java标准库并不直接...

    J2EE API帮助文档

    J2EE API是该平台的核心组成部分,它包含了一系列的接口、类和工具,用于支持诸如Web服务、数据库连接、事务处理、安全性和消息传递等功能。本帮助文档主要针对的是J2EE 5.0版本,这是在2006年发布的一个重要更新,...

    JavaWeb技术内幕(修订版).pdf

    通过JMS,应用可以发送和接收消息,实现解耦和异步处理,提高系统的可扩展性和可靠性。 6. **Web容器**:在JavaWeb中,Web应用运行在Web容器内,如Tomcat、Jetty等。容器负责管理Servlet和JSP的生命周期,处理请求...

    Java面试题目定义.pdf

    30. 接口可以继承接口,抽象类可以实现接口,抽象类也可以继承普通类。 31. 启动线程用start(),run()是线程执行的方法。 32. 父类构造器不能被重写,但可以通过super()调用。 33. 不可以继承String类,因为...

    j2ee考试资料,学校考试时的复习资料

    JMS提供了一套标准的产生、发送、接收消息的接口,简化了企业级应用程序的开发工作。 9. **WebService**:是一种通过使用因特网标准协议(如HTTP、XML、SOAP等)来调用服务或应用程序的技术。WebService具有跨平台...

    J2EE考试题目及答案.docx

    - **普通类实现**: 定义一个包含execute方法的普通类。 - **实现Action接口**: 定义一个实现了Action接口的类。 - **继承ActionSupport**: 继承自ActionSupport类,这是最常见的实现方式。 #### 十、Struts Result...

    toamct 教程

    Servlet API定义了一套标准的Java接口和类,用于开发处理HTTP请求的服务器端程序。而JSP(Java Server Pages)是一种特殊的Servlet,它允许开发者在HTML页面中嵌入Java代码。当JSP文件被第一次请求时,Tomcat会将JSP...

    jacorb2.3.1

    ORB是CORBA的核心,它将Java对象的调用转化为可以在网络上传输的消息,并将接收到的消息转换回对象调用。ORB使得开发者可以使用普通的面向对象编程技术编写分布式应用,而无需关心底层网络通信细节。 3. **JacORB...

    J2EE考试题目及答案定义.pdf

    Struts中实现Action有三种方式:定义一个普通的类,类中只要有一个public String execute()方法且返回一个字符串即可;定义一个类,实现Action接口;继承xwork2.ActionSupport这个类。最常用的方法是继承xwork2....

    POS系统srcAndPackage

    2. **业务逻辑层**:这是核心的Java类,可能包含EJB或普通的Java类,它们执行业务规则,处理计算,与数据库交互等。 3. **数据访问层**:使用JDBC(Java Database Connectivity)或者其他ORM(Object-Relational ...

    游戏论坛网站

    6. **JMS(Java Message Service)**:用于实现异步通信,例如,当大量用户同时发帖或回帖时,JMS可以帮助处理消息队列,避免服务器过载。 7. **JTA(Java Transaction API)**:确保在多资源事务中的一致性,对于...

    J2EE电子商务系统开发从入门到精通

    - **ActionServlet类**:作为前端控制器,负责接收用户的HTTP请求,并将其分发给相应的Action对象处理。 - **RequestProcessor类**:处理请求过程中的一些通用任务,如转发请求、重定向等。 - **Action类**:处理...

    基于J2EE的教务系统代码

    JSP页面在服务器上被编译成Servlet,然后像普通Java类一样执行,这使得JSP能更好地处理动态内容,同时保持了Java的强类型和面向对象特性。 【Java操作Excel文档】在教务系统中可能涉及到学生成绩、课程表等数据的...

Global site tag (gtag.js) - Google Analytics