<?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>.:: Seam City ::. &#187; aop</title>
	<atom:link href="http://seamcity.madeinxpain.com/archives/tag/aop/feed" rel="self" type="application/rss+xml" />
	<link>http://seamcity.madeinxpain.com</link>
	<description>Sobre programación en general, y Seam en particular</description>
	<lastBuildDate>Thu, 22 Jan 2009 15:35:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Eventos en Seam</title>
		<link>http://seamcity.madeinxpain.com/archives/eventos-en-seam</link>
		<comments>http://seamcity.madeinxpain.com/archives/eventos-en-seam#comments</comments>
		<pubDate>Sat, 06 Sep 2008 04:07:32 +0000</pubDate>
		<dc:creator>Tes</dc:creator>
				<category><![CDATA[seam]]></category>
		<category><![CDATA[aop]]></category>

		<guid isPermaLink="false">http://seamcity.madeinxpain.com/?p=53</guid>
		<description><![CDATA[Durante su funcionamiento, Seam lanza una serie de eventos predefinidos al realizar ciertas.
Estos eventos pueden ser escuchados por nuestra aplicación y actuar en consecuencia.
Algunos eventos interesantes son:

org.jboss.seam.validationFailed : Se lanza cuando hay un fallo de validación
org.jboss.seam.postCreate.&#60;name&#62; : Se lanza cuando el componente con nombre  &#60;name&#62; se instancia. Se puede usar de forma similar a [...]]]></description>
			<content:encoded><![CDATA[<p>Durante su funcionamiento, Seam lanza una serie de eventos predefinidos al realizar ciertas.<br />
Estos eventos pueden ser escuchados por nuestra aplicación y actuar en consecuencia.<br />
Algunos eventos interesantes son:</p>
<ul>
<li><em><strong>org.jboss.seam.validationFailed</strong></em> : Se lanza cuando hay un fallo de validación</li>
<li><em><strong>org.jboss.seam.postCreate.&lt;name&gt;</strong></em> : Se lanza cuando el componente con nombre <em> &lt;name&gt;</em> se instancia. Se puede usar de forma similar a la anotación <em>@Create</em> de los EJBs</li>
<li><em><strong>org.jboss.seam.exceptionNotHandled</strong></em> : Se lanza cuando salta una excepción que no es manejada por Seam.</li>
<li><em><strong>org.jboss.seam.beforePhase y org.jboss.seam.afterPhase</strong></em> : Se lanzan respectivamente antes del inicio y después del final de cada fase JSF. Este evento es lanzado con el parámetro PhaseEvent, que indica la fase que empieza/acaba</li>
</ul>
<p>La lista completa de eventos puede verse en el <a title="Contextual Events" href="http://docs.jboss.com/seam/2.0.1.GA/reference/en/html/events.html#d0e4167" onclick="javascript:pageTracker._trackPageview('article_out/docs.jboss.com');" target="_blank">manual</a></p>
<p>Para escuchar eventos en Seam debemos usar la anotación <em><strong>@Observe</strong></em> para anotar un método que se ejecutará en respuesta al evento. Este método deber ser siempre público y, en el caso de los eventos predefinidos, sin argumentos (con alguna excepcion).<br />
Hay que tener en cuenta que estos métodos se ejecutan en el mismo hilo que la traza principal, de forma que hasta que no terminen de ejecutarse la aplicación no continuará, por lo que hay que tener cuidado.</p>
<div class="syntax_hilite">
<div id="java-6">
<div class="java">@Observe<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"nombre-del-evento"</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> metodoEscuchador<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">// do domething</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Pero aparte de los eventos predefinidos, también podemos lanzar y escuchar nuestros propios eventos.<br />
Disponemos de varias formas de lanzar nuestros eventos personalizados:</p>
<ul>
<li><strong>Etiqueta <em>@RaiseEvent</em></strong><br />
Al ejecutar un método anotado con la etiqueta @RaiseEvent, se lanzará el evento indicado</p>
<div class="syntax_hilite">
<div id="java-7">
<div class="java">@RaiseEvent<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"venta-confirmada"</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a> confirmarVenta<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> idVenta<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; <span style="color: #808080; font-style: italic;">// cuerpo del metodo</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p>
</li>
<li><strong>Fichero de navegación <em>pages.xml</em></strong><br />
Puedes lanzar un evento mediante la etiqueta &lt;raise-event&gt;</p>
<div class="syntax_hilite">
<div id="xml-8">
<div class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;navigation</span> <span style="color: #000066;">from-action</span>=<span style="color: #ff0000;">"#{manager.confirmarVenta}"</span><span style="font-weight: bold; color: black;">&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;rule</span> <span style="color: #000066;">if-outcome</span>=<span style="color: #ff0000;">"success"</span><span style="font-weight: bold; color: black;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;raise</span> -event <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"venta-confirmada"</span> <span style="font-weight: bold; color: black;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;redirect</span> <span style="color: #000066;">view-id</span>=<span style="color: #ff0000;">"home"</span><span style="font-weight: bold; color: black;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/rule<span style="font-weight: bold; color: black;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/navigation<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</div>
</div>
<p>
</li>
<li><strong>Mediante el componente <em>Events</em></strong><br />
Este componente permite lanzar eventos <strong>síncronos</strong> o <strong>asíncronos</strong> de manera programática.<br />
Los eventos lanzados de forma asíncrona se ejecutan en un hilo paralelo, por lo que son ideales para tareas pesadas o susceptibles de fallo que no deberían afectar al resto del sistema, como envío de emails, estadísticas...</p>
<p>Las ventajas de usar esta manera de lanzar eventos es que, aparte de poder lanzar eventos asíncronos, se pueden añadir <strong>parámetros</strong> al evento, que serán pasados como argumentos a la función que los observe en el orden en el que se añaden. Por ello, la función observadora debe tener como máximo el mismo número de argumentos de los que se envían al lanzar el evento, y siempre el mismo tipo.<br />
También permite lanzar eventos al cabo de un determinado tiempo o lanzarlos al final de la transacción en curso.</p>
<p>Aquí vemos un ejemplo que ejecuta un método a través de eventos cada vez que se confirma una venta.</p>
<div class="syntax_hilite">
<div id="java-9">
<div class="java"><span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a> confirmarVenta<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> idVenta<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; Events.<span style="color: #006600;">instance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">raiseEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"venta-confirmada"</span>, idVenta<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></p>
<p>@Observe<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"venta-confirmada"</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> observarVentaConfirmada<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> idVenta<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// do domething</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p>
También podemos optar por lanzar el evento de forma asíncrona y/o añadir más parámetros al evento, los cuales serán ignorado por las funciones observadoras con menor numero de argumentos</p>
<div class="syntax_hilite">
<div id="java-10">
<div class="java"><span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a> confirmarVenta<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> idVenta<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; Events.<span style="color: #006600;">instance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">raiseEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"venta-confirmada"</span>, idVenta, idVendedor<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></p>
<p>@Observe<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"venta-confirmada"</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> registraVenta<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> idVenta<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// solo nos interesa el identificador de venta</span><br />
<span style="color: #66cc66;">&#125;</span></p>
<p>@Observe<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"venta-confirmada"</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a> otorgaComisionAlVendedor<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> idVenta, <span style="color: #993333;">int</span> idVendedor<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// Obtenemos ambos parámetros</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://seamcity.madeinxpain.com/archives/eventos-en-seam/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

