`
苹果超人
  • 浏览: 200787 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

EJB MDB demo

    博客分类:
  • java
ejb 
阅读更多
MDB其实就是JMS消息监听器,它实现了javax.jms.MessageListener接口。
P2P的消息模型(Queue):每次只有一个MDB bean被调用。
Server:
package com.kevin.ejb;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;

// 这个annotation是定义MDB
@MessageDriven(
		// 注册一个Queue类型的destination
		activationConfig = {
				@ActivationConfigProperty(propertyName = "destinationType" ,propertyValue = "javax.jms.Queue"),
				// destination名字
				@ActivationConfigProperty(propertyName = "destination" ,propertyValue = "queue/myqueue")
		}
)
public class MyQueueMDBBean implements MessageListener {

	public void onMessage(Message message) {
		TextMessage msg = (TextMessage)message;
		try {
			System.out.println("MyQueueMDBBean invoked. the message is: " + msg.getText());
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}

}


client:
package com.kevin.ejb;

import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class MyQueueMDBBeanClient {

	public static void main(String[] args) throws NamingException, JMSException {
		InitialContext context = new InitialContext();
		
		// 获得QueueConnectionFactory对象
		QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("ConnectionFactory");
		// 获得QueueConnection对象
		QueueConnection connection = factory.createQueueConnection();
		// 获得QueueSession对象
		QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
		
		// 获得destination对象
		Queue queue = (Queue)context.lookup("queue/myqueue");
		
		// 创建文本消息
		TextMessage msg = session.createTextMessage("Hello, Kevin.");
		// 创建一个发送者
		QueueSender sender = session.createSender(queue);
		
		// 发送消息
		sender.send(msg);
		
		session.close();
		connection.close();
		System.out.println("message has been sended successfully!");
		
	}

}



Pub/Sub模型(Topic):所有destination名字相同的MDB bean都被调用。
Server:
package com.kevin.ejb;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

@MessageDriven(
		activationConfig = {
				@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
				@ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/mytopic")
		}
)
public class MyTopicMDBBean implements MessageListener {

	public void onMessage(Message message) {
		TextMessage msg = (TextMessage)message;
		try {
			System.out.println("MyTopicMDBBean invoked. the message is: " + msg.getText());
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}

}


Client:
package com.kevin.ejb;

import javax.jms.JMSException;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class MyTopicMDBBeanClient {

	public static void main(String[] args) throws NamingException, JMSException {
		InitialContext context = new InitialContext();
		
		// 创建TopicConnectionFactory对象
		TopicConnectionFactory factory = (TopicConnectionFactory)context.lookup("ConnectionFactory");
		// 创建TopicConnection对象
		TopicConnection connection = factory.createTopicConnection();
		// 创建TopicSession对象
		TopicSession session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
		
		// 获取destination对象
		Topic topic = (Topic)context.lookup("topic/mytopic");
		
		// 创建文本消息对象
		TextMessage msg = session.createTextMessage("Hello, Cissy.");
		// 创建TopicPublisher对象
		TopicPublisher publisher = session.createPublisher(topic);
		
		// 发布消息
		publisher.publish(msg);
		
		session.close();
		connection.close();
		System.out.println("message has been published successfully!");
	}

}

分享到:
评论

相关推荐

    Idea搭建EJB架构Demo项目源代码

    【标题】"Idea搭建EJB架构Demo项目源代码"涉及的是使用IntelliJ IDEA(简称Idea)这个强大的Java集成开发环境来构建一个基于EJB(Enterprise JavaBeans)架构的示例项目。EJB是Java EE(企业版)平台的核心部分,...

    EJB消息驱动bean Demo

    在这个“EJB消息驱动bean Demo”中,我们将深入探讨EJB MDB和JMS如何协同工作以实现异步通信。 首先,JMS是Java平台上的标准API,它定义了生产、发送、接收和消费消息的接口。JMS提供两种消息模型:点对点(Point-...

    EJB WebService Demo

    **EJB(Enterprise JavaBeans)WebService Demo** EJB(Enterprise JavaBeans)是Java平台上的一个核心组件,用于构建可扩展的、安全的、事务处理的分布式应用程序。它为开发人员提供了一种在Java环境中实现服务器...

    EJB+Annotation实现AOP的DEMO

    这篇博客"使用EJB+Annotation实现AOP的DEMO"主要介绍了如何在EJB中利用注解(Annotation)来实现AOP的功能。在Java EE中,EJB 3.0及后续版本引入了大量的注解,使得开发者可以免去编写XML配置文件,直接在代码中声明...

    EJB3.0开发Message Driven Bean

    其中Message-Driven Bean (MDB) 是一种特殊类型的EJB,主要用于接收来自Java消息服务(JMS)的消息。本文将详细介绍如何使用EJB3.0在JBoss IDE中创建和部署MDB。 #### 二、准备工作 1. **安装工具和软件**: - **...

    学习EJB3基础知识笔记

    EJB(Enterprise JavaBeans)是Java企业级应用开发的核心组件之一,主要负责处理业务逻辑,为应用程序提供可重用和可扩展的服务。...通过实际操作EjbDemo项目,你可以将理论知识与实践相结合,进一步巩固对EJB3的理解。

    EJB范例源码

    在本范例中,"WebDemo"可能是一个Web应用程序,它通过Servlet或JSP与EJB通信,展示如何在Web层与业务层之间进行交互。通常,Web层负责处理HTTP请求,展示视图,而EJB则负责处理业务逻辑和服务。 **学习EJB的重要性...

    一些Java EE面试问答整理

    - MDB(Message-Driven Bean)的persistent和non-persistent区别在于:persistent保证消息的可靠传输,即使EJB容器出现问题,消息仍会被保留;non-persistent消息则在传输失败后不会被保留。 8. **J2EE及MVC**: ...

    weblogic的几个基础问题

    10. **MDB 的持久化与非持久化**:持久化(persistent)的 MDB 确保消息传递的可靠性,即使 EJB 容器故障,消息也会在 MDB 可用时重新发送。而非持久化(non-persistent)的消息在 EJB 容器不可用时会被丢弃。 11. ...

    WebService开发实例图解教程

    - persistent MDB保证消息传递的可靠性,即使EJB容器出现问题,JMS服务器仍会保留消息,待MDB恢复时发送。 - non-persistent MDB不保证消息持久化,消息在处理失败时可能丢失。 本教程将通过实例详细讲解上述知识...

    weblogic的11个配置基础问题

    `Persistent`模式下的MDB可以确保即使EJB容器出现故障,JMS服务器仍会在MDB恢复时重新发送消息,从而保证消息不会丢失。相比之下,`Non-persistent`模式不提供这种保证,若EJB容器故障,消息将被丢弃。 #### 11. ...

    java面试200题

    根据提供的文件内容,我们可以从中提炼出与Java相关的多个知识点,具体包括WebLogic服务器配置、SSL安全设置、EJB(企业JavaBean)应用、CORBA架构理解、J2EE设计模式运用、消息驱动Bean(MDB)持久化选项、Servlet...

    JAVA程序员面试题6

    1. **默认配置**:缺省安装中,WebLogic使用`DemoIdentity.jks`和`DemoTrust.jks` KeyStore来实现SSL功能。 2. **启用SSL**:在管理控制台中配置服务器使用SSL,并设置相应的端口。 3. **产品模式下的配置**:在...

    超级有影响力霸气的Java面试题大全文档

    但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理, EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 24、...

Global site tag (gtag.js) - Google Analytics