Accès au services de portlet

A l'aide d'un exemple, découvrez comment un portlet standard peut extraire et utiliser un échantillon de service de portlet. Pour accéder à un service de portlet, il convient de disposer d'une recherche JNDI pour un PortletServiceHome. Pour utiliser le service de portlet, récupérez un objet de service sur la page d'accueil, transférez-le vers l'interface propre au service et appelez les méthodes de service.

Cette section décrit la manière dont un portlet appelle un service de portlet. Voir Services de portlet pour un aperçu des services de portlet. L'exemple suivant montre comment un portlet standard peut extraire et utiliser un échantillon de service de portlet. L'implémentation et le déploiement du service sont expliqués dans Création de votre propre service de portlet.

Pour accéder à un service de portlet, il convient de disposer d'une recherche JNDI pour un PortletServiceHome. L'opération étant susceptible de s'avérer coûteuse, il est recommandé de la réaliser conformément à la méthode init() du portlet et d'enregistrer l'objet renvoyé dans une variable d'instance :


   import javax.portlet.*;
   import com.ibm.portal.portlet.service.*;

   private PortletServiceHome helloServiceHome = null;
   ...
   
   public void init(PortletConfig config) 
   {
      javax.naming.Context ctx = new javax.naming.InitialContext();
      try {
          Object home = 
                ctx.lookup("portletservice/sample.portletservice.HelloService");
          if (home != null) 
                   helloServiceHome = (PortletServiceHome) home;
      } catch(javax.naming.NameNotFoundException ex) {
      // we can do without the service, if it is not available
      config.getPortletContext().log("No hello service available");
      }
   }

Cet exemple est écrit de manière à gérer efficacement une situation dans laquelle le service est indisponible car ce service est en option pour cette fonctionnalité du portlet. Dans la mesure du possible, il est recommandé d'écrire vos portlets de manière à ce qu'ils soient portables vers d'autres installations de portails, qu'ils prennent en charge un service de portlet donné ou non. Les portlets de ce type peuvent toujours s'exécuter sur des portails ne prenant pas du tout en charge les services de portlet et ne fournissant même pas la classe PortletServiceHome propre à IBM, cette dernière n'étant chargée que lorsque le service est effectivement enregistré dans JNDI.

Pour utiliser le service de portlet, récupérer un objet de service sur la page d'accueil, le transférer vers l'interface propre au service et appeler les méthodes de service :

   public void doView(RenderRequest request, RenderResponse response)
   {
      if (helloServiceHome != null)
      {
         HelloService service = 
               (HelloService) helloServiceHome.getPortletService(HelloService.class);
         service.sayHello(request, response);
      }
   
      //... do other stuff
   }

Notez que, bien qu'il soit approprié d'enregistrer l'objet PortletServiceHome dans une variable d'instance, vous ne devez pas conserver l'objet de service à proprement parler, les références aux objets de service ne pouvant être conservées au-delà d'une requête.