<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Frank D. Martínez &#187; Quartz</title>
	<atom:link href="http://www.frankdavidmartinez.com/tag/quartz/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.frankdavidmartinez.com</link>
	<description>Blog de tecnología en Español</description>
	<lastBuildDate>Wed, 02 Jun 2010 15:51:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Glassfish + Quartz + EJB</title>
		<link>http://www.frankdavidmartinez.com/2009/03/glassfish-quartz-ejb/</link>
		<comments>http://www.frankdavidmartinez.com/2009/03/glassfish-quartz-ejb/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 15:22:25 +0000</pubDate>
		<dc:creator>Frank D. Martínez</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Glassfish]]></category>
		<category><![CDATA[Quartz]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.frankdavidmartinez.com/?p=9</guid>
		<description><![CDATA[Después de buscar infinitamente en internet como configurar Quartz en Glassfish para programar Jobs desde un EJB y no encontrar solución, decidí hacerlo desde cero y lo logré, como me dí cuenta que hay muchos post en los forums preguntando como hacer esto, decidí publicar el procedimiento. Ojalá les sirva.
Enfoque:

Crear una aplicación Web que va [...]]]></description>
			<content:encoded><![CDATA[<p>Después de buscar infinitamente en internet como configurar Quartz en Glassfish para programar Jobs desde un EJB y no encontrar solución, decidí hacerlo desde cero y lo logré, como me dí cuenta que hay muchos post en los forums preguntando como hacer esto, decidí publicar el procedimiento. Ojalá les sirva.</p>
<p><strong>Enfoque:</strong></p>
<ol>
<li>Crear una aplicación Web que va a servir de servidor Quartz vía RMI.</li>
<li>Configurar el Glassfish para que permita la conexión RMI entre los EJBs y la aplicación Web.</li>
<li>Crear un EJB de prueba.</li>
</ol>
<p><strong>Crear una aplicación Web que va a servir de servidor Quartz vía RMI:</strong></p>
<p>Crear una aplicación web normal con las siguientes bibliotecas en WEB-INF/lib:</p>
<ol>
<li>quartz-1.6.5.jar</li>
<li>commons-collections-3.2.jar</li>
<li>commons-logging-1.1.jar</li>
</ol>
<p>Incluir un archivo quartz.properties en WEB-INF/classes con las siguientes entradas</p>
<pre class="code"><span style="color: #ff0000;"><strong>org.quartz.scheduler.instanceName = Sched1
org.quartz.scheduler.rmi.export = true
org.quartz.scheduler.rmi.registryHost = localhost
org.quartz.scheduler.rmi.registryPort = 1099
org.quartz.scheduler.rmi.createRegistry = true</strong></span>
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore</pre>
<p>Agregar el listener en el web.xml:</p>
<pre class="code">&lt;listener&gt;
    &lt;listener-class&gt;org.quartz.ee.servlet.QuartzInitializerListener&lt;/listener-class&gt;
&lt;/listener&gt;</pre>
<p>Agregar el listener en el sun-web.xml:</p>
<pre class="code">
    &lt;class-loader delegate="true"/&gt;
</pre>
<p><strong>Configurar el Glassfish para que permita la conexión RMI entre los EJBs y la aplicación Web:</strong></p>
<p>Activar el Security Manager:</p>
<p>En la consola administrativa del Glassfish, entrar a [Configuration -&gt; Security] y activar la casilla [Security Manager]</p>
<p>Editar el archivo server.policy que se encuentra en la carpeta config del dominio y agregar la siguiente regla:</p>
<pre class="code"> grant codeBase "file:${com.sun.aas.instanceRoot}/applications/j2ee-modules/<span style="color: #ff0000;"><strong>[web app name]</strong></span>/WEB-INF/lib/quartz-1.6.5.jar" {
     permission java.security.AllPermission;
 };</pre>
<p>Obviamente hay que reemplazar <strong>[web app name]</strong> por el nombre real de nuestra aplicación web que hicimos al principio.</p>
<p>Bueno hasta aquí ya está listo el servidor Quartz, solo falta copiar el war en el autodeploy del dominio y hacer algun EJB para probar. <strong>Nota: hay que reiniciar el Glassfish después del autodeploy.</strong></p>
<p><strong>Crear un EJB de prueba:</strong></p>
<p>Creamos un EJB que tenga los siguentes jars (bibliotecas) empacadas en el jar.</p>
<ol>
<li>quartz-1.6.5.jar</li>
<li>commons-collections-3.2.jar</li>
<li>commons-logging-1.1.jar</li>
</ol>
<p>Ponemos un archivo quartz.properties en la raiz del jar con las siguientes entradas:</p>
<pre class="code">org.quartz.scheduler.instanceName = Sched1
org.quartz.scheduler.logger = schedLogger
org.quartz.scheduler.rmi.proxy = true
org.quartz.scheduler.rmi.registryHost = localhost
org.quartz.scheduler.rmi.registryPort = 1099</pre>
<p>Y listo, dentro de cualquier EJB podemos obtener el Scheduler así:</p>
<pre class="code"> SchedulerFactory sf = new StdSchedulerFactory();
 Scheduler sched = sf.getScheduler();</pre>
<p>Código completo del ejemplo:</p>
<ol>
<li><a href="/wp-content/uploads/2009/03/quartzapp.zip">Quartz Server WebApp</a></li>
<li><a href="/wp-content/uploads/2009/03/quartzejbclient.zip">EJB Quartz Client</a></li>
</ol>
<p>Nota: Las bibliotecas (jars) fueron removidas, hay que descargarlas por aparte.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frankdavidmartinez.com/2009/03/glassfish-quartz-ejb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
