Monthly Archives: January 2009

为什么要用JMS CONNECTOR?如何用?

通过JMS API,可以直接连接JMS Resource Provider,为什么还要通过JCA的方式,搞出一个JMS CONNECTOR?因为:

   文档说:JMS CONNECTOR提供一些附加价值: transaction, pooling,signed-on

  

如果用了JMS CONNECTOR,应该注意啥?

  文档说:when using the JMS Connector, the application need not (and in general should not) directly look up or use any RP resources.

    

JCA基本概念

干什么用的?
     用于连接J2EE COMPOMENT与其他EIS系统(如ERP),使两者之前可以交互。比如, 通过连接器扩展MDB,使它能够处理任何message provider的消息,包括非JMS的message provider

它具体是什么东西?
     它是一个Resouce Adapter,即把其他EIS系统适配成可以让J2EE组件直接访问的东西,类似于 JDBC DRIVER

那它怎么玩的?
     用 ra.xml, *-ra.xml描述,然后部署到j2ee server里运行(可以作为stand-alone的应用来部署,也可以嵌入到其他EAR中运行)

SQL查询的一点点调优经验

   1.尽量减少表连接,尤其是尽量避免自己跟自己连接

   2.用于表连接的字段要做索引,而且两个表的连接字段都要索引。

   3.作为查询条件的字段要做索引。比如说,若按“年龄”查找记录,则"出生日期"字段应该建索引

JMS的基本概念

啥是JMS:
   A Java API that allows applications to create, send, receive, and read messages using reliable, asynchronous, loosely coupled communication

   Defines a common set of interfaces and associated semantics that allow programs written in the Java programming language to communicate with other messaging implementations

JMS不作什么
    JMS自己不实现消息服务机制.消息服务是由 MOM(messaging-oriented middleware) 提供的

    不过,现在很多MOM都采纳了JMS机制并提供了JMS实现,so a JMS product can now provide a complete messaging capability for an enterprise.

消息发送的两种机制:
    a.point to point. 两者之间的消息通过 queue 来传送

     b.publisher/subscriber . publisher发布一个主题(topic),登记了该主题的subscriber都可以收到该topic相关的消息

   可顾名思义,不多讲

JMS体系结构
     a.jms provider: 即MOM

    b.jms clients: 如producers,consumers

    c.message: text,byte,object等

    d.administered objects:即“资源”,都是通过JNDI来声明的

        A.Connection工厂. 这里的connection指client 与 provider通讯时的连接

        B.发送消息的目的地(Destionation).如p2p模式下的queue,和 pub/sub模式下的topic

可靠性
    a.最可靠

        The most reliable way to produce a message is to send a PERSISTENT message within a transaction

        The most reliable way to consume a message is to do so within a transaction, either from a queue or from a durable subscription to a topic.

    b.自定义可靠性级别

        i. Controlling message acknowledgment

           在事务session中,acknowledgment是在事务提交时自动产生的;

             而在非事务session中,需要自定义acknowledgment模式,有以下以几种

                a.AUTO_ACKNOWLEDGE  

              b.CLIENT_ACKNOWLEDGE 

              c.DUPS_OK_ACKNOWLEDGE

        ii.Specifying message persistence

              a.PERSISTENT(默认选项)  要求provider将消息持久化,一旦provider当机,消息仍可恢复

              b.NON_PERSISTENT  不对provider提出以上要求

        iii.Setting message priority levels

             provider会尽力按优先级来发送消息,但是不保证精确

        iv. Allowing messages to expire

       v. Creating temporary destinations

              一般destination都是在provider中手工配置的,但我们也可以通过编码生成临时的destination.具体有啥用还不知道

事务
     消息操作可以不在事务中执行,也可以在事务中执行。JMS事务可以分为两种

        i.JMS API 本地事务. 它类似于JDBC API的事务,通过JMS API自己的commit(), rollback()方法来提交或回滚

       ii.分布式事务。要MDB的事务管理机制来搞

MDB
      A message-driven bean is a message listener that can reliably consume messages from a queue or a durable subscription

      它和普通的listener的区别就是:它是一种EJB。 它有ejbCreate(),ejbRemove()等方法,而且,它所对应的connection factory和destionantion都是在容器中配置好的,而不是通过写代码确定的

运行在J2EE app server中的MDB 如何与jms provider 连接?有两种方法

          a.deploy the MDB to use the JMS provider via the proprietary interface provided by your J2EE container

         b.use a JCA resource adapter

一些零碎
    a.一个消息如果没被acknowledge,那系统就认为它没有被消费掉,就会继续把消息放在队列里

    b.acknowledge 以事务为边界

       i.事务提交时,acknowledgement就会自动产生

      ii.事务回滚后,所有已消费的消息都会重发一遍