- 浏览: 691871 次
- 性别:
- 来自: 北京
博客专栏
-
读金庸故事,品程序人生
浏览量:47248
文章分类
最新评论
-
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 1521JavaEE5实战笔记在RedHat上搭建JBoss、Orac ... -
JavaEE5实战笔记02JPA持久层的一些问题
2011-05-30 14:48 15591. JPA关联实体的级联操作问题 在此次联系中 ... -
JavaEE5实战笔记01EJB环境搭建及异常解决
2011-05-30 14:43 49431. 说明 此实战笔记是为了之前的学习笔记做一个 ... -
Spring集成ActiveMQ配置
2011-03-21 20:58 278841. 集成环境 Spring采用2.5.6版本, ... -
JAVA的Mina框架传递对象——一劳永逸(转载)
2011-03-09 11:31 2613接触java的Mina框架已经有很多时间了,在网上也读过了很多 ... -
JavaEE5学习笔记12-JSF验证器使用总结
2011-03-09 00:01 19351. JSF验证器 说完转换器就该说说验证器了, ... -
JavaEE5学习笔记11-JSF转换器使用总结
2011-03-08 23:53 26761. JSF的转换器是在JSF生命周期的第2个阶段 ... -
JSF组件生命周期的讨论
2011-03-08 23:38 16971. JSF生命周期 下面我们来看看JSF组件的 ... -
JavaEE5学习笔记10-JSF基本UI控件使用
2011-03-08 23:34 36011. JSF也是JavaEE5的标准,感觉上sun ... -
JavaEE5学习笔记09-将EJB发布成WebService总结(2)
2011-02-28 09:21 1521以上例子只是简单调用了WebService,参数是简单的Str ... -
JavaEE5学习笔记09-将EJB发布成WebService总结(1)
2011-02-28 09:19 40741. 将EJB发布成,或者说暴露成Web服务(也许 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(4)
2011-02-24 09:36 14621. 在JavaEE容器 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(3)
2011-02-24 09:35 11671. 测试代码 部署成功后,在另一个项目中建立测 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(2)
2011-02-24 09:33 1484下面来看针对此实体操作的sessionBean代码。 接口 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(1)
2011-02-24 09:28 1719JPA是JavaEE5提出的一套标准接口,不同的应用服务器对其 ... -
JavaEE5学习笔记06-EJB之消息驱动Bean(MDB)总结----1
2011-02-21 15:55 19261. 功能介绍 在EJB的分类中还有一个就是消息驱 ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----7
2011-02-21 09:49 12951. EJB的容器式依 ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----6
2011-02-21 09:48 1464BMT就是Bean自己管理事务,这种方式就是以硬编码的方式在B ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----5
2011-02-21 09:46 18571. 有状态的会话Bean的本地、远程调用 其实这 ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----4
2011-02-21 09:43 1283以上好像还看不出什么,那么咱们开发一个web程序作为测试用例 ...
相关推荐
EJB之消息驱动Bean的总结。ejb 消息驱动Bean j2ee jms java
JavaEE5学习笔记05-EJB之会话Bean总结...
JavaEE5学习笔记07-Web层与EJB集成总结。
JavaEE5学习笔记09-将EJB发布成WebService总结。
JavaEE5学习笔记12-JSF集成AJAX使用经验总结。
JavaEE5学习笔记04-JavaMail使用总结----
JavaEE5学习笔记02-JNDI与RMI,
JavaEE5学习笔记13-JSF集成Facelets使用经验总结.
JavaEE5学习笔记01-JTA和数据库事务.
JavaEE5学习笔记03-JMS介绍与使用..
JavaEE5学习笔记11-JSF转换器验证器使用经验总结。
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源代码 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-...
NULL 博文链接:https://suhuanzheng7784877.iteye.com/blog/909104
JPA学习笔记-EJB-06JPA+Spring使用经验。
javaee-api-8.0-javadoc.jar,这是javaee1.8api的jar包,解压后可用javadoc2chm制作成chm帮助文档。
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-...
先电云计算软件服务-云存储网盘JavaEE网络应用开发手册-Cloud-SaaS-Web-v2.0先电云计算软件服务-云存储网盘JavaEE网络应用开发手册-Cloud-SaaS-Web-v2.0先电云计算软件服务-云存储网盘JavaEE网络应用开发手册-Cloud-...