- 浏览: 702438 次
- 性别:
- 来自: 北京
博客专栏
-
读金庸故事,品程序人生
浏览量:47707
文章分类
最新评论
-
hty881008:
LZ,你的json返回是怎么出来的,我的怎么是No messa ...
使用CXF暴露您的REST服务 -
jxFY:
赞
Apache的对象池化工具commons-pool -
wangyudong:
新版本的Wisdom RESTClient地址https:// ...
使用CXF暴露您的REST服务 -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
使用CXF暴露您的REST服务 -
spring_springdata:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
Maven3实战笔记01环境配置与使用入门
除了activationConfig之外,如果使用其他JavaEE容器,比如Weblogic、Glassfish等等,还得加上如下几个注解配置项。
mappedName:指定消息驱动Bean监听的消息目的,此属性配置对于Weblogic、Glassfish生效。
messageListener:如果该消息驱动类没有在代码中显示的实现接口MessageListener的话就需要在此属性配置中加上实现的接口类。
在这个消息驱动Bean中接收到的消息是一个ObjectMessage类型的消息,前面JMS总结章节说过ObjectMessage是一个实现了Serializable接口的实体对象,这里实际上指的就是UserDTO对象。
在这个消息驱动Bean中还调用了一个SessionBean,它的代码如下(接口类不再赘述):
/** * 容器管理事务的用户添加的SessionBean * * @author liuyan * */ @Stateless @TransactionManagement(TransactionManagementType.CONTAINER) @TransactionAttribute(TransactionAttributeType.REQUIRED) public class UserServiceEAOImpl implements UserService {
/** * 资源注入 */ @Resource(mappedName = "java:/jbossdemo") private DataSource dataSource;
@Resource private SessionContext sessionContext;
/** * 添加方法实现 */ @Override public boolean insertUser(UserDTO userDTO) {
if (userDTO == null || userDTO.getId() == 0 || userDTO.getName() == null) { return false; }
Connection connection = null;
Statement statement = null;
try {
connection = dataSource.getConnection();
statement = connection.createStatement();
StringBuffer insertSQL = new StringBuffer( "insert into person values(");
insertSQL.append(userDTO.getId()).append(",'").append( userDTO.getName()).append("')");
System.out.println("SQL::" + insertSQL.toString());
statement.executeUpdate(insertSQL.toString());
statement.close(); connection.close(); return true; } catch (Exception e) { System.out.println("事务回滚~~"); sessionContext.setRollbackOnly(); e.printStackTrace(); return false; }
} } |
这是一个很简单的根据实体对象执行插入数据库的业务逻辑。万事俱备,只欠消息生产者,我们的消息生产者和之前JMS的消息生产者内容差不多。
package ejb.messageDrivenBean;
/** * 消息发送者 * * @author liuyan * */ public class JbossMessageSender {
/** * 发送消息 * * @throws Exception */ public void sendMessage() {
try { String Connection_Factory = "ConnectionFactory";
Context context = getInitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory) context .lookup(Connection_Factory);
Destination dest = (Destination) context.lookup("InsertUserQueue");
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer sender = session.createProducer(dest);
sender.setDeliveryMode(DeliveryMode.PERSISTENT); sender.setTimeToLive(2000);
// 获得ObjectMessage对象 ObjectMessage objectMessage = session.createObjectMessage();
// 构建参数 UserDTO userDTO = new UserDTO(); userDTO.setId(19); userDTO.setName("乱世狂刀");
objectMessage.setObject(userDTO);
sender.send(objectMessage);
session.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); }
}
private Context getInitialContext() { String init_factory = "org.jnp.interfaces.NamingContextFactory"; String serverURL = "jnp://127.0.0.1:1099"; Context context = null;
Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, init_factory); properties.put(Context.PROVIDER_URL, serverURL); try { context = new InitialContext(properties); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return context;
}
/** * @param args * @throws Exception */ public static void main(String[] args) throws Exception {
JbossMessageSender jbossMessageSender = new JbossMessageSender(); jbossMessageSender.sendMessage(); }
} |
开启JBoss服务器后,在另一个JVM中运行消息生产者程序后,发现数据库已经插入了一条记录
由此观之,这是一个通过JMS发送消息来引发的一个插入数据的事件的过程。过程如下描述:
启动JBoss——》消息消费者(消息驱动Bean)随着JBoss启动而被容器创建在容器对象池中——》消息将消费者监听消息目的——》JMS生产一个消息——》将实体对象一同发送到消息目的——》消息驱动Bean监听到了消息目的有消息了——》调用onMessage方法获取消息——》根据获取的消息进行强制转型(一般是业务实体)——》调用被注入的SessionBean组件方法执行业务逻辑——》完毕,消息驱动Bean归还给对象池。
实际上了解了JMS的使用原理后,配合消息驱动Bean开发应该不是很难。总之,消息驱动Bean是一个异步消费者。所以要实现特定接口MessageListener和特定方法onMessage()。还有就是消息驱动的注解配置属性可能相对于SessionBean来说有点多。还有就是消息驱动Bean的使用时机,一般是不要求客户端立刻获得执行结果的情况和在一般执行相对较长时间的业务情况。所以上面的实例代码其实不是真正的实际应用场景,而只是一个Demo罢了。多谢~~~~~夜深!!!
发表评论
-
JavaEE5实战笔记05RedHat搭建JBoss、Oracle10g环境
2011-06-01 10:50 1584JavaEE5实战笔记在RedHat上搭建JBoss、Orac ... -
JavaEE5实战笔记02JPA持久层的一些问题
2011-05-30 14:48 16181. JPA关联实体的级联操作问题 在此次联系中 ... -
JavaEE5实战笔记01EJB环境搭建及异常解决
2011-05-30 14:43 50321. 说明 此实战笔记是为了之前的学习笔记做一个 ... -
Spring集成ActiveMQ配置
2011-03-21 20:58 279491. 集成环境 Spring采用2.5.6版本, ... -
JAVA的Mina框架传递对象——一劳永逸(转载)
2011-03-09 11:31 2699接触java的Mina框架已经有很多时间了,在网上也读过了很多 ... -
JavaEE5学习笔记12-JSF验证器使用总结
2011-03-09 00:01 19671. JSF验证器 说完转换器就该说说验证器了, ... -
JavaEE5学习笔记11-JSF转换器使用总结
2011-03-08 23:53 27201. JSF的转换器是在JSF生命周期的第2个阶段 ... -
JSF组件生命周期的讨论
2011-03-08 23:38 17321. JSF生命周期 下面我们来看看JSF组件的 ... -
JavaEE5学习笔记10-JSF基本UI控件使用
2011-03-08 23:34 36631. JSF也是JavaEE5的标准,感觉上sun ... -
JavaEE5学习笔记09-将EJB发布成WebService总结(2)
2011-02-28 09:21 1548以上例子只是简单调用了WebService,参数是简单的Str ... -
JavaEE5学习笔记09-将EJB发布成WebService总结(1)
2011-02-28 09:19 41111. 将EJB发布成,或者说暴露成Web服务(也许 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(4)
2011-02-24 09:36 14921. 在JavaEE容器 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(3)
2011-02-24 09:35 12021. 测试代码 部署成功后,在另一个项目中建立测 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(2)
2011-02-24 09:33 1527下面来看针对此实体操作的sessionBean代码。 接口 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(1)
2011-02-24 09:28 1751JPA是JavaEE5提出的一套标准接口,不同的应用服务器对其 ... -
JavaEE5学习笔记06-EJB之消息驱动Bean(MDB)总结----1
2011-02-21 15:55 19611. 功能介绍 在EJB的分类中还有一个就是消息驱 ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----7
2011-02-21 09:49 13391. EJB的容器式依 ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----6
2011-02-21 09:48 1549BMT就是Bean自己管理事务,这种方式就是以硬编码的方式在B ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----5
2011-02-21 09:46 19021. 有状态的会话Bean的本地、远程调用 其实这 ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----4
2011-02-21 09:43 1320以上好像还看不出什么,那么咱们开发一个web程序作为测试用例 ...
相关推荐
### Java EE 5 学习笔记06:EJB之消息驱动Bean总结 #### EJB 消息驱动 Bean (Message Driven Bean, MDB) 在Java EE 5中,消息驱动Bean(MDB)是一种特殊的EJB组件,它主要用于处理异步消息。MDB能够接收并处理由...
### JavaEE5学习笔记07-Web层与EJB集成总结 #### 一、JavaEE5框架中的Web层与EJB集成概述 在JavaEE5(即Java Platform, Enterprise Edition 5)中,Web层与EJB(Enterprise JavaBeans)的集成是构建企业级应用的...
### JavaEE5学习笔记01-JTA和数据库事务:深入解析与应用 #### 一、JavaEE5概览与核心组件 JavaEE5是Java Enterprise Edition的第五个版本,标志着企业级Java应用的一个重要里程碑。它引入了一系列重要的新特性,...
总结来说,JNDI和RMI在JavaEE5中提供了强大的服务发现和分布式对象通信能力,使得开发者能够构建可扩展、模块化的企业级应用。通过JNDI,应用可以轻松地查找和利用服务器上的资源,而RMI则为远程对象的调用提供了...
这篇学习笔记主要聚焦于JavaMail在JavaEE5中的使用,通过深入理解其核心概念和实践操作,我们可以更好地在实际项目中应用这一工具。 JavaMail API提供了一套标准的接口,允许Java应用程序发送和接收电子邮件。它...
JavaEE源代码 struts2-core-2.0.11JavaEE源代码 struts2-core-2.0.11JavaEE源代码 struts2-core-2.0.11JavaEE源代码 struts2-core-2.0.11JavaEE源代码 struts2-core-2.0.11JavaEE源代码 struts2-core-2.0.11JavaEE源...
javaee-api-8.0-javadoc.jar,这是javaee1.8api的jar包,解压后可用javadoc2chm制作成chm帮助文档。
JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-...
java javaee-api-6.0-5
JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-...
EJB 3.0是Java EE 5中的核心组件之一,它极大地简化了EJB的使用,减少了对XML配置的依赖。实体Bean(Entity Beans)采用了注解驱动,无需XML配置,大大降低了学习和使用的难度。会话Bean(Session Beans)也变得更加...
JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-...
JavaEE源代码 commons-collections-2.1.1JavaEE源代码 commons-collections-2.1.1JavaEE源代码 commons-collections-2.1.1JavaEE源代码 commons-collections-2.1.1JavaEE源代码 commons-collections-2.1.1JavaEE源...
javaEE健康管理系统SSH-oracle(源码+数据库sql+lun文+视频齐全)javaEE健康管理系统SSH-oracle(源码+数据库sql+lun文+视频齐全)javaEE健康管理系统SSH-oracle(源码+数据库sql+lun文+视频齐全)javaEE健康管理系统SSH-...
JavaEE5是一个强大的企业级应用开发平台,它提供了丰富的组件和服务来构建分布式、多层的Web应用程序。本教程“JavaEE5实用教程--基于Weblogic和Eclipse的代码”是李绪成先生编著,旨在帮助开发者深入理解和实践...