Création de votre propre service de portlet
Ecrivez un service de portlet en définissant l'interface, en écrivant l'implémentation de service, en rendant le service accessible, puis en enregistrant ce dernier.
L'écriture d'un service de portlet comporte quatre étapes:
Les interfaces des fournisseurs de services peuvent être utilisées dans le cadre de l'écriture de services de portlet pour les portlets standard. L'API de portlet HCL n'est plus prise en charge à partir d'HCL Portal version 8.5.0. Vous devez convertir les portlets basés sur l'API de portlet HCL vers l'API de portlet standard. Cette rubrique décrit comment convertir des portlets créés avec l'API de portlet HCL en portlets compatibles avec l'API standard.
Définition de l'interface
PortletService définie dans le package com.ibm.portal.portlet.service. L'exemple suivant illustre une interface pour HelloWorldService :
package sample.portletservice;
import java.io.IOException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import com.ibm.portal.portlet.service.PortletService;
public interface HelloService extends PortletService
{
/** print a nice greeting */
public void sayHello(RenderRequest request, RenderResponse response)
throws IOException;
}
Ecriture de l'implémentation du service
PortletServiceConfig de la méthode init() vous permet, par exemple, d'accéder à la configuration du service (pour plus d'informations, voir Enregistrement du service).
package sample.portletservice;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.prefs.Preferences;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import com.ibm.portal.portlet.service.spi.PortletServiceProvider;
public class HelloServiceImpl
implements HelloService, PortletServiceProvider {
private String message;
// called by the portal when the service is initialized
public void init(Preferences servicePreferences) {
// read the message from the configuration, default is "Hello"
message = servicePreferences.get("message", "Hello");
}
public void sayHello(RenderRequest request, RenderResponse response)
throws IOException {
String user = request.getRemoteUser();
if (user == null)
// no user logged in
user = "Stranger";
PrintWriter out = response.getWriter();
out.print(message);
out.print(", ");
out.print(user);
}
}
Adaptation du service pour le rendre accessible aux portlets HCL Digital Experience
package sample.portletservice;
import java.io.IOException;
import org.apache.jetspeed.portlet.PortletRequest;
import org.apache.jetspeed.portlet.PortletResponse;
import org.apache.jetspeed.portlet.service.PortletService;
public interface HelloServiceIBM extends PortletService {
/** print a nice greeting */
public void sayHello(PortletRequest request, PortletResponse response) throws IOException;
}
Vous pouvez disposer d'une seule implémentation enregistrée pour les deux interfaces et servant à les implémenter toutes les deux. Si les méthodes de service utilisent des arguments qui sont des classes ou des interfaces de l'API de portlet, les signatures de méthodes sont différentes pour les deux interfaces de services. Vous pouvez toujours utiliser une implémentation commune pour les deux interfaces à l'aide de la classe APIConverterFactory du module com.ibm.portal.portlet.apiconvert. Cette classe comprend des méthodes qui encapsulent des objets de l'API de portlet HCL, tels que PortletRequest et PortletSession, et mettent en œuvre les objets de l'API de portlet standard correspondants côté serveur, de sorte que vous puissiez réutiliser votre implémentation de service pour les portlets standard.
package sample.portletservice;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.prefs.Preferences;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.apache.jetspeed.portlet.PortletRequest;
import org.apache.jetspeed.portlet.PortletResponse;
import com.ibm.portal.portlet.apiconvert.APIConverterFactory;
import com.ibm.portal.portlet.service.spi.PortletServiceProvider;
public class HelloServiceImpl2
implements HelloService, HelloServiceIBM, PortletServiceProvider {
private String message;
// called by the portal when the service is initialized
public void init(Preferences servicePreferences) {
// read the message from the configuration, default is "Hello"
message = servicePreferences.get("message", "Hello");
}
public void sayHello(RenderRequest request, RenderResponse response)
throws IOException {
String user = request.getRemoteUser();
if (user == null)
// no user logged in
user = "Stranger";
PrintWriter out = response.getWriter();
out.print(message);
out.print(", ");
out.print(user);
}
public void sayHello(PortletRequest request, PortletResponse response)
throws IOException {
sayHello (APIConverterFactory.getInstance().getRenderRequest(request),
APIConverterFactory.getInstance().getRenderResponse(response));
}
}
Enregistrement du service
- Placez toutes les classes d'implémentation et d'interface de service dans un fichier JAR.
- Placez le fichier JAR dans le répertoire
wp_profile_root/PortalServer/config. - Enregistrez le nouveau service de portlet auprès du fournisseur d'environnement de ressources WP PortletServiceRegistryService dans la console WebSphere® Integrated Solutions Console.
- Créez une entrée pour enregistrer l'implémentation dans le répertoire JNDI. Le nom de cette entrée est jndi.service_interface et sa valeur est service_implementation. Le nom de l'interface de service entièrement qualifié peut alors être utilisé pour consulter le service.
- Facultatif : fournissez des paramètres de configuration pour l'implémentation. Le nom de cette entrée est service_implementation.parameter et sa valeur est la valeur de paramètre requise.
- Redémarrez HCL pour activer les nouveaux paramètres.
HelloService est le nom du service de portlet, HelloServiceIBM est le nom de l'interface pour les portlets HCL, et le paramètre de configuration message est défini avec la valeur Greetings. jndi: ne sont pas pris en charge pour les fournisseurs d'environnement de ressource. Utilisez plutôt jndi..| Nom de la propriété | Valeur |
|---|---|
jndi.sample.portletservice.HelloService |
sample.portletservice.HelloServiceImpl2 |
sample.portletservice.HelloServiceIBM |
sample.portletservice.HelloServiceImpl2 |
sample.portletservice.HelloServiceImpl2.message |
Greetings |
dumpNamespace -port bootstrap_port -root server -startAt portletservice
A l'aide de la console WebSphere® Integrated Solutions Console, vous pouvez trouver le port bootstrap de votre serveur de portail dans la section "End Points" des paramètres pour le serveur "WebSphere_Portal".