Création d'un portlet simple
Pour créer un portlet simple, vous devez écrire le code du portlet, compiler la source Java, créer le fichier JAR, écrire les descripteurs du portlet, définir la structure de répertoire du fichier WAR et conditionner puis déployer les portlets.
Avant de commencer à développer des portlets, configurez un environnement qui facilite l'écriture, la compilation et le test des portlets. Rational® Application Developer inclut un environnement de test que vous pouvez utiliser pour exécuter et déboguer vos portlets sans avoir à les déployer manuellement sur le serveur. Vous pouvez configurer l'environnement d'exécution pour déboguer les portlets sur la machine de développement locale ou sur un serveur distant. Pour obtenir des instructions de configuration complètes, voir la documentation de Rational® Application Developer.
Rational® Application Developer fournit des assistants pour vous aider à construire, tester et déployer des portlets à l'aide de l'ensemble des API, des classes relatives et des interfaces disponibles dans l'environnement d'exécution du portlet. Vous pouvez également générer des portlets à l'aide de votre propre environnement de développement et de vos outils. Si vous n'utilisez pas d'assistants pour développer des portlets, les rubriques suivantes décrivent les mécanismes de génération d'un portlet simple.
Ecriture du code d'un portlet
navcode 1WP10017Z. Voir la rubrique Portlets modèles pour plus d'informations. Hello World fournit les méthodes minimales requises pour un portlet. Il utilise l'objet de réponse portlet pour écrire un résultat simple directement sur la page du portail.
package com.ibm.wps.samples.jsr;
import javax.portlet.*;
import java.io.*;
public class HelloWorld extends GenericPortlet {
public void init (PortletConfig portletConfig) throws UnavailableException, PortletException
{
super.init(portletConfig);
}
public void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException
{
// set return content type
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<p class='wpsPortletText'>Hello Portal World!</p>");
}
}
Compilation d'une source Java
- AIX® HP-UX Linux™ Solaris: ./setupcmdLine.sh
- IBM® i: setupcmdLine.sh
- Windows™ : setupcmdLine.bat
- z/OS® : setupcmdLine.sh
- Portlets standard
Ces fichiers se trouvent dans le répertoire PortalServer_root/doc/compile.Tableau 1. Description des fichiers JAR des portlets standard fichier JAR Objectif portletapi_20.jarCe fichier respecte Java Portlet Specification version 2.0. public_api.jarUtilisez ce fichier si vous recourez à des services du package Public API Javadoc. public_api.jar + public_spi.jarUtilisez ce fichier si vous recourez à des services du package Public SP Javadoc. - Portlets HCL DX
Tableau 2. Description des fichiers JAR des portlets HCL DX fichier JAR Objectif wp.pe.api.legacy.jarAPI de portlet HCL wp.portletservices.api.legacy.jarServices de portlet wp.pe.rt.api.jarLes menus de portlet
appserver\java\bin\javac -classpath %WAS_CLASSPATH%;path_to\portletapi_20.jar
com.ibm.wps.samples.jsr.HelloWorld.java
appserver\java\bin\javac -classpath %WAS_CLASSPATH%;path_to\portletapi_20.jar
com.ibm.wps.samples.v4.HelloWorld.java
- Chargement de classes pour des portlets
Le processus de chargement de classes HCL DX respecte la hiérarchie de WebSphere® Application Server en ce qui concerne les chemins d'accès aux classes et les demandes de recherche. Vous pouvez faire référence à une classe si le chargeur de classe parent ou votre propre chargeur de classe le permet. Vous ne pouvez pas faire référence à une classe si un chargeur de classe enfant y fait référence. La figure montre l'emplacement d'HCL DX et des applications de portlet dans la hiérarchie de chargement des classes.
Dans l'image suivante, les correctifs du chemin de classe d'exécution (RCP) se trouvent au sommet de la hiérarchie. Le chemin de classe d'exécution (RP) part des correctifs de chemin de classe d'exécution. Les extensions d'exécution (RE) partent du chemin de classe d'exécution et les extensions d'application (AEX) partent des extensions d'exécution. Les chargeurs de classe d'application AC1, AC2 et AC3 sont des applications de portlet qui partent des extensions d'application.

Comme vous le voyez, HCL DX est une extension d'application (AEX) dans WebSphere® Application Server. Les classes principales d'HCL DX se trouvent dans le chemin de classe PortalServer_root/shared/app. Si une application de portlet installée comporte un chargeur de classe, il s'agit d'un chargeur de classe d'application (ACx) dans HCL DX.
En cas d'incident lié au chargement des classes, assurez-vous que les classes requises sont dans les bons chemins de classe, selon la hiérarchie du chargement des classes.
Création du fichier JAR
Ensuite, le portlet doit être mis en forme dans le format de fichier JAR. Pour créer un fichier JAR du nom de HelloWorld.jar, entrez la commande suivante :
jar -cf HelloWorld.jar HelloWorld.class
Pour plus d'informations sur la commande JAR, reportez-vous à la documentation de JDK.
Ecriture des descripteurs d'un portlet
Les modèles suivants peuvent être mis en forme avec le portlet Hello World.
- Descripteur de déploiement d'application Web pour les portlets standard
- Selon Java Portlet Specification, seules les ressources Web qui ne sont pas des portlets doivent être déclarées dans web.xml. Toutefois, les propriétés suivantes doivent être définies pour correspondre au descripteur de portlet :
<description/>décrit l'application de portlet.
<display-name/>indique le nom de l'application de portlet.
<security-role/>indique la correspondance de rôle de sécurité de l'application de portlet. Omettez cette balise si le portlet n'utilise pas cette fonction.
Figure 2. Exemple : Descripteur de déploiement d'application Web pour Hello World (portlets standard) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app id="WebApp"> <display-name>Hello World (JSR)</display-name> <description>Basic JSR 168 portlet</description> </web-app> - Descripteur de déploiement de portlet standard :
- L'exemple suivant montre les éléments minimum requis pour le descripteur de déploiement de portlet standard.
Figure 3. Exemple : Descripteur de déploiement de portlet pour Hello World (standard) <?xml version="1.0" encoding="UTF-8"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"> <portlet> <portlet-name>HelloWorld portlet name</portlet-name> <display-name>Hello World portlet (JSR)</display-name> <display-name xml:lang="fr-fr">Hello World portlet (JSR)</display-name> <portlet-class>com.ibm.wps.samples.jsr.jsrHelloWorld</portlet-class> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> <supported-locale>en</supported-locale> <portlet-info> <title>Hello World (JSR)</title> </portlet-info> </portlet> </portlet-app>Le descripteur de portlet standard est défini par un schéma XML et ne nécessite pas de DTD.
Configuration de l'arborescence de fichiers WAR
Avant de mettre en forme le portlet, les fichiers de classes et les ressources doivent être organisés dans l'arborescence du fichier WAR décrite ci-dessous. Une application de portlet existe en tant que hiérarchie structurée de répertoires.
.tld pour les bibliothèques de balises fournies par le portail ou le serveur d'applications avec le fichier WAR de l'application de portlet. Cela inclut les balises de portlets JSR 168 et 286 et la bibliothèque JSTL (Java Standard Tag Library)./- Répertoire racine de la structure des fichiers du portlet.
/images- Emplacement de toutes les images requises par le portlet.
/WEB-INF- Emplacement de toutes les ressources protégées. Le répertoire
/WEB-INFcontient le document du descripteur de portlet ainsi que toutes les classes et fichiers JAR exécutables nécessaires au portlet mis en forme.Le répertoire contenant les informations sur le portlet ne fait pas partie de l'arborescence de documents publics de l'application. Les fichiers qui se trouvent dans
/WEB-INFne sont pas directement présentés au client. /WEB-INF/lib- Emplacement de stockage des fichiers JAR du portlet.
/WEB-INF/jsp- Emplacement des fichiers JSP. Il s'agit d'un nom de chemin d'accès suggéré. Vos fichiers JSP peuvent être insérés à n'importe quel endroit. Ceux inclus dans le marquage du portlet doivent être placés dans le répertoire
/WEB-INF. Placez-les en dehors du répertoire/WEB-INFsi vous créez directement des liens à ces fichiers. /WEB-INF/classes- Emplacement des fichiers de classe du portlet. Chaque fichier de classe doit être stocké au sein de
/WEB-INF/classes, dans une arborescence qui reflète le module de la classe. Par exemple, la classeHelloWorld.class, de l'ensemblecom.ibm.wps.samples, serait stockée dans/WEB-INF/classes/com/ibm/wps/samples/HelloWorld.class. /META-INF- Emplacement du fichier manifeste
manifest.mfet du fichier de sécurité Java 2 was.policy (si présent). Le fichier manifeste est au format JAR standard, défini par la spécification Java 1.3. Le fichier de règle de sécurité Java 2 est utilisé pour autoriser un portlet à exécuter des opérations qui peuvent être restreintes si la sécurité Java 2 est activée. Le contenu du répertoire/META-INFn'est pas accessible aux clients.
was.policy depuis le répertoire appname.war/META-INF vers le répertoire appname.ear/META-INF généré lors du déploiement d'un fichier WAR de portlet. Mise en forme et déploiement de portlets
- Ressource de documentation : Ecriture des descriptions de portlet : Documentation du produit HCL Portal 8.0
- Source de documentation : Mise en forme du portlet dans un fichier WAR : Documentation du produit HCL Portal 8.0
- Regroupement d'un portlet et de ressources dans un fichier WAR
N'importe quel utilitaire de fichier JAR peut être utilisé pour créer un fichier WAR. Vous trouverez ci-dessous des exemples d'utilisation de l'utilitaire de fichier JAR fourni par WebSphere® Application Server.
- Pour créer un fichier WAR nommé
HelloWorld.waret inclure tous les fichiers dans les répertoires/WEB-INFet/images, procédez de la façon suivante :jar -cf HelloWorld.war images WEB-INF - Pour mettre à jour le fichier WAR
HelloWorld.waravec un descripteur de portlet révisé :jar -uf HelloWorld.war WEB-INF/portlet.xml - Pour extraire le descripteur de portlet du fichier WAR,
HelloWorld.war:jar -xf HelloWorld.war WEB-INF/portlet.xml - Pour extraire tous les fichiers d'un fichier WAR existant,
HelloWorld.war:jar -xf HelloWorld.war
Une fois le fichier WAR créé, vous pouvez l'installer dans HCL DX, comme décrit dans Portlets d'administration de portail
- Pour créer un fichier WAR nommé
- Préparation de l'application de portlet pour l'installation
Pour faciliter le déploiement des applications de portlets et des portlets complexes, vous pouvez fournir un fichier de configuration de portlet pouvant être appelé par l'interface de configuration XML (XMLAccess). L'interface de configuration XML permet au développeur de portlet de spécifier les emplacements, pages, thèmes, habillages, balises et clients pris en charge, ainsi que d'autres paramètres pour une application de portlet. C'est particulièrement utile pour les portlets qui utilisent la messagerie car ces portlets doivent être placés sur la même page. Pour plus de détails, voir Interface de configuration XML.
Lors de la construction de scripts XMLAccess destinés à l'installation de portlets standard, utilisez les valeurs suivantes :- Attribut uid pour l'élément
<web-app>:Utilisez l'attribut uid du sous-élément <portlet-app/> avec un suffixe
.webmod. Comme décrit ultérieurement dans cette rubrique, l'attribut uid du sous-élément <portlet-app/> dépend de la présence de l'attribut id de l'élément <portlet-app/> du fichier portlet.xml. - attribut uid pour l'élément <portlet-app> :
Utilisez l'attribut id de l'élément <portlet-app/> du fichier portlet.xml. Si cette valeur n'a pas été spécifiée, indiquez le nom du fichier WAR de l'application de portlet à sa place. Pour les mises à jour de portlet, le nom du fichier WAR doit être le nom original du fichier WAR utilisé pour installer l'application de portlet. Cela revient à dire que le fichier WAR peut être renommé, mais que l'uid doit indiquer l'uid original utilisé durant l'installation du portlet.
- Attribut name pour l'élément <portlet> :
Utilisez le contenu de l'élément <portlet-name/> à partir de portlet.xml.
- attribut referenceid de l'élément <servlet> :
Utilisez le contenu de l'élément <portlet-name/> depuis le fichier portlet.xml complété par le suffixe
.servlet.
Par exemple, une application de portlet peut utiliser un descripteur de portlet :Figure 4. Exemple d'élément <portlet-app/> dans le descripteur de portlet <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"> <portlet> <portlet-name>Banner Ad</portlet-name> ...Dans cet exemple, aucun attribut ID n'est fourni sur l'élément <portlet-app/>. Par conséquent, l'élément <portlet-app/> du script XMLAccess doit utiliser le nom du fichier WAR :
Figure 5. Exemple d'élément <web-app/> dans XMLAccess <web-app action="update" active="true" uid="com.ibm.wps.banner"> <url>file:///$server_root$/bp/wp.bp.bannerad/installableApps/bannerad.war</url> <servlet action="update" active="true" referenceid="Banner Ad.servlet"/> <portlet-app action="update" active="true" uid="com.ibm.wps.banner"> <portlet action="update" active="true" name="Banner Ad"> </portlet-app> </web-app>- Attribut uid pour l'élément