5.2 Bereitstellen des RBPM auf der JBoss EAP

Zum Bereitstellen des rollenbasierten Bereitstellungsmoduls auf der JBoss 5.1.2 Enterprise-Anwendungsplattform (EAP) müssen Sie die folgenden manuellen Einrichtungsschritte ausführen. Der Einrichtungsvorgang wird nachfolgend kurz beschrieben:

  1. Installieren Sie die JBoss 5.1.2 EAP.

  2. Kopieren Sie vor dem Starten des Installationsprogramms für die RBPM-Benutzeranwendung die Datei jbosssx.jar aus dem Verzeichnis %jboss-root%/lib in das Verzeichnis %jboss-root%/common/lib.

  3. Installieren Sie die RBPM-Benutzeranwendung.

  4. Ersetzen Sie die vorhandene Datei messaging-jboss-beans.xml durch eine geänderte XML-Datei.

    Wenn Sie das RBPM auf der JBoss 5.1.2 EAP bereitstellen, ohne die Datei messaging-jboss-beans.xml zu ersetzen, sehen Sie möglicherweise im Startprotokoll mehrere Warnhinweise und Fehler.

    Die Ursache dieses Problems liegt darin, dass das Installationsprogramm des rollenbasierten Bereitstellungsmoduls die Community-Version der Datei messaging-jboss-beans.xml als Vorlage für die eigene Version der Datei verwendet. Die EAP-Version unterscheidet sich jedoch in vielen Punkten von der RBPM-Version, z. B. sind die Definitionen von "QueueMODefinition" und "TopicMODefinition" unterschiedlich.

    Sie können das Problem umgehen, indem Sie die Datei messaging-jboss-beans.xml durch die folgende geänderte XML-Datei ersetzen. Die Datei muss im Ordner IDMProv/deploy/messaging gespeichert werden.

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!--
     ========================================================================
    
     Copyright (c) 2009 Novell, Inc. All Rights Reserved.
    
     THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND TREATIES
     NO PART OF THIS WORK MAY BE USED, PRACTICED, PERFORMED COPIED, DISTRIBUTED,
     REVISED, MODIFIED, TRANSLATED, ABRIDGED, CONDENSED, EXPANDED, COLLECTED,
     COMPILED, LINKED, RECAST, TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN
     CONSENT OF NOVELL, INC. ANY USE OR EXPLOITATION OF THIS WORK WITHOUT
     AUTHORIZATION COULD SUBJECT THE PERPETRATOR TO CRIMINAL AND CIVIL
     LIABILITY.
    
     ========================================================================
    -->
    
    <!--
        Messaging beans
        $Id: messaging-jboss-beans.xml 88672 2009-05-11 20:49:47Z anil.saldhana@jboss.com $
    -->
    <deployment xmlns="urn:jboss:bean-deployer:2.0">
    
       <!-- messaging application-policy definition -->
       <application-policy xmlns="urn:jboss:security-beans:1.0" name="messaging">
          <authentication>
             <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
                <module-option name="unauthenticatedIdentity">guest</module-option>
                <module-option name="dsJndiName">java:/IDMUADataSource</module-option>
                <module-option name="principalsQuery">SELECT PASSWD FROM JBM_USER WHERE USER_ID=?</module-option>
                <module-option name="rolesQuery">SELECT ROLE_ID, 'Roles' FROM JBM_ROLE WHERE USER_ID=?</module-option>
             </login-module>
          </authentication>
       </application-policy>
    
       <bean name="SecurityStore" class="org.jboss.jms.server.jbosssx.JBossASSecurityMetadataStore">
          <!-- default security configuration -->
          <property name="defaultSecurityConfig">
             <![CDATA[
                <security>
                   <role name="guest" read="true" write="true" create="true"/>
                </security>
             ]]>
          </property>
          <property name="suckerPassword">changeit</property>
          <property name="securityDomain">messaging</property>
          <property name="securityManagement"><inject bean="JNDIBasedSecurityManagement"/></property>
          <!-- @JMX annotation to export the management view of this bean -->
          <annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.messaging:service=SecurityStore",exposedInterface=org.jboss.jms.server.jbosssx.JBossASSecurityMetadataStoreMBean.class)</annotation>
          <!-- Password Annotation to inject the password from the common password utility
           <annotation>@org.jboss.security.integration.password.Password(securityDomain="messaging",methodName="setSuckerPassword")</annotation>
           -->
       </bean>
    
       <bean name="MessagingDeploymentTemplateInfoFactory"
          class="org.jboss.managed.plugins.factory.DeploymentTemplateInfoFactory"/>
    
       <bean name="QueueTemplate" class="org.jboss.profileservice.management.templates.JmsDestinationTemplate">
          <property name="info"><inject bean="QueueTemplateInfo"/></property>
       </bean>
       <bean name="QueueTemplateInfo"
          class="org.jboss.profileservice.management.templates.JmsDestinationTemplateInfo">
          <constructor factoryMethod="createTemplateInfo">
             <factory bean="DSDeploymentTemplateInfoFactory"/>
             <parameter class="java.lang.Class">org.jboss.profileservice.management.templates.JmsDestinationTemplateInfo</parameter>
             <parameter class="java.lang.Class">org.jboss.jms.server.destination.QueueServiceMO</parameter>
             <parameter class="java.lang.String">QueueTemplate</parameter>
             <parameter class="java.lang.String">A template for JMS queue *-service.xml deployments</parameter>
          </constructor>
          <property name="destinationType">QueueTemplate</property>
       </bean>
    
       <bean name="TopicTemplate" class="org.jboss.profileservice.management.templates.JmsDestinationTemplate">
          <property name="info"><inject bean="TopicTemplateInfo"/></property>
       </bean>
       <bean name="TopicTemplateInfo"
          class="org.jboss.profileservice.management.templates.JmsDestinationTemplateInfo">
          <constructor factoryMethod="createTemplateInfo">
             <factory bean="DSDeploymentTemplateInfoFactory"/>
             <parameter class="java.lang.Class">org.jboss.profileservice.management.templates.JmsDestinationTemplateInfo</parameter>
             <parameter class="java.lang.Class">org.jboss.jms.server.destination.TopicServiceMO</parameter>
             <parameter class="java.lang.String">TopicTemplate</parameter>
             <parameter class="java.lang.String">A template for JMS topic *-service.xml deployments</parameter>
          </constructor>
          <property name="destinationType">TopicTemplate</property>
       </bean>
    
    </deployment>
    
  5. Ersetzen Sie die Datei postgresql-persistence-service.xml durch die Datei %jboss-root%/docs/examples/jms/postgresql-persistence-service.xml und kopieren Sie diese in den Pfad %jboss-root%/server/IDMProv/deploy/messaging/.

  6. Bearbeiten Sie die Datei postgresql-persistence-service.xml und ersetzen Sie den Text DefaultDS durch den Text IDMUADataSource.

  7. In der Datei postgresql-persistence-service.xml müssen Sie auch die folgenden Zeilen im Attribut Clustered auskommentieren:

    <attribute name="Clustered">false</attribute>
    
          <!-- All the remaining properties only have to be specified if the post
    office is clustered.
               You can safely comment them out if your post office is non clustered
    -->
    
          <!-- The JGroups group name that the post office will use -->
    
          <!--attribute
    name="GroupName">${jboss.messaging.groupname:MessagingPostOffice}</attribute>-->
    
          <!-- Max time to wait for state to arrive when the post office joins the
    cluster -->
    
          <!--attribute name="StateTimeout">30000</attribute>-->
    
          <!-- Max time to wait for a synchronous call to node members using the
    MessageDispatcher -->
    
          <!--attribute name="CastTimeout">30000</attribute>-->
    
          <!-- Set this to true if you want failover of connections to occur when a
    node is shut down -->
    
          <!--<attribute name="FailoverOnNodeLeave">false</attribute>
    
          <depends
    optional-attribute-name="ChannelFactoryName">jboss.jgroups:service=ChannelFactory</depends>
          <attribute name="ControlChannelName">jbm-control</attribute>
          <attribute name="DataChannelName">jbm-data</attribute>
          <attribute
    name="ChannelPartitionName">${jboss.partition.name:DefaultPartition}-JMS</attribute>-->
       </mbean>
    
  8. Ebenso in postgresql-persistence-service.xml:

    1. Suchen Sie diese Zeile:

      POPULATE.TABLES.3  = INSERT INTO JBM_USER (USER_ID, PASSWD, CLIENTID)
      VALUES ('john', 'needle', 'DurableSubscriberExample')
      

      Ersetzen Sie sie durch diese Zeile:

      POPULATE.TABLES.3  = INSERT INTO JBM_USER (USER_ID, PASSWD,
      CLIENTID) VALUES ('p_user', 'changeit', 'IDMNotificationDurableTopic')
      
    2. Suchen Sie diese Zeile:

      POPULATE.TABLES.8  = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID) VALUES
      ('john','guest')
      

      Ersetzen Sie sie durch diese Zeile:

      POPULATE.TABLES.8  = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID)
      VALUES ('p_user','guest')
      
    3. Suchen Sie diese Zeile:

      POPULATE.TABLES.9  = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID) VALUES
      ('subscriber','john')
      

      Ersetzen Sie sie durch diese Zeile:

      POPULATE.TABLES.9  = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID)
      VALUES ('subscriber','p_user')
      
    4. Suchen Sie diese Zeile:

      POPULATE.TABLES.10 = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID) VALUES
      ('publisher','john')
      

      Ersetzen Sie sie durch diese Zeile:

      POPULATE.TABLES.12 = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID)
      VALUES ('durpublisher','p_user')
      
  9. Starten Sie JBoss.

    Wenn die Konfiguration richtig ist, sehen Sie die folgende Information im Serverprotokoll:

    INFO  [ServerPeer] JBoss Messaging 1.4.7.GA server [0] started
    {About 7 lines down}
    INFO  [TopicService] Topic[/topic/IDMNotificationDurableTopic] started,
    fullSize=200000, pageSize=2000, downCacheSize=2000
    

    Außerdem sehen Sie diese Information weiter unten im Protokoll:

    INFO  [RBPM] [com.novell.soa.notification.impl.jms.JMSConnectionMediator:init]
    Starting JMS notification system
    INFO  [STDOUT] INFO  [RBPM]
    [com.novell.soa.notification.impl.NotificationThread:run] Starting asynchronous
    notification system
    

Zudem muss das Skript „stop-jboss.sh“, das bei der Installation erstellt wurde, geändert werden. Die Benutzer-ID und das Passwort des JBoss-Administrators müssen am Ende des Befehls zum Herunterfahren angehängt werden:

shutdown.sh -s jnp://localhost:1199 -u %value% -p %value%

Beispiel:

shutdown.sh -s jnp://localhost:1199 -u admin -p novell