Voili voilou,
je teste d'utiliser un servlet pour mettre en page mes portlets. Je trouve l'idée plus souple que d'être dépendant d'un JBoss ou autre qui limite à deux ou trois colonnes et qui est trop figé aspect mise en page à mon goût.
Du coup la solution décrite ici : https://portlet-container.dev.java.n..._in_the_webapp
J'ai déployé le portlet-container dans Glassfish.
En gros avec ma jsp je peux dire ou je mets mes portlets et je fais absolument la mise en page que je veux. Je trouve ça super puissant.
Seul hic, je n'arrive pas encore à faire de l'ipc dans ce contexte.
Mon portlet d'envoi d'event crache une erreur et l'autre, celui qui écoute l'event ne se met donc pas à jour.
Est-ce que quelqu'un connait cette solution et peut m'en dire un peu plus ?
Pour l'instant voilà mon erreur :
Si ça vous intéresse, voilà mes sources :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 [#|2010-12-17T11:02:18.673+0100|SEVERE|glassfish3.0.1|com.sun.portal.portletcontainer.driver.taglib|_ThreadID=26;_ThreadName=Thread-1;|Exception thrown for PortletTestGlassfish-1.0.0.PortletSendEvent java.lang.NullPointerException at com.sun.portal.portletcontainer.impl.PortletContainer.getDeletedParameters(PortletContainer.java:880) at com.sun.portal.portletcontainer.impl.PortletContainer.executeAction(PortletContainer.java:332) at com.sun.portal.portletcontainer.invoker.WindowInvoker.processActionInternal(WindowInvoker.java:556) at com.sun.portal.portletcontainer.invoker.WindowInvoker.processAction(WindowInvoker.java:454) at com.sun.portal.portletcontainer.driver.PortletContent.executeAction(PortletContent.java:87) at com.sun.portal.portletcontainer.driver.taglib.PortletTag.executeProcessAction(PortletTag.java:260) at com.sun.portal.portletcontainer.driver.taglib.PortletTag.doStartTag(PortletTag.java:215) at org.apache.jsp.WEB_002dINF.jsp.portlet_jsp._jspx_meth_pcdriver_portlet_0(portlet_jsp.java from :105) at org.apache.jsp.WEB_002dINF.jsp.portlet_jsp._jspService(portlet_jsp.java from :71) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:406) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:483) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:373) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:822) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:639) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:569) at fr.natoine.PortletTestGlassfish.ServletIncludePortlet.doGet(ServletIncludePortlet.java:30) at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) at com.sun.grizzly.ContextTask.run(ContextTask.java:69) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) at java.lang.Thread.run(Thread.java:662)
portlet.jsp qui va contenir et afficher deux portlets de test :
Code de la servlet ServletIncludePortlet appelant la jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://portlet-container.dev.java.net" prefix="pcdriver"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <pcdriver:portlet portletName="PortletSendEvent" applicationName="PortletTestGlassfish-1.0.0" > <h2 class="portlet-title"><pcdriver:title/></h2> <pcdriver:render/> </pcdriver:portlet> <pcdriver:portlet portletName="PortletReceptEvent" applicationName="PortletTestGlassfish-1.0.0" > <h2 class="portlet-title"><pcdriver:title/></h2> <pcdriver:render/> </pcdriver:portlet> </body> </html>
Code du portlet envoyant l'event :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class ServletIncludePortlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public ServletIncludePortlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); RequestDispatcher _srd = this.getServletContext().getRequestDispatcher(response.encodeURL("/WEB-INF/jsp/portlet.jsp")); _srd.include(request, response); } }
Code du portlet censé recevoir l'event :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public class PortletSendEvent extends GenericPortlet { protected void doView(RenderRequest rRequest, RenderResponse rResponse) throws IOException, PortletException { rResponse.setContentType("text/html"); PortletRequestDispatcher prd; prd = getPortletContext().getRequestDispatcher(rResponse.encodeURL("/WEB-INF/jsp/sendevent.jsp")); prd.include(rRequest, rResponse); } public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException { System.out.println("processAction"); this.sendEvent(response); } public void sendEvent(ActionResponse response) { String _toto = "passée en event"; response.setEvent("totoString", _toto); System.out.println("envoi Event toto"); } }
Descripteur web.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 public class PortletReceptEvent extends GenericPortlet implements EventPortlet { protected void doView(RenderRequest rRequest, RenderResponse rResponse) throws IOException, PortletException { if(rRequest.getParameter("stringEvent")!=null)//Action avec Event { rResponse.setContentType("text/html"); PrintWriter writer = rResponse.getWriter(); writer.write("Event value of totoString : " + rRequest.getParameter("stringEvent")); writer.close(); } else //Action sans Event { rResponse.setContentType("text/html"); PrintWriter writer = rResponse.getWriter(); writer.write("Pas d'event pour l'instant !!!"); writer.close(); } } public void processEvent(EventRequest request, EventResponse response) { Event event = request.getEvent(); String _toto = "vide"; if (event.getName().equals("totoString")) { // traitement de l'event _toto = (String) event.getValue(); response.setRenderParameter("stringEvent", _toto); } } }
Descripteur portlet.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>MyPortlet test Maven</display-name> <servlet> <description> </description> <display-name>ServletIncludePortlet</display-name> <servlet-name>ServletIncludePortlet</servlet-name> <servlet-class>fr.natoine.PortletTestGlassfish.ServletIncludePortlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletIncludePortlet</servlet-name> <url-pattern>/ServletIncludePortlet</url-pattern> </servlet-mapping> <filter> <filter-name>portletDriverFilter</filter-name> <filter-class>com.sun.portal.portletcontainer.driver.PortletDriverFilter</filter-class> </filter> <filter-mapping> <filter-name>portletDriverFilter</filter-name> <url-pattern>/portlet.jsp</url-pattern> </filter-mapping> </web-app>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 <?xml version="1.0" encoding="UTF-8"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"> <portlet> <portlet-name>PortletSendEvent</portlet-name> <portlet-class>fr.natoine.PortletTestGlassfish.PortletSendEvent</portlet-class> <supports> <mime-type>text/html</mime-type> <portlet-mode>VIEW</portlet-mode> </supports> <portlet-info> <title>PortletSendEvent de test d'envoi d'event</title> </portlet-info> <supported-publishing-event> <qname>totoString</qname> </supported-publishing-event> </portlet> <portlet> <portlet-name>PortletReceptEvent</portlet-name> <portlet-class>fr.natoine.PortletTestGlassfish.PortletReceptEvent</portlet-class> <supports> <mime-type>text/html</mime-type> <portlet-mode>VIEW</portlet-mode> </supports> <portlet-info> <title>PortletReceptEvent de test de réception d'event</title> </portlet-info> <supported-processing-event> <qname>totoString</qname> </supported-processing-event> </portlet> <event-definition> <qname>totoString</qname> <value-type>java.lang.String</value-type> </event-definition> </portlet-app>
Partager