Portal, Express Beta Version 6.1
Operating systems: i5/OS, Linux,Windows |
Writing a portlet service consists of four steps:
The service provider interfaces can be used to write portlet services for IBM portlets as well as for Standard portlets. The IBM Portlet API is being deprecated for WebSphere Portal ExpressBeta but is still supported. No new functionality will be added and it is recommended that you use the Standard portlet API. For backward-compatibility, the service provider interfaces from the org.apache.jetspeed.portlet.service.spi packages are supported. For writing new portlets services, however, you should use only the service provider interfaces described in this text.
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; }
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.c; 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); } }
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; }
You can have a single implementation that is registered for both interfaces and implements both. If the service methods take arguments that are classes or interfaces from the portlet API, the method signatures are different for the two service interfaces. You can still use a common implementation for both interfaces by using the APIConverterFactory class of the com.ibm.portal.portlet.apiconvert package. This class includes methods that wrap objects from the IBM portlet API, such as the PortletRequest and PortletSession, and implement the corresponding standard portlet API objects on the service side, so that you can re-use your service implementation for standard portlets.
Figure 4. Using the APIConverterFactory classpackage 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)); } }
Property name | Value |
---|---|
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
Using the application server's administrative console, you can find the bootstrap port of your portal server in the "End Points" section of the settings for the server "WebSphere_Portal".