Java Portlet
(JSR 168)
i benefici di sviluppare portlet standard
Simone Federici
K-Tech
www.javaportal.it
1
Roadmap
1.Cosa sono le portlet
2.Architettura
3.Usare le portlet
4.Approfondimenti
5.Conclusioni
2
Il talk si rivolge agli
sviluppatori e
analisti J2EE
Perché usare le
Java portlet ?
3
1
Cosa sono le portlet?
?
4
Java Portlet = [
1
]
X
E' un Java Web Component !
E il suo ciclo di vita è gestito da un
portal container.
Ma cosa è un Portal Container?
5
1
Portals JSR Complaint
Pluto
Sun Java System
Jetspeed2
Plumtree
LifeRay
BEA
eXo
Oracle 9i
gridsphere
WebSphere
uPortal
MS SharePoint
Broadvision
6
1
Standard JSR 168
●
Portlet API
●
Portlet Requests
●
Preferences
●
User information
●
Security
●
Deployment packaging
●
Portlet Container
●
Extension of servlet container
●
Contract between component and container
7
2
Architecture
Web Browser
Portal Server
Web Browser
Web Browser
Portlet Container
DATA
8
2
Result Page
• Portal Server
• Portlet
Portal Server
• Fragment
F1
• Portlet
Container
F2
F3
Portlet Container
P1
P2
P3
9
Compiti del Portal server
•Aggregation
•Layout management
•Page personalization and configuration engines
•Portal administration and configuration
10
2
2
Portal and Portlet
Interaction
User
A
B
C
Portlet
container
Portal
Action on B
Do action on B
Render A
These requests
may be done in
parallel
B
Portlets
B
C
processAction
render
Render B
render
Render C
A’
A
render
C
Scope of the Portlet specification
11
2
Java Portlet
State:
•Normal
•Massimizza
•Minimizza
Modes:
•VIEW
•EDIT
•HELP
12
2
States
Normal, minimizzata e massimizzata.
Il portal server ha il compito di gestire la
renderizazione delle portlet nei deversi stati.
Il compito del container è gestire il
cambiamento dello stato delle portlet.
13
2
Modes
VIEW, EDIT e HELP
Il Portal Server puo' aggiungere altri
stati. (deve implementarli)
E' poi possibile accedere a questi
aggiungendo un
<custom-portlet-mode>
nel file descriptor.
14
2
Perche le portlet?
non posso fare tutto
tramite servlet?
in comune:
• J2EE Web Component
• Gestita dal container
• Generate da un paradigma request/response
15
2
Differenze
Portlet & Servlet
•
Mentre la servlet genera una pagina la portlet genera un fragment
•
Le portlet non mappate da una specifica url
•
Le P. hanno un sofisticato schema di request action / render
•
Le P. hanno stati e “modes” standard che definiscono le regole di azione e
visualizzazione
•
Le P. usano dei meccanismi di accesso e persistenza alle informazioni di
configurazione
•
Le P. possono fare portlet rewriting cosi da essere indipendenti
dall'implementazone del portale
•
Le P. hanno due differenti session scope: application e private.
•
Le P. non possono alterare l'HTTP header o setatre la response encoding.
16
2
Portability
La “stessa” portlet puo' essere usata
in contesti estremamente diversi
basta attivarla (deploy) in un portal
Compliant alle spefifiche JSR168
17
Portal/Portlet
Architecture
Portal server
Security
Remote
Execution
module
Aggregation
Engine
User
Configuration/
Personalization
Engine
2
Windo
w
Config
Portlet
Portlet
Dispatcher
Portlet
Portlet
Persistent
Data Store
Enterpris
e
Informati
on
Systems
18
3
Portlet Life Cycle
I medodi chiamati dal container sono:
• init()
• destroy()
• processAction()
• render()
+ cheamati dal render di GenericPortlet:
• doView()
• doEdit()
• doHelp()
19
Portlet Life Cycle
Initialized
by
container
render()
render() notifies the
Portlet to generate the
markup fragment
Handle
requests
3
init()
Notifies initialization of
portlet by container.
processActio
processAction() notifies
n()
the Portlet about user's
request for action.
Destroye
d by
container
destroy(
destroy()
notifies the
)
destruction of portlet by
container. Should free
up resources in this
method.
20
3
Init / destroy
void init(PortletConfig config) {
config.getInitParameter(java.lang.String name);
config.getInitParameterNames();
config.getPortletContext();
config.getPortletName();
config.getResourceBundle(java.util.Locale locale);
this.config = config;
}
void destroy () { config=null; }
21
3
processAction()
Viene chiamato dal container quando
una “azione” viene effettuata nella
portlet.
PortletURL()
createActionURL()
22
3
render()
Viene chiamato ogni volta che una
portlet deve essere visualizzata
su una pagina
PortletURL()
createActionURL()
23
3
GenericPortlet
E' una implementazione
javax.portlet.Portlet
sostanzialmente aggiunge un dispacher() che chiama i
seguenti metodi a secondo dello stato della portlet.
•doView()
•doEdit()
•doHelp()
24
3
Portlet Example
pub lic c las s Hel loW or ldP or tl et ex ten ds Gen eri cP ort le t {
publ ic vo id do Vi ew ( R en der Re que st re que st , Re nd er Res po nse re sp ons e) th ro ws Po rt let Exc ep tio n {
re sp ons e. set Co nte ntT yp e( “te xt /ht ml ”);
Pr in tWr it er wr ite r = r es pon se .ge tW rit er ();
Wr it er. wr ite (" Hel lo Wo rl d") ;
}
}
25
3
Render by JSP?
public class HTMLPortlet extends GenericPortlet
{
public void doView(RenderRequest request, RenderResponse response) throws ...
{
PortletPreferences pref = request.getPreferences();
String path = pref.getValue("path", "/hello_jip.jsp");
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(path);
rd.include(request, response);
}
}
26
3
CustomTag
<%@taglib uri='http://java.sun.com/portlet'
prefix="portlet" %>
<portlet:defineObjects/>
<!-- RenderRequest renderRequest -->
<!-- RenderResponse renderResponse -->
<% PortletSession renderSession =
renderRequest.getPortletSession(); %>
27
4
Multithread
Il container può chiamare i render delle
varie portlet da visualizzare in modo
concorrenziale.
Ricordiamo che le azioni sono gestite nel
processAction()
Il render va usato solamente per
renderizzare
28
4
Se il contenuto di una
portlet dipende da
un'altra?
Ci sono strutture dati condivise dalle
portlet / servlet
Non usate mai variabili di classe !!
29
4
Portal and Portlet
Interaction
User
A
B
C
Portlet
container
Portal
Action on B
Do action on B
Render A
These requests
may be done in
parallel
B
Portlets
B
C
processAction
render
Render B
render
Render C
A’
A
render
C
Scope of the Portlet specification
30
Comunicazione attraverso
PortletSession
APPLICATION_SCOPE
ossia nell'HttpSession
PORTLET_SCOPE
scope privato (*)
31
4
Portlet Web
Application

All resources, portlets, deployment descriptors are
packaged in one web application archive (WAR file)

PortletApp\
 jsp
 htmls
 WEB-INF\
 web.xml
 portlet.xml
 sun-portlet.xml
 classes\
 Lib\
4
32
Localization
4
• Portlets can be localized by using
resource bundles
• Resource bundles are specified in
deployment descriptor
• Portlet can access resource bundle
via
PortletContext.getResourceBundle()
API
33
4
Portlet.xml
<p ort le t­a pp > <por tle t>
<po rtl et ­n ame >H ell oWo rl dPo rt let </ por tl et ­
na me>
<po rtl et ­c las s>
Cu sto m. He llo Wo rld Por tl et
</p ort le t­ cla ss >
<ex pir at io n­c ac he> 0</ ex pir at ion ­c ach e>
<su ppo rt s>
<mi me ­t ype >t ext /ht ml </m im e­t yp e>
<por tl et ­mo de >VI EW< /p ort le t­m od e>
</ su ppo rt s>
<p or tle t­ pr efe ren ce >
<pr ef er enc e>
<n am e>l oc ale < /na me>
<v al ue> US A</ va lue >
</p re fe ren ce >
</ po rtl et ­p ref ere nc e>
</ po rtl et >
</po rt let ­a pp >
34
4
Apache Bridge Struts
http://portals.apache.org/bridges/multiproject/portals-bridges-struts/
Sviluppate una Applicazione Struts!!
l'applicazione potra poi essere usata come una webapp standard
oppure messa dentro un portal come una portlet.
Richiede che il container implementi una ulteriore interfaccia...
35
Grazie alla Community di Javaportal
che sempre cresce sempre più
Grazie a tutti voi di essere qui
Restate con noi.. perchè
Programmiamo da far Paura!
36
Framework
Si sposano bene con altri
framework?
37
Resources
• Javapassion
http://www.javapassion.com
• Java Community Process
http://www.jcp.org/en/jsr/detail?id=168
38