Developing Portlets

Post on 03-Mar-2017

25 views 0 download

transcript

Developing Portlets With the Spring MVC Framework

Presented by: Michael SlavenTeachers College, Columbia University

March 21st, 2011Session ID 4271

Session Rules of Etiquette

• Please turn off your cell phone/pager

• If you must leave the session early, be sure not to knock over anyone’s coffee.

• If you must yawn or snore, please do so as discreetly as possible.

Session ID 4271 2

Agenda

• Some examples of portlets built using the Spring MVC framework

• Why develop portlets?• Why use Spring MVC?

• An overview of portlets and the JSR portlet specs— request phases —portlet modes —window states —URL handling

• An overview of Spring MVC—model, view, controller

Session ID 4271 3

Agenda - continued

• Putting it all together

—Setting up a dev environment and directory structure

—Configuring Spring and annotations

—Creating the ViewController

—Creating the DirectoryService

—Create the JSP views “search” and “searchresults”

—Deployment

Session ID 4271 4

About Teachers College

• The oldest and largest graduate

school of education in the U.S.

• Affiliated with Columbia

University

• Located in the northern end of

Manhattan

• ~5400 students

• ~1000 staff

• 165 full time faculty

Session ID 4271 5

Some examples of portlets built using the Spring MVC framework

The myTC Message Center

Our most recent (and biggest) Spring MVC portlet

Session ID 4271 7

Session ID 4271 8

Session ID 4271 9

Features of the myTC Message Center

• Uses Spring 2.5

• Hibernate for data persistence

• Sends emails instantly and generates daily digest emails for each user

• Emails use Apache Velocity templating engine

Session ID 4271 10

The myTC Photo Directory

Our first (and smallest) Spring MVC portlet

“More Options” allows search bytitle, office, phone, email, role(staff, student or faculty)

Session ID 4271 11

Session ID 4271 12

Why portlets?Why Spring MVC?

rvenable
I don't think you need the session id on this title slide.

Why develop portlets?

• Make your code portable across portal products.— The JSR-168 portlet API is supported by all major

portal products

• Easily re-use code by having multiple instances.

• If you want to do custom development in Luminis 5, you have to.

(Lum 5 doesn’t support channels)

Session ID 4271 13

Why use the Spring MVC framework?

• It separates presentation from business logic.

• It uses dependency injection for simplification and to increase testability.

• It lets you focus on functionality instead of infrastructure.

• Spring's view resolution is very flexible.—Out of the box, Spring enables you to use JSPs, Velocity

templates and XSLT views, among others.

Session ID 4271 14

An overview of the JSR portlet specs

JSR 168 and JSR 286 Portlet Specs

• JSR 168 aka Portlet 1.0 specification

— released Oct 2003

— supported by Luminis 4.2 and Lum 5

• JSR 286 aka Portlet 2.0 specification

— released Jun 2008

—supported by Luminis 5

Session ID 4271 16

Request Phases

• Action requests—can be used to change system state—executed only once—produces no markup

• Render requests—Cannot change system state—executed at least once—produces markup

• Event requests (Portlet 2.0 only)• Resource requests (Portlet 2.0 only)

Session ID 4271 17

Request Handling Sequence (from JSR 286 spec)

Session ID 4271 18

Portlet Modes

• Modes specify the current function of the portlet. • There are three standard portlet modes:

—VIEW: normal mode—EDIT: edit mode, for portlet specific preferences—HELP: help mode, for portlet specific help

• All 3 are not necessary. Some portlets have only a VIEW mode.

• Portlets can have other custom-defined modes as well.

• These can be changed by the user, usually with an icon in the portlet’s toolbar, or they can be changed programmatically.

Session ID 4271 19

Window States

• Window States specify the size or amount of detail.

• There are three standard windows states:—NORMAL: normal window state —MAXIMIZED: largest window, usually fills the portal

window—MINIMIZED: smallest window, usually only a toolbar

remains

• These can be changed by the user, usually with an icon in the portlet’s toolbar, or they can be changed programmatically.

Session ID 4271 20

URL Handling

• There is no portlet URL you can link to, since the portal controls the actual URL.

• Use the API for generating URLs and setting URL parameters (PortletURL Objects).

• Use a combination of Portlet Mode, Window State, and Request Parameters for navigation.

Session ID 4271 21

An overview of the Spring MVC framework

What is Spring MVC?• Spring is a flexible and lightweight application

framework that utilizes dependency injection.• MVC is a common design pattern that isolates the

data (model) and domain logic (controller) from the user interface (view).

Session ID 4271 23

Model – The M in MVC

• The model encapsulates the data and application state.

• It responds to requests for information about its state (usually coming from the view).

• It responds to instructions to change state (usually coming from the controller).

Session ID 4271 24

Views – The V in MVC

• The view displays the user interface and renders the model for display.

• It also sends user actions to the controller.

• JSP & JSTL are the most common view technologies, but XSLT, Velocity, PDF Docs, etc. are all supported.

• In portlets you generally only use view technology that produces HTML markup.

• Multiple views can exist for a single model for different purposes.

Session ID 4271 25

Controllers – The C in MVC

• A controller processes user input from a view and initiates a response by making changes to the model.

• It selects the view to use for the response.

• It often delegates to the service layer for the business logic.

• There are often multiple controllers.

Session ID 4271 26

Putting it all together

Photo Directory “Lite”

• Our example is a person search that returns a thumbnail image of a person as well as their contact info and office hours (if applicable).

• Has 2 views:—SEARCH: a form to enter first name, last name, etc—SEARCHRESULTS: the results, paginated 5 at a time

• Has a single domain object:—DirectoryEntry: setters and getters for a single entry in the

photo directory

• Has a single controller

• Has a single DB service object

Session ID 4271 28

Notes on setting up a dev environment

• Install the JDK and set JAVA_HOME—JRE is not enough

• Install an IDE—Eclipse—NetBeans—Use Maven to simplify dependencies, building, and

deploying

• Install a portal / portlet container—uPortal 2.5.6 is best if developing for Lum 4—Liferay 5.2.x is best if developing for Lum 5—Or you can use Pluto from Apache

Session ID 4271 29

Set up the directory structure

• /WEB-INF -- all protected resources

• Individual class files should be stored in a directory structure within /WEB-INF/classes that reflects the class package.

• /WEB-INF/jsp – jsp views

• /WEB-INF/lib – referenced JAR files

Session ID 4271 30

Include the Spring libraries

Session ID 4271 31

• Use Maven to handle your dependencies. • This is done using the “Project Object Model” pom.xml file at

the root of your project.• Maven then downloads all necessary libraries and places them

in WEB-INF/lib.

Configure portlet.xml

• The Spring DispatcherPortlet dispatches requests to your controllers.

• This will be the same for any Spring portlet.

Session ID 4271 32

Configure web.xml

• Spring portlets are an extension of spring servlets.• DispatcherPortlet uses ViewRendererServlet to

dispatch view rendering into a servlet context.• Also, load the parent ApplicationContext using

ContextLoaderListener.

Session ID 4271 33

Configure PhotoDirectory-portlet.xml -- Annotations --

• Setup DefaultAnnotationHandlerMapping.

• Tell Spring where to scan for annotations like @Controller, @RequestMapping, @Autowired etc.

Session ID 4271 34

Configure PhotoDirectory-portlet.xml -- View Resolver --

• Using JstlView we don’t have to build views ourselves.• Refer to a view by name, and the jsp file of that name

becomes the view.• The prefix and suffix are added, so that the view “search”

becomes /WEB-INF/jsp/search.jsp

Session ID 4271 35

Controller & Handler Mapping

• With Spring 2.5+ we can simplify by using annotations.

• Without annotations:—The controller needs to extend a base controller

like AbstractController. —Handler beans have to be defined in the application

context.

• With annotations:—Annotate the controller class with “@Controller”.—Annotate handlers with

“@RequestMapping([params])”.

Session ID 4271 36

ViewController

Session ID 4271 37

ViewController - Continued

Session ID 4271 38

DirectoryServiceImpl.java

Session ID 4271 39

DirectoryServiceImpl.java - Continued

Session ID 4271 4040

DirectoryServiceImpl.java - Continued

Session ID 4271 41

VIEW: search.jsp

Session ID 4271 42

VIEW: searchresults.jsp

Session ID 4271 43

Deploy!

• Use Maven or Ant to package your portlet into a deployable war file.

• On Lum 4—Run cptool deploy portlet /path/to/PhotoDirectory.war—A restart is required.

• On Lum 5 and Liferay—Simply copy the war file to your hot deploy directory, or

upload using the Admin GUI.

• On uPortal 2.5—Run ant deployPortletApp -DportletApp=

/path/to/PhotoDirectory.war

Session ID 4271 44

Summary

The portlet API is defined by the JSR portlet specs:—request phases —portlet modes —window states —URL handling

• Portlets can be built once, and deployed to any compliant portal with little or no modification.

• MVC is a design pattern that separates presentation from business logic

• Portlets built using the Spring MVC framework can be simple or complex. Using JSP views you could create a portlet that doesn’t require any java coding.

Session ID 4271 4545

Summary - Continued

• To deploy a Spring MVC portlet

— setup a dev environment

— setup the directory structure

— include the spring libraries

— configure the application context (portlet, web, and myPortlet-portlet.xml)

— use annotations to define controller and handler mappings

— create the controllers and domain objects

— create the service layer

— create the views (we used JSP views)

— deploy!

Session ID 4271 46

Questions & Answers

?

Session ID 4271 47

Session ID 4271 48

SunGard or its subsidiaries in the U.S. and other countries is the owner of numerous marks, including “SunGard,” the SunGard logo, “Banner,” “PowerCAMPUS,” “Advance,” “Luminis,” "DegreeWorks," "fsaATLAS," “Course Signals,” and “Open Digital Campus.” Other names and marks used in this material are owned by third parties.  © 2011 SunGard. All rights reserved.

Session Sponsor

Thank You!

Michael Slavenslaven@tc.edu

Please complete the online Session evaluation formSession ID 4271