Pour déployer le module de provisioning basé sur les rôles sur la plate-forme JBoss 5.1.2 Enterprise Application Platform (EAP), vous devez effectuer plusieurs opérations manuelles de configuration. Le processus de configuration est décrit ci-dessous :
Installez JBoss 5.1.2 EAP.
Copiez le fichier jbosssx.jar depuis le répertoire %jboss-root%/lib vers le répertoire %jboss-root%/common/lib avant de lancer le programme d'installation de l'application utilisateur RBPM.
Installez l'application utilisateur RBPM.
Remplacez le fichier messaging-jboss-beans.xml en votre possession par un fichier XML modifié.
Si vous déployez RBPM sur JBoss 5.1.2 EAP sans remplacer le fichier messaging-jboss-beans.xml, il est possible que plusieurs avertissements et erreurs soient consignés dans le journal de démarrage.
Le problème est que le programme d'installation de RBPM utilise la version communautaire du fichier messaging-jboss-beans.xml comme modèle pour générer sa propre version du fichier. Malheureusement, la version EAP diffère à de nombreux égards, notamment au niveau des définitions de QueueMODefinition et de TopicMODefinition.
La solution à ce problème consiste à remplacer le fichier messaging-jboss-beans.xml en votre possession par le fichier XML modifié illustré ci-dessous. Le fichier doit se trouver dans le dossier IDMProv/deploy/messaging.
<?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>
Remplacez le fichier postgresql-persistence-service.xml par le fichier %jboss-root%/docs/examples/jms/postgresql-persistence-service.xml et copiez-le dans %jboss-root%/server/IDMProv/deploy/messaging/.
Modifiez le fichier postgresql-persistence-service.xml et remplacez le texte DefaultDS par IDMUADataSource.
Dans le fichier postgresql-persistence-service.xml, mettez également en commentaire les lignes suivantes de l'attribut Clustered :
<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>
De plus, dans postgresql-persistence-service.xml :
Recherchez la ligne suivante :
POPULATE.TABLES.3 = INSERT INTO JBM_USER (USER_ID, PASSWD, CLIENTID)
VALUES ('john', 'needle', 'DurableSubscriberExample')
Remplacez-la par cette ligne :
POPULATE.TABLES.3 = INSERT INTO JBM_USER (USER_ID, PASSWD,
CLIENTID) VALUES ('p_user', 'changeit', 'IDMNotificationDurableTopic')
Recherchez la ligne suivante :
POPULATE.TABLES.8 = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID) VALUES
('john','guest')
Remplacez-la par cette ligne :
POPULATE.TABLES.8 = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID)
VALUES ('p_user','guest')
Recherchez la ligne suivante :
POPULATE.TABLES.9 = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID) VALUES
('subscriber','john')
Remplacez-la par cette ligne :
POPULATE.TABLES.9 = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID)
VALUES ('subscriber','p_user')
Recherchez la ligne suivante :
POPULATE.TABLES.10 = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID) VALUES
('publisher','john')
Remplacez-la par cette ligne :
POPULATE.TABLES.12 = INSERT INTO JBM_ROLE (ROLE_ID, USER_ID)
VALUES ('durpublisher','p_user')
Démarrez JBoss.
Si votre configuration est correcte, les informations suivantes figurent dans le journal du serveur :
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
Les informations ci-dessous sont également présentes plus loin dans le journal :
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
Par ailleurs, le script stop-jboss.sh créé lors du processus d'installation doit être modifié. L'ID utilisateur et le mot de passe de l'administrateur de JBoss doivent être ajoutés à la fin de la commande d'arrêt :
shutdown.sh -s jnp://localhost:1199 -u %value% -p %value%
Par exemple :
shutdown.sh -s jnp://localhost:1199 -u admin -p novell