exo platformexo.sourceforge.net/bejug.pdf · exo platform benjamin mestrallet software architect...
TRANSCRIPT
![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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022043011/5fa417926d8b4301c847581c/html5/thumbnails/27.jpg)
BeJug Workshop 2004