[opencms-dev] Create a scheduled job from jsp

Michael Moossen m.moossen at alkacon.com
Tue Sep 6 13:09:38 CEST 2005


Hola, Luis!

  las personas que yo conozco que te pueden ayudar con tu problema no hablan
español. Obtendrás mayores respuestas si escribes en inglés.

un abrazo
-- 
Regards
Michael Moossen
Alkacon Software GmbH - The OpenCms Experts
http://www.alkacon.com



Quoting Luis Rodriguez Fernandez <luis.rodriguez at fundacionctic.org>:

> Buenos días. Soy Luis Rodríguez Fernández, de la Fundación CTIC. Estoy
> tratando de crear un boletín de news para openCms, para ello pretendo tener
> una tarea programada que envíe correos con las noticias (contenidos
> estructurados de OpenCMS).
> 
>  
> 
> Tengo una clase que implementa el interfaz I_CmsScheduledJob. En el método
> launch lo que trato de hacer es cargar una serie de páginas jsp que serán las
> encargadas de construir dichos correos. La manera de cargarlas sería usando
> el método export de la clase CmsJspLoader. Como dicho método necesitaba de la
> request y la response encapsulé la creación de la tarea en una jsp, el código
> de la jsp es el siguiente:
> 
>  
> 
> <%@page import="org.opencms.main.CmsContextInfo,
>                         org.opencms.scheduler.CmsScheduledJobInfo,
>                         org.opencms.scheduler.CmsScheduleManager,
>                         org.opencms.file.CmsObject,
>                         org.opencms.jsp.CmsJspBean,
>                         java.util.SortedMap,
>                         java.util.TreeMap"%>
> 
>  
> 
> <%
> 
> CmsScheduledJobInfo csji = new CmsScheduledJobInfo();
> CmsScheduleManager csm = new CmsScheduleManager();
> CmsJspBean cjb = new CmsJspBean();
> 
> cjb.init(pageContext,request,response);
>  
> CmsObject cmsObj = cjb.getCmsObject();
> CmsContextInfo cci = new CmsContextInfo(cjb.getRequestContext());
> 
> csji.setCronExpression("0 0/1 * * * ?");
>
csji.setClassName("org.fundacionctic.opencms.business.services.NewsLetterCmsScheduledJob");
> 
> csji.setActive(true);
> csji.setContextInfo(cci);
> csji.setJobName("boletin");
> 
>  
> 
> SortedMap parametros = new TreeMap();
> parametros.put("request",request);
> parametros.put("response",response);
> 
> csji.setParameters(parametros);
> csm.initialize(cmsObj);
> 
> csm.scheduleJob(cmsObj,csji);
> 
> %>
> 
>  
> 
> La tarea efectivamente se ejecuta cada minuto, pero el problema viene en la
> implementación del método export de la clase CmsJspLoader.
> 
>  
> 
> El código del método launch es el siguiente:
> 
>  
> 
> public String launch(CmsObject arg0, Map arg1) throws Exception {
> 
>             CmsJspLoader crl = new CmsJspLoader();
>      	crl.setFlexCache(newCmsFlexCache(newCmsFlexCacheConfiguration()));
>             crl.initConfiguration();
> 
>       
>             I_CmsResourceCollector collector = OpenCms.getResourceManager()
> 
>             .getContentCollector("singleFile");
> 
>  
> 
>             List m_collectorResult = collector.getResults(arg0,
> "singleFile",
> 
>                        
>
"/system/modules/org.opencms.fundacionctic.newsletter/elements/cabeceraBoletin.jsp");
> 
>             CmsResource e = (CmsResource)m_collectorResult.get(0);
> 
>  
> 
>             byte[] contenidoHtml = null;
> 
>  
> 
>             HttpServletRequestWrapper hsrw = new
> HttpServletRequestWrapper((HttpServletRequest)arg1.get("request"));
> 
>             HttpServletResponseWrapper hsrew = new
> HttpServletResponseWrapper((HttpServletResponse)arg1.get("response"));
> 
>  
> 
>             contenidoHtml = crl.export(arg0,e,hsrw,hsrew);
> 
>             String contenido = new String(contenidoHtml);
> 
>             System.out.println(contenido);
> 
>                         
> 
> return null;
> 
> }
> 
>  
> 
> Para probar pongo a mano el tipo de colector y el recurso que quiero cargar
>
(system/modules/org.opencms.fundacionctic.newsletter/elements/cabeceraBoletin.jsp),
> más adelante haría esto configurable mediante un formulario (lo que en el
> fondo estoy haciendo es un imitar al manejador de tareas del OpenCMS). 
> 
>  
> 
> Todo parece correcto pero al hacer el export me da la siguiente excepción:
> 
>  
> 
> java.lang.NullPointerException
> 
>             at
> org.apache.coyote.tomcat5.CoyoteRequest.setAttribute(CoyoteRequest.java:1472)
> 
>             at
>
org.apache.coyote.tomcat5.CoyoteRequestFacade.setAttribute(CoyoteRequestFacade.java:351)
> 
>             at
>
javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:283)
> 
>             at
>
javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:283)
> 
>             at
>
javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:283)
> 
>             at
>
javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:283)
> 
>             at
> org.opencms.flex.CmsFlexController.setController(CmsFlexController.java:277)
> 
>             at
> org.opencms.loader.CmsJspLoader.getController(CmsJspLoader.java:561)
> 
>             at org.opencms.loader.CmsJspLoader.export(CmsJspLoader.java:245)
> 
>             at
>
org.fundacionctic.opencms.business.services.NewsLetterCmsScheduledJob.launch(NewsLetterCmsScheduledJob.java:376)
> 
>             at
> org.opencms.scheduler.CmsScheduleManager.execute(CmsScheduleManager.java:171)
> 
>             at org.quartz.core.JobRunShell.run(JobRunShell.java:191) 
> 
>  
> 
> En el fondo, el método que falla es este:
> 
>  
> 
> /** 
> 
>      * Stores the given controller in the given request (using a request
> attribute).<p>
> 
>      * 
> 
>      * @param req the request where to store the controller in 
> 
>      * @param controller the controller to store
> 
>      */
> 
>     public static void setController(ServletRequest req, CmsFlexController
> controller) {
> 
>  
> 
>         req.setAttribute(CmsFlexController.ATTRIBUTE_NAME, controller);
> 
>     }
> 
>  
> 
> Alguna idea?
> 
>  
> 
>  
> 
> Gracias y un saludo. Luis
> 
> 
> _______________________________________________
> This mail is send to you from the opencms-dev mailing list
> To change your list options, or to unsubscribe from the list, please visit
> http://mail.opencms.org/mailman/listinfo/opencms-dev
> 


----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.




More information about the opencms-dev mailing list