Portlet fejlesztés
Egy portlet fejlesztése (jelenleg) nagyjából az alábbi fájlokat érintve történik (mintaképp a News portlet):
JavaForum2.0-web: hu.javaforum.portlets.NewsPortlet.java hu.javaforum.portlets.NewsPortlet.properties web.xml designs/javaforum/threeColumn/center/news/edit.jsp designs/javaforum/threeColumn/center/news/help.jsp designs/javaforum/threeColumn/center/news/view.jsp designless/news/rss.jsp JavaForum2.0-interfaces: hu.javaforum.entities.portlets.News.java hu.javaforum.entities.portlets.NewsComment.java hu.javaforum.entities.portlets.NewsLabel.java hu.javaforum.services.portlets.NewsPortletServiceLocal.java JavaForum2.0-ejb: hu.javaforum.services.portlets.NewsPortletServiceBean.java
Nos, egy portlethez - ha kell külön adatbázis, akkor azt entitás osztály formájában az interfaces projektben hozzuk létre, a portlet nevével kb. azonosan. Ha több tábla is van, akkor a táblák a portlet nevével kezdődnek, a közöttük való kapcsolatot az entitás osztályok írják le.
Az EJB háttér az entitás osztályokat használja adatok tárolására és transfer object-ként is. Nagyjából talál látni a fejlesztési konvenciókat az EJB projektben, van PerfLogger, amivel láthatóvá tehetjük egy-egy modul futási idejét, és direkt SQL nincs, hanem helyette JPQL, ami majdnem SQL, de objektumokat kell benne kezelni. Könnyen megtanulható, aztán majd furcsa lesz az SQL...
Az web projekt csak az interfaces projektet látja, és ha kell egy EJB funkcionalitás, akkor kér egyet (NewsPortlet.java). A portletek olyanok, mint a szervletek: egy példány van belőlük a portlet konténerben, és szálbiztosan kell futniuk, vagyis metódus szinten csak lokális változókat használhatnak közvetlenül. Kerüljük a synchronized használatát, felesleges.
A fejlesztés MVC szerint történik, a Model az EJB háttér, a Control a portlet forrása, a View pedig a JSP. JSP-be nem teszünk forráskódot. Az eseményeket a portlet doView/doHelp/doEdit/processAction metódusai kezelik, amelyek minden szükséges információt megkapnak a portlet konténertől. Minden portlet csak a saját kis világával törődik, a többi portlettel nem.
A portlethet tartozik egy nyelvi fájl, amely a többnyelvűséget hordozza, ez jelenleg bedrótozott a JSP-be, de alapvetően majd injektálni kell XML konfig alapján.
A web.xml végén van egy bypass rész, ahol a Local interfészt delegáljuk a JNDI fába a java:comp/env/ alá.
Nos, szerintem a portlet fejlesztés komplex feladat, van egy csomó lehetőség portlet fejlesztésre. Például Blog portlet, Wiki portlet, EventCalendar portlet, stb. portlet.
A portál motor nem teljesen JSR-168 kompatibilis még, ezért lehetnek eltérések, valódi JSR-168 kompatibilis portletet nem biztos, hogy meg tud hajtani.
Admin portál hiányában a portletet bele kell venni az adatbázis portlet táblájába, majd egy portlet_instance táblába (news portlet alapján), illetve a pis2ppgs táblába bele kell venni, hogy az X portlet példány (portlet_instance) melyik oldal melyik portlet csoportjába
(page_portlet_group) kerüljön. Ezt majd megoldja az admin portál a későbbiekben, egyelőre kézzel kell heggeszteni...