27
eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004

eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

eXo platform

Benjamin MestralletSoftware ArchitecteXo platform SARL

Portlet API in Action

BeJug Workshop 2004

Page 2: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Overall Presentation Goal

Let's implement and deploy your first HelloWorld portlet in a JSR 168 certified portlet container

Page 3: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Speaker’s Qualifications

● Benjamin Mestrallet is a software architect● He co-leads the eXo platform project● He created the eXo platform SARL which is a

service company that focuses on training and support for the eXo platform

● We published two articles about the eXo platform on TheServerSide.com

Page 4: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Ease of use

• We make your life easier• Code faster• Deploy faster• Go home earlier

Page 5: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Presentation Agenda

● Part I : the Hello World portlet• The code• The eclipse plugin

● Part II : a portlet framework?

● Part III : Architecture of the eXo platform• Integrated application suite• IoC / dependancy injection• The services stack• The standards

Page 6: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

MVC design

● Controller : Portlet● Model : JavaBeans● View JSP

Page 7: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Redirection

● Redirection to the JSP : PortletRequestDispatcher

private static final String HELLO_TEMPLATE = "/WEB-INF/templates/html/HelloWorld.jsp"; public void doView(RenderRequest pRequest, RenderResponse pResponse) throws PortletException, IOException { pResponse.setContentType("text/html"); PortletContext context = getPortletContext(); PortletRequestDispatcher rd = context. getRequestDispatcher(HELLO_TEMPLATE); rd.include(pRequest, pResponse); }

Page 8: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

The JSP

<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %><portlet:defineObjects/><center> <img src='/HelloWorld/images/hello-world.png'/></center><center>HelloWorld Portlet in <b><%= renderRequest.getPortletMode().toString()%></b> Mode</center><center>The current window state is <b><%= renderRequest.getWindowState().toString()%> </b></center>

Page 9: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

The portlet.xml <portlet> [...] <portlet-name> HelloWorld </portlet-name> [...] <portlet-class> HelloWorldPortlet </portlet-class> [...] <supports> <mime-type>text/html</mime-type> <portlet-mode> edit </portlet-mode> <portlet-mode> help </portlet-mode> </supports> [...] </portlet>

Page 10: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

2 phase requests

Specs 1.0

Page 11: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

PortletURL

● 2 types : ActionURL and RenderURL

PortletURL actionURL = pResponse.createActionURL(); actionURL.setWindowState(WindowState.MAXIMIZED); actionURL.setParameter("param", "ActionURL"); PortletURL renderURL = pResponse.createRenderURL(); renderURL.setPortletMode(PortletMode.HELP); renderURL.setParameter("param", "RenderURL"); [...] writer.write(actionURL.toString()); writer.write(renderURL.toString());

Page 12: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Portlet Preferences

● Persit the user preferences

<portlet-preferences> <preference> <name>pref</name> <value>defaultPref</value> <read-only>false</read-only> </preference></portlet-preferences>

PortletPreferences portletPreferences = actionRequest.getPreferences();portletPreferences.setValue("pref", "modifiedPref");portletPreferences.store();

Page 13: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Part II

Framework bridges

Page 14: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Bridges concepts

Portal

Portlet bridge

Framework servlet

Page 15: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

JSF Bridge

● JSF : 6 phases● Portlet API : 2 phases

render() method

processAction() method

Page 16: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Redirect to the first jsp

<init-param> <name>default-view</name> <value>exo.component.UIUserProfile.class</value> </init-param> or<init-param> <name>default-view</name> <value>/jsf/profile.jsp</value> </init-param>

Page 17: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Part III

eXo platform architecture

Page 18: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Integrated Application Suite

● Integrated services but loosely coupled● Several layers

– Low level: Log, base de données, cache...– Midle level:

- Portlet container - Workflow- JCR

– Higher level: e-commerce, publishing

● 2 types of clients :• Portal channel• WSRP consumers

● Skeleton for higher level applications like CRM, ERP modules builds

Page 19: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

IoC / Dependancy injection

● Hollywood principle : “don't call me, I will call you”● Clear distinction between the service/component

API and their implementation● Use of lightweight containers : Pico container

● Depandancy injection (Martin Fowler)

Page 20: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

IoC 2

● How to inject the correct implementation into the objects :• Constructor injection public ServiceA(ServiceB serviceB) {...}• Setter injection public void setServiceB(ServiceB serviceB) {...}• Service locator pattern ServicesManager.getInstance().getService(ServiceB.class)

● Side effects :• Unit tests (maintainability, refactor)• Components : POJOs ( != EJBs )

Page 21: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

The services

● LogService● CacheService● ThreadPoolService● DatabaseService/HibernateService● OrganizationService● WorkflowService● JCRService (JSR 170)● PublishingService● PortletContainerService (JSR 168)● WSRPService● ChartService● OfficeService● EcommerceService● CommunicationService● ...

Page 22: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

The standards

● Portlet API • JSR 168 (JCP), certification, december 2003

● Web Service for Remote Portals (WSRP)• OASIS, interoperability discussions

● Java Content Repository• JSR 170, public draft in “february”

● JSR 207: Process Definition for Java

Page 23: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Portlet container architecture

Page 24: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

WSRP

Page 25: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

If You Only Remember One Thing…

Next big step : makes J2EE easier

Page 26: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

Q&A

Page 27: eXo platformexo.sourceforge.net/BeJUG.pdf · eXo platform Benjamin Mestrallet Software Architect eXo platform SARL Portlet API in Action BeJug Workshop 2004. Overall Presentation

BeJug Workshop 2004