A Java Portlet Specification definiálja a portlet konténer és a portletek közötti szerződést és egy kényelmes programozási modellt nyújt a Java portlet fejlesztők számára.
A portletek webportálokba építhető UI-komponensek, melyek a portál konténerben futnak.
Egy webportál általában több portletet is tartalmaz, a leggyakrabban alkalmazottak a következők: e-mail kliens, időjárás-előrejelzés, hírek. Egy portlet a felépítéséből adódóan könnyen testre szabható, a felhasználó által átrendezhető, módosítható.A különböző gyártók által elkészített portletek száma rohamos növekedésnek indult, ami komoly nehézséget okozott a webportálok üzemeltetőinek és felhasználóinak egyaránt, hiszen a különböző gyártók különféle interfészeket alkalmaztak. E problémák megoldására született először a JSR (Java Specification Request) 168, a Portlet specifikáció, amely lehetővé teszi a különböző portletek együttműködését, összehangolását. Ezt több változat követte: a 2.0 és legújabban 3.0.
1.0-s verzió - JSR 168
A JSR 168 a portletet Java alapú komponensenként definiálja, amely egy megjelenítési réteget ad az információs rendszereknek.
A JSR 168 céljai a következők:
- futtató környezet definiálása azaz a portlet konténer
- a portlet és a portletkonténer közötti API definiálása
- tranziens és perzisztens adatok tárolása portletek számára
- szervletek és JSP beágyazásának lehetősége portletekbe
- portlet csomagok definiálása
- lehetőség bináris portletek hordozhatóságára, JSR 169 portletek esetén
A számítástechnikai iparág többnyire elfogadta a JSR 168-at. Többek között a következő vállalatok tagjai a JSR 168 csoportnak: Apache, ATG, Boeing, Fujitsu, IBM, Novell és Oracle.
2.0-s verzió - JSR 286
A portlet specifikáció újabb változata a 2.0-s (JSR-286), több képességgel is felruházza a portleteket. Ilyen például az IPC (inter-portlet-communication), ami a portletek közti kommunikációt teszi lehetővé üzenetekkel és nyilvános render paraméterekkel. Akár két külön portlet konténer között is lehetséges a kommunikáció. Dinamikusan generált erőforrások (serveResource), valamint dinamikusan generált Axaj és JSON adatok kiszolgálását is lehetővé teszi. Itt vezették be a portletfiltereket és a listenereket is.
3.0-s verzió - JSR 362
A portlet specifikáció harmadik változatának készítése 2013 elején kezdődött meg, és a következőket tartalmazza:.[1]
- A JEE 7 Specifikációhoz való igazítás
- Specifikálja, hogy az erőforrások oszthatók meg egymás között
- Javított támogatás mobil eszközökhöz
- Javított kliens-oldali támogatás
- Optimalizált támogatás a Java Server Faces-hez
- Web Socket támogatás hozzáadása
- Porteltek igazítása az OpenSocial sztenderdhez
- A portlet eseménykezelő képességeinek kiterjesztése
- A WSRP specifikáció jövőbeli verzióihoz való igazítás
- További kiterjesztések, javítások és pontosítások a JSR 286-hoz
A portlet életciklusa
Egy szabványos JSR 168 portlet életciklusa:
- inicializálás
- kérések kiszolgálása
- megszüntetés
Portlet interfész
Minden portletnek implementálnia kell a java.portlet.Portlet
interfészt, vagy öröklődnie kell egy ilyen osztályból. Egy portlet interfész a következő metódusokból áll:
- init(PortletConfig config): portlet inicializálása, csak egyszer hívódik meg
- processAction(ActionRequest request, ActionResponse response): egy felhasználói kérést továbbít a portlet felé
- render(RenderRequest request, RenderResponse response): egy adott kérés végrehajtása
- destroy(): portlet megszüntetése, erőforrásainak felszabadítása
Megjelenítési módok
A JSR 168 a következő 3 megjelenítési módot definiálja:
- VIEW: a portlet jelenlegi állapotának megfelelő megjelenés
- EDIT: a felhasználó módosíthatja a megjelenését
- HELP: javaslatot tesz a felhasználónak a portlet használatához
Azonban ezek kiterjeszthetőek.
Ablak állapotok
- NORMAL: a portlet más portletekkel osztozik az adott oldalon
- MINIMIZED: a portlet nem vagy csak kevés információt jelenít meg
- MAXIMIZED: a portlet az egyedüli megjelenített portlet az adott oldalon
Hello World portlet
import java.io.PrintWriter;
import java.io.IOException;
import javax.portlet.GenericPortlet;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.PortletException;
public class HelloWorldPortlet extends GenericPortlet {
/**
* A portlet a következő szöveget jeleníti meg: "Hello, World"
*/
public void render(RenderRequest request, RenderResponse response)
throws PortletException, IOException
{
PrintWriter out = response.getWriter();
out.println("Hello, World");
}
}
Hello World portlet leíró
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"+
"http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0">
<portlet>
<portlet-name>HelloWorldPortlet</portlet-name>
<portlet-class>org.jboss.portlet.hello.HelloWorldPortlet</portlet-class>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<portlet-info>
<title>HelloWorld Portlet</title>
</portlet-info>
</portlet>
</portlet-app>
Megvalósítások
Referencia implementáció:
- Apache Pluto a JSR168 referencia implementációja
Kereskedelmi implementációk a főbb java szállítóktól:
- Oracle Portal
- IBM Websphere Portal
- JBoss Portal
- Open TextCorporation portal implementáció
Nyílt forráskódú implementációk:
- Apache Jetspeed-2 Enterprise Portal
- eXo Platform
- GateIn Portal
- uPortal
- Liferay Portal
Jegyzetek
Források