Dreamisle.net Blog

Java, Rails, Security and so many ...

Migration De Seam 2.0.x Vers Seam 2.1.x

| Comments

Ayant effectué la migration d’un projet de Seam 2.0.x vers Seam 2.1.x voici les modifications que j’ai eu à apporter : Dans le fichier components.xml de chaque war, il faut adapter les règles des composants de sécurité / identity ainsi :

  <security:rule-based-permission-resolver security-rules="#{securityRules}"/>
  
  <drools:rule-base name="securityRules">
    <drools:rule-files>
      <value>/security.drl</value>
    </drools:rule-files>
  </drools:rule-base>
  
   <security:identity authenticate-method="#{authenticator.authenticate}" />

Si vous avez des erreur de parsing du security.drl après l’ajout de cette configuration, et que vous n’utilisez pas de règles type drools pour la gestion de la sécurité, vous devez netoyer le fichier security.drl et ne laisser que package Permissions; Si vous avez des problèmes de restaurations des JSF avec un messages d’erreur disant qu’il y a eu un problème dans la phase invoke Application de JSF il faut ajouter au web.xml de chaque war :

<context-param>
        <param-name>facelets.BUILD_BEFORE_RESTORE</param-name>
        <param-value>true</param-value>
</context-param>

Lors que vous avez surchargé le getRestrictions() d’un Objet héritant de EntityQuery la fonction ne renvoi plus une List mais une List plusieurs méthodes circulent sur les forums de Seam. Néanmoins la seule que j’ai trouvé à peu près propre et fonctionelle est de remplacer vos list par des List :

List<ValueExpression> restrictions = new ArrayList<ValueExpression>();

Et les add sur la liste doivent se présenter ainsi :

restrictions.add(createValueExpression("{Restriction EJBQL}"));

La version de richfaces intégrée à Seam 2.1, la v3.2.2.SR1 a apporté des modifications au niveau CSS, si les rich:modalPanel apparaissent en noir c’est que vous avez joué sur la propriété opacity et z-order dans vos propres css. Supprimer ces propriétés règlera le problème

Enfin l’ajout de facesMessages du type :

facesMessages.add(new FacesMessage("messages"));

Est désormais déprécié. Préferez les addToControl en spécificant l’Id du champ contrôlé, voir même en précisant le dégré de sévérité : info, warn, erreur …

Et pour terminer la gestion de l’identity ayant changé, il faut désormais utiliser les Credentials pour gérer les username et password de vos utilisateurs, les get/set userName et password dans identity sont maintenant en deprecated (ils seront probablement supprimés dans Seam 2.2 ou suivante) De nouvelles annotations ont aussi été ajouté pour faciliter cette gestion @Username @Password(hash=…) etc … Vous devez, si vous bindiez vos username et password vers identity, les binder désormais vers credentials. Les credentials sont injectable comme n’importe quel composant grâce @In ou bien par

Identity.instance().getCredentials().getUsername()