IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Portails Java Discussion :

IPC pour portlets dans un servlet


Sujet :

Portails Java

  1. #1
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut IPC pour portlets dans un servlet
    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 :
    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)
    Si ça vous intéresse, voilà mes sources :
    portlet.jsp qui va contenir et afficher deux portlets de test :
    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 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
    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 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
    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");
    	}
    }
    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
    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 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
    <?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>
    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
    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>
    www.natoine.fr
    natoine.developpez.com
    Principalement du Java avec un soupçon de réseaux sociaux.

  2. #2
    Membre averti
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Points : 343
    Points
    343
    Par défaut
    Héhé j'ai trouvé.
    C'était très simple en fait.
    Il ne faut pas passer par une servlet qui appelle la jsp.
    Il faut passer direct par la jsp.

    Donc mon url de test c'est http://localhost:8080/PortletTestGla....0/portlet.jsp

    Plus qu'à trouver comment faire un rafraîchissement partiel dans ce contexte.
    www.natoine.fr
    natoine.developpez.com
    Principalement du Java avec un soupçon de réseaux sociaux.

Discussions similaires

  1. Erreur syntaxe requête SQLl pour insertion dans ma servlet
    Par kevin254kl dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 16/10/2014, 23h01
  2. [applet]utilser des infos pour les traiter dans une servlet
    Par jeromejanson dans le forum Applets
    Réponses: 5
    Dernier message: 07/03/2010, 23h22
  3. Récupération de données dans un fichier XML pour une utilisation dans une servlet
    Par Dredd619 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 24/04/2009, 08h41
  4. Problème pour lancer un Js dans ma Servlet
    Par Slyders dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/08/2008, 11h14
  5. Réponses: 1
    Dernier message: 25/07/2007, 09h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo