HornetQ的初始化

    HornetQ是Jboss旗下的一个高性能、异步的并且支持多种协议的消息系统。具体的简介请参照 HornetQ官网。

    本文只是针对HornetQ在Jboss中的启动和加载过程做一个简介,并没有做代码级别的深入解释。涉及的软件版本:服务器版本: jboss-eap-5.1GA,HornetQ版本:hornetq-2.1.2.Final。

    按照HornetQ用户指南在Jboss中安装了HornetQ后,会在JBOSS_HOME/server/下生成default-with- hornetq和all-with-hornetq两个服务器配置。其实可以将HornetQ在boss上的安装看做是HornetQ更换了jboss默认的jms实现并将jboss-messaging替换成了HornetQ。我们以default-with-HornetQ配置为例,发现会在该配置的 deploy目录下生成hornetq.sar与hornetq-ra.rar文件夹。hornetq-ra.rar主要是关于资源适配器的设置,不做本文的重点。hornetq.sar配置的是hornetq服务的相关信息。其目录结构如下:

HornetQ的初始化

    * hornetq-jboss-beans.xml  主要配置了HornetQ服务初始化所依赖的pojobean的相关信息,这个文件中的bean会被Jboss加载,完成Hornetq配置文件的解析,hornetq组件的启动,jms相关的jndi以及客户端的配置等。hornetq-configuration.xml HornetQ的主要配置文件。
    * hornetq-jms.xml                 jms的配置
    * login-config.xml                登陆配置
    * hornetq-roles.properties   角色配置
    * hornetq-users.properties   用户配置

    hornetq-jboss-beans.xml的内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<deployment xmlns="urn:jboss:bean-deployer:2.0">

   <!-- 配置JMX服务器->
   <bean name="MBeanServer" class="javax.management.MBeanServer">
      <constructor factoryClass="org.jboss.mx.util.MBeanServerLocator"
                   factoryMethod="locateJBoss"/>
   </bean>

   <!-- HornetQ的核心配置 -->
   <bean name="Configuration" class="org.hornetq.core.config.impl.FileConfiguration"/>   

	<!-- 安全管理器的配置 -->
   <bean name="HornetQSecurityManager" class="org.hornetq.integration.jboss.security.JBossASSecurityManager">
      <depends>JBossSecurityJNDIContextEstablishment</depends>
      <!--表示加载时不启动-->
      <start ignored="true"/>
      <stop ignored="true"/>
      <property name="allowClientLogin">false</property>
      <property name="authoriseOnClientLogin">false</property>
   </bean>

	<!--Hornetq的核心服务器 -->
   <bean name="HornetQServer" class="org.hornetq.core.server.impl.HornetQServerImpl">
   <!--表示bean之间的依赖关系-->
      <constructor>
         <parameter>
            <inject bean="Configuration"/>
         </parameter>
         <parameter>
            <inject bean="MBeanServer"/>
         </parameter>
         <parameter>
            <inject bean="HornetQSecurityManager"/>
         </parameter>        
      </constructor>
       <!--表示加载时不启动-->
      <start ignored="true"/>
      <stop ignored="true"/>          
   </bean>
   
   <!--  JMS 服务器 -->
   <bean name="JMSServerManager" class="org.hornetq.jms.server.impl.JMSServerManagerImpl">
      <constructor>         
         <parameter>
            <inject bean="HornetQServer"/>
         </parameter>         
      </constructor>
   </bean>
   
   <!-- POJO which ensures HornetQ Resource Adapter is stopped before HornetQServer -->
   <!--                                                                             -->
   <!-- update the RA object name if you rename hornetq-ra.rar to jms-ra.rar        -->
   <bean name="HornetQRAService" class="org.hornetq.ra.HornetQRAService">
      <constructor>
         <parameter>
            <inject bean="MBeanServer"/>
         </parameter>
         <parameter>jboss.jca:name='hornetq-ra.rar',service=RARDeployment</parameter>
      </constructor>
      <depends>HornetQServer</depends>
   </bean>
   
</deployment>






    由上面的配置可以看出,Hornetq最终启动是由 org.hornetq.jms.server.impl.JMSServerManagerImpl类触发,该类初始化的过程中会触发HornetQ的核心服务器的初始化,使HornetQ的各个组件都处于运行的状态,例如Acceptor监听各自的端口和服务。


HornetQ的初始化

    由上图可以看出JMSServerManagerImpl负责调用HornetQ Server的初始化工作,hornetQ会根据自己是不是主备来决定要不要是JMS的相关队列和工厂对外提供服务。
那么备机什么时候会初始化JMS server呢?答案是在主机宕机的情况下,当客户端连接到备机的时候才会调用JMSServerManagerImpl的actived(),而是备机激活JMS服务。


你可能感兴趣的:(xml,bean,jboss,jms,配置管理)