`
liyuandong
  • 浏览: 332175 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JMS简明学习教程(三)

    博客分类:
  • JMS
阅读更多

配置篇
下面我们来看看是JMS是在JBoss下如何配置的,首先JMS需要一个数据库来保存其持久化的消息,幸运的是JBoss自带有一个开源的JAVA数据库HSQL(www.hsqldb.org

 

在这里简单地介绍一下这个数据库,它支持标准的SQL语法和JDBC接口,是一个用纯JAVA编写的数据库,其实它只有一个jar文件而已:hsqldb.jar,在%JBOSS_HOME%/server/default/lib目录下你能找到它。

启动这个数据库有三种模式:Server模式、进程模式和内存模式,在Server模式下,你可以用下面的命令让它启动起来:

$cd %JBOSS_HOME%/server/default/lib

$ java -cp hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 demoDB

其中mydb是数据库名,demoDB是数据库别名,我们用JDBC连它是就用这个别名,用户名是sa,密码默认是空,我们下列语句就能创建表、插入数据了

create table employee (

  employee_id int,

  employee_name varchar(50),

  age int,

  hiredate date

)

insert into employee values(1, 'linyufa', 33, '2007-12-17')

insert into employee values(2, 'scott', 25, '2008-11-23')

insert into employee values(3, 'larry', 35, '2004-11-23')

 

想进一步了解HSQL的知识,网上有很多学习资料,好了,回到我们讨论的JMS话题,有了这个数据库,那我们就不必去找其他数据库了,JMS默认是用内存模式来启动它的,所以我们基本上不用去关心它是如何工作的。

1)   在 %JBOSS_HOME%/server/default/deploy/jms目录下,

打开hsqldb-jdbc-state-service.xml文件,

 

<depends optional-attribute-name="ConnectionManager">

            jboss.jca:service= DataSourceBinding, name=DefaultDS

</depends>

DefaultDS这个名字就是JMS连接数据库的数据源,可以让其保持默认值。

 

2)   再在同一目录打开hsqldb-jdbc2-service.xml 文件,

<depends optional-attribute-name="ConnectionManager">

jboss.jca:service=DataSourceBinding,name=DefaultDS

      </depends>

DefaultDS这个名字保持和前面一致即可,也可以让其保持默认值。

 

3)   在同一目录打开jbossmq-destinations-service.xml文件,找到下面的代码段:

<mbean code="org.jboss.mq.server.jmx.Topic"

    name="jboss.mq.destination:service=Topic,name=testTopic">

    <depends optional-attribute-name="DestinationManager">

       jboss.mq:service=DestinationManager

    </depends>

    <depends optional-attribute-name="SecurityManager">

       jboss.mq:service=SecurityManager

    </depends>

    <attribute name="SecurityConf">

       <security>

       <role name="guest" read="true" write="true"/>

       <role name="publisher" read="true" write="true" create="false"/>

       <role name="durpublisher" read="true" write="true" create="true"/>

       </security>

    </attribute>

</mbean>

这是定义一个名叫testTopic的示例,如果你要定义一个新的topic,只需要复制这段代码,改一下name属性即可。

 

同样找到下面这段的代码,这是定义一个名叫testQueue的示例,如果要定义一个新的queue,复制这段代码,改一下名字即可。

<mbean code="org.jboss.mq.server.jmx.Queue"

    name="jboss.mq.destination:service=Queue,name=testQueue">

    <depends optional-attribute-name="DestinationManager">

       jboss.mq:service=DestinationManager

    </depends>

    <depends optional-attribute-name="SecurityManager">

        jboss.mq:service=SecurityManager

    </depends>

    <attribute name="MessageCounterHistoryDayLimit">-1</attribute>

    <attribute name="SecurityConf">

      <security>

       <role name="guest" read="true" write="true"/>

       <role name="publisher" read="true" write="true" create="false"/>

       <role name="noacc" read="false" write="false" create="false"/>

      </security>

    </attribute>

</mbean>

 

 

 

4)   启动Jboss后在控制台看到如下输出,即说明JMS正常启动了

09:50:28,390 INFO  [A] Bound to JNDI name: queue/A

09:50:28,406 INFO  [B] Bound to JNDI name: queue/B

09:50:28,406 INFO  [C] Bound to JNDI name: queue/C

09:50:28,406 INFO  [D] Bound to JNDI name: queue/D

09:50:28,421 INFO  [ex] Bound to JNDI name: queue/ex

09:50:28,437 INFO  [testTopic] Bound to JNDI name: topic/testTopic

09:50:28,484 INFO  [securedTopic] Bound to JNDI name: topic/securedTopic

09:50:28,484 INFO  [testDurableTopic] Bound to JNDI name: topic/testDurableTopic

09:50:28,500 INFO  [testQueue] Bound to JNDI name: queue/testQueue

 

5)   如果是Jboss4.2或以上的版本,在启动Jboss时必须指定 –b 0.0.0.0参数,否则本机之外的任何主机都无法连接JMS。可以修改run.bat或run.sh文件,也可以在运行命令时附带上这个参数,如下 sh run.sh –b 0.0.0.0

 

从上面介绍可以看出,在Jboss下配置JMS是非常简单的,仅需要copy一段代码,改个名字即可。如果在WebLogic下,你就要依次配置JMS Module, ConnectionFactory, Topic, Queue, Template,不过好在console都有向导,非常直观,所以配置起来也不是什么难事。

 

JMS编程其他注意事项
创建一个JMS Connection、查找ConnectionFactory和Destination都是需要很大的系统开销的操作,所以我们的应用程序应避免频繁地去做这些操作。一般情况下,我们可以把ConnectionFactory,Connection, Topic, Queue定义成类的成员变量,并在类的构造函数里初始化他们,避免在每次接收和发送JMS消息时去做这些工作。但是因此也带了一个问题,就是说当Connection不可用了(比如JMS Server重启了),我们的应用程序就会开始不工作了,所以我们要有一种机制去检测我们的Connection是否有效,如果已经断掉,应该试图去重新连接,并通知系统管理员。

 

JMS的Connection和JDBC的Connection类似,不再使用后应该关闭,不管是正常退出,还是异常退出,否则别的客户程序可能就再也取不到连接了。Session也是如此。

 

因为JMS工作模式是异步的,我们要意识到调用Connection.start()这个方法,系统已经启动了一个新的线程在工作,也就是说退出了这行语句所在的方法之后,这个线程还在工作,它会不断地去侦听有没有新的JMS消息,直到这个Connection被关闭或不可用。

 

分享到:
评论

相关推荐

    JMS 开发简明教程

    Java消息服务(Java Message ..."JMS简明教程.pdf"这份文档应该详细介绍了这些概念,并可能包括实例代码和最佳实践,可以帮助初学者快速入门JMS。学习JMS不仅可以提升你的专业技能,也有助于解决复杂的企业级问题。

    JMS简明教程--简体中文

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的API...通过阅读"JMS简明教程.pdf",你可以进一步深化对JMS的理解,同时"中国java下载站.url"可能是获取更多Java资源和学习资料的链接。

    一个很好的jms教程

    **JMS(Java Message Service)教程** Java Message Service(JMS)是Java平台中用于创建、发送、接收和读取消息的应用程序接口。...本JMS简明教程将帮助初学者理解其核心概念,并逐步掌握如何在实际项目中运用。

    由浅入深学习、掌握JMS

    **《JMS消息简明教程》** 提供了一个快速入门的指南,简化了JMS的基础知识,适合初学者快速了解JMS的基本概念和操作。它可能包括创建连接工厂、创建和发送消息的示例代码,以及如何测试和调试JMS应用程序的方法。 ...

    JMS.rar_jms

    在学习JMS时,可以参考《JMS简明教程.pdf》这样的文档,它通常会涵盖以上概念,并提供实例代码来帮助理解如何在Java应用程序中使用JMS API创建、发送和接收消息。通过深入学习,开发者可以掌握如何利用JMS构建高可用...

    最新Java电子书.pdf

    这些电子书资源都是世界级程序设计大师作品,包括 Thinking in Java、Java 数据库高级编程宝典、Java distribute computing、JMS 简明教程等。 Java 基础知识 * Thinking in Java 第三版+第四版(中文版+习题答案...

    activemq系列笔记

    4. **JMS简明教程** 这份教程可能提供了JMS基础概念的快速入门,包括消息类型(如TextMessage、ObjectMessage等)、消息模式、生产者和消费者的角色、事务处理以及JMS API的使用方法。 5. **JMS规范教程** JMS...

    Java EE 5 Tutorial (PDF文件)

    通过学习《Java EE 5 Tutorial》,开发者不仅可以掌握这些核心技术,还能了解到如何在实际项目中整合和优化这些组件,提升开发效率和应用性能。这份教程对于想要进入Java企业级开发领域的初学者或是希望更新技能的...

    EJB总结

    《JMS简明教程.pptx》则会帮助你理解JMS的基本概念和使用方式,以及它在企业级应用中的作用。 总之,EJB是Java EE中的重要组成部分,提供了构建企业级应用的强大工具。通过学习和掌握EJB,开发者可以构建出高度模块...

    最新Java电子书.docx

    11. **分布式计算和消息队列**:《Java distribute computing》和《JMS 简明教程》探讨了Java在分布式环境和消息传递中的应用。 12. **游戏编程**:《J2ME Game Programming》介绍了在Java平台上开发移动游戏的技术...

    J2EE中文教材

    J2EE中文教材以简明易懂的语言,结合实际案例,为学习者提供了全面、系统的J2EE学习资源。 **J2EE核心组件** 1. **Java Servlets**: 是J2EE中的核心部分,用于处理HTTP请求并生成响应。Servlets可以扩展服务器功能...

    j2ee程序员必读书.txt

    - **《UML精粹:标准建模语言简明教程》** - 内容:教授UML语言的基本概念和使用方法,有助于软件设计和团队沟通。 - **《重构:改善既有代码的设计》** - 作者:Martin Fowler - 内容:介绍了重构技术,帮助...

Global site tag (gtag.js) - Google Analytics