[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