<?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>AQuA.it &#187; Uncategorized</title>
	<atom:link href="http://blog.aquait.info/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.aquait.info</link>
	<description>Blog técnico de AQuA.it</description>
	<lastBuildDate>Mon, 17 Oct 2011 12:15:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Testing FTW</title>
		<link>http://blog.aquait.info/2011/02/testing-ftw/</link>
		<comments>http://blog.aquait.info/2011/02/testing-ftw/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 19:49:54 +0000</pubDate>
		<dc:creator>Enrique</dc:creator>
				<category><![CDATA[Managment]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://blog.aquait.info/?p=256</guid>
		<description><![CDATA[Algunas frases que he escuchado y que en algún momento hasta he dicho (y no estoy particularmente orgulloso): El testing no sirve para nada Esto es bien simple, no necesita testing Que testén los usuarios El testing es una pérdida de tiempo Testear es improductivo Testear es aburrido Bueno, déjenme decirles algo: todas estas afirmaciones [...]]]></description>
			<content:encoded><![CDATA[<p><!-- p { margin-bottom: 0.08in; } -->Algunas frases que he escuchado y que en algún momento hasta he dicho (y no estoy particularmente orgulloso):</p>
<ul>
<li>El testing no sirve para nada</li>
<li>Esto es bien simple, no necesita 	testing</li>
<li>Que testén los usuarios</li>
<li>El testing es una pérdida de 	tiempo</li>
<li>Testear es improductivo</li>
<li>Testear es aburrido</li>
</ul>
<p><span id="more-256"></span></p>
<p>Bueno, déjenme decirles algo: todas estas afirmaciones están equivocadas. Sí, incluso la última. Testear tiene muchos beneficios, incluso tiene beneficios no directamente relacionados con el testing. Pero no nos adelantemos.</p>
<p>Tal vez la primera -El testing no sirve para nada- sea una de las más dichas y escuchadas. Esta frase la dice la gente que nunca testeó. No conozco a nadie con disciplina de testing que piense esto.</p>
<p>Otra frase nefasta es la tercera -Que testén los usuarios-. No hay peor cosa que entregarle al usuario que un software plagado de errores. La confianza del usuario es una de las cosas más importantes en un proyecto. Al usuario hay que tenerlo de nuestro lado ya que él/ella es la razón por la cual estamos haciendo ese sistema. La confianza se puede perder en un abrir y cerrar de ojos por un error que lleva 5 minutos eliminarlo. Y cuando sucede esto, volver a ganar la confianza cuesta mucho.</p>
<p>Pero ¿por qué se le tiene tanta idea al testing? y sobre todo por la gente que no tiene disciplina testeadora. Yo creo que es porque el testing nos expone a nuestros errores e inconscientemente tratamos de evitar esto. Y mientras haya errores, obviamente, la tarea no está terminada.</p>
<p>Cómo sería la implementación de una funcionalidad para un programador que no testea disciplinadamente:</p>
<ol>
<li>Programación de la funcionalidad</li>
<li>Probar un par de veces (en el 	mejor de los casos)</li>
<li>Deploy</li>
</ol>
<p>Para cualquier funcionalidad más o menos compleja, esto lleva a que haya un caso que no se consideró en el punto 2 y por lo tanto a un error en el sistema. Entonces:</p>
<ol>
<li>Corregir el error</li>
<li>Probar un par de veces (ahora un 	poco mejor por el sentimiento de culpa <img src='http://blog.aquait.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>Deploy</li>
</ol>
<p>Seis pasos, suponiendo que el error queda arreglado.</p>
<p>Como sería el mismo ciclo, pero con disciplina de test:</p>
<ol>
<li>Programación de la funcionalidad</li>
<li>Programación del test de la 	funcionalidad</li>
<li>Probar la funcionalidad</li>
<li>Deploy</li>
</ol>
<p>Cuatro pasos.</p>
<p>Les aseguro que la calidad del producto es mucho más alta y no quedamos pegados con el usuario. El “simple” hecho de programar el test, no hace pensar más. Y ¿tardamos más? Generalmente no, porque no hay que corregir errores ni volver a pasar a producción. Igualmente, sería preferible tardar más que por tratar de sacar el sistema antes, se escape un error se dañe la confianza del usuario.</p>
<p><strong>Herramientas</strong></p>
<p>Bueno, basta de psicología barata. Ahora voy a nombrar algunas herramientas que asisten al testing.</p>
<p>Simplemente voy a nombrarlas, hay mucha literatura en Internet sobre estas herramientas.</p>
<p><strong>Unitarios</strong></p>
<p>Para hacer tests unitarios hay básicamente dos frameworks JUnit y TestNG. El segundo es más abarcativo que el primero.</p>
<p><strong>Integración</strong></p>
<p>Para hacer tests de integración, también hay frameworks que nos facilitan la vida, jMock o Mockito por nombrar dos.</p>
<p><strong>Cobertura</strong></p>
<p>La cobertura de código es sin duda una de las herramientas más interesantes para tener una idea de la calidad de nuestro test. Con esta herramienta es muy fácil saber si se nos escaparon casos en nuestros tests, ya que van a aparecer lineas de código son cubrir. La idea es aproximarse lo más posible a 100%.</p>
<p>El hecho de testar, produce efectos secundario (positivos) en nuestro código:</p>
<ol>
<li>Con el tiempo produce métodos más 	simples: Es más fácil testear métodos cortos y simples, que 	largos y complejos. Cuando programamos pensando en el testing esto 	surge naturalmente. El código simple es más fácil de mantener.</li>
<li>Los tests tienden a mejorar la 	modularización del sistema, ya que pueden exponer problemas de 	dependencias entre los módulos. Ej: dependencias circulares.</li>
<li>Los tests tiene un efecto 	psicológico en el desarrollador, dándole confianza en su producto 	y fomentando la motivación. Esto hace que testear sea “divertido”.</li>
</ol>
<p><strong>Notas finales</strong></p>
<p>El test debe ser tomado con profesionalismo: la tarea no está terminada si no tiene el test correspondiente. Está de más decir que el test tiene que ser de alta calidad.</p>
<p>El test sirve para verificar y descubrir errores cuando estamos programando la funcionalidad, pero más importante aún, es que nos da la tranquilidad de que dentro de 6 meses cuando se realizaron un montón de cambios, nuestra funcionalidad se sigue comportando como esperamos.</p>
<p>Implantar el testing en un equipo no es tarea fácil. Requiere tiempo, esfuerzo y no bajar los brazos. Siempre hay rechazo a algo nuevo. Incluso la gente que reconoce el valor del testing, le cuesta arrancar a testear profesionalmente.</p>
<p>El testing (cómo cualquier otra cosa) no puede ser algo impuesto al equipo; por el contrario, tiene que ser aceptado por el equipo, haciéndole ver los beneficios del testing profesional en el día a día. Bien vale la pena el esfuerzo.</p>
<p><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fblog.aquait.info%2F2011%2F02%2Ftesting-ftw%2F&amp;linkname=Testing%20FTW" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.aquait.info%2F2011%2F02%2Ftesting-ftw%2F&amp;linkname=Testing%20FTW" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.aquait.info%2F2011%2F02%2Ftesting-ftw%2F&amp;linkname=Testing%20FTW" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fblog.aquait.info%2F2011%2F02%2Ftesting-ftw%2F&amp;linkname=Testing%20FTW" title="Google Reader" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.aquait.info%2F2011%2F02%2Ftesting-ftw%2F&amp;title=Testing%20FTW" id="wpa2a_2"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.aquait.info/2011/02/testing-ftw/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Juegos en JME (o cómo convertir tu celular en una mini consola de video juegos)</title>
		<link>http://blog.aquait.info/2010/06/juegos-en-jme-o-como-convertir-tu-celular-en-una-mini-consola-de-video-juegos/</link>
		<comments>http://blog.aquait.info/2010/06/juegos-en-jme-o-como-convertir-tu-celular-en-una-mini-consola-de-video-juegos/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 22:39:02 +0000</pubDate>
		<dc:creator>Enrique</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[j2me]]></category>
		<category><![CDATA[jme]]></category>

		<guid isPermaLink="false">http://blog.aquait.info/?p=224</guid>
		<description><![CDATA[Con el poder de procesamiento que tienen los dispositivos móviles hoy en día y en particular los celulares, se puede -con un poco de esfuerzo, paciencia y muchas ganas- implementar juegos interesantes en Java para el celular. El “celular” de hoy en día es como una computadora con un montón de periféricos integrados: cámara, teclado, [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } --><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Con el poder de procesamiento que tienen los dispositivos móviles hoy en día y en particular los celulares, se puede -con un poco de esfuerzo, paciencia y muchas ganas- implementar juegos interesantes en Java para el celular.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">El “celular” de hoy en día es como una computadora con un montón de periféricos integrados: cámara, teclado, pantalla, teléfono celular, lector de memoria externa, wifi, gps, gsm, etc. Y todo esto en la palma de la mano.<span id="more-224"></span></span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Algunos de estos dispositivos móviles traen sistemas operativos propietarios, otros utilizan alguna versión de Windows, Linux o Symbian OS. Pero hay una características que la gran mayoría tienen en común: Java. Obviamente no es la versión de Java full power que se instala en nuestro desktop, laptop o servidor. Se trata de una versión adaptada a dispositivos móviles en los cuales no se cuenta con Gigas de RAM, o múltiples CPUs con frecuencias de reloj del orden de los Giga Hetrz.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Sorprendentemente, Java Micro Edition (JME, A.K.A. J2ME) tiene las características que la hacen una plataforma bien interesante para desarrollar aplicaciones y particularmente juegos. Y estos últimos son los que vamos a explorar.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;"><br />
</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;"><strong>Primero un poco de teoría</strong></span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Dada la cantidad de dispositivos móviles -todos con características diferentes- se inventaron los “perfiles de capacidades”: MIDP por Mobile Information Device Profile. Dependiendo de la versión de MIDP, el dispositivo va a tener más o menos capacidades de: comunicación, presentación, audio, etc.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Además de MIDP, existe otra especificación llamada CLDC por Connected Limited Device Configuration, que define capacidades de bajo nivel del dispositivo, por ejemplo, si tiene la capacidad de manejar número con punto flotante.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">MIDP se apoya en CLDC para formar la plataforma Java ME. La idea es desarrollar en la plataforma más compatible que se pueda. Hoy por hoy, la mayoría de los celulares soportan MIDP 2.0 y CLDC 1.1, pero si podemos restringirnos a CLDC 1.0 mejor. El Motorola V360 es un ejemplo de teléfono móvil con MIDP 2.0 y CLDC 1.0.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Entonces cuando empecemos a desarrollar, tenemos que elegir que versión de MIDP y CLDC vamos a utilizar. En la página de Oracle (http://java.sun.com/javame/technology/index.jsp), se puede encontrar más información y el SDK (http://java.sun.com/javame/downloads/index.jsp).</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Bien, tenemos el SDK instalado, tenemos nuestra IDE de confianza configurada. ¿Y ahora qué? ¡A programar! Bueno, no tan rápido. ¿Cómo se programa un juego? Esto es algo que los que venimos haciendo IT desde ya hace años, no tenemos muy claro. En Internet hay mucha documentación, pero la realmente buena es escasa.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Primero que nada, veremos como es el esqueleto de un juego -en pseudocódigo-:</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;"> </span></span></p>
<pre class="brush: java">proceso entrada del usuario
actualizo el estado del juego
dibujo la pantalla
goto 1
</pre>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;"> </span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Santo patrono de la informática, perdón por el goto.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">No hay nada revelador en estas 4 lineas, pero lo que si se pueden empezar a ver algunos problemas. Por ejemplo: este juego va a ejecutar a distinta velocidad según de la potencia del celular. Algo claramente no deseable. Obviamente queremos que nuestro juego funcione a la misma velocidad en cualquier celular, sin importar la potencia del mismo.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Para esto, hacemos un pequeño cambio:</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;"></p>
<pre class="brush: java">proceso entrada del usuario
actualizo el estado del juego
dibujo la pantalla
esperar X milisegundos
goto 1
</pre>
<p></span></span><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;"></span></span></p>
<ul></ul>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Ahora variando X, podemos variar la velocidad del juego. Fácil&#8230; ¿no? Queda en manos del usuario elegir X mediante, por ejemplo, el menú el juego. Pero, ¿no se podría determinar X automáticamente? Mejor aún, ¿no se podría determinar X dinámicamente en cada vuelta del ciclo?  Claro que sí. Ahora vemos como:</span></span></p>
<pre class="brush: java">ciclos_por_segundo = 30
milisegundos_por_ciclo = 1000 / ciclos_por_segundo
t_inicial = ahora()
proceso entrada del usuario
actualizo el estado del juego
dibujo la pantalla
t_ciclo = ahora() - t_inicial
si (t_ciclo &lt; milisegundos_por_ciclo) entonces
    esperar (milisegundos_por_ciclo - t_ciclo) milisegundos
goto 3
</pre>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;"> </span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Nota: La función ahora() devuelve la hora actual en milisegundos, algo como lo que hace System.currentTimeMillis() en Java.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Lo que se hace es, tomar el tiempo que toma un ciclo completo (4, 5 y 6). Si ese tiempo es menor que la cantidad de tiempo que establecimos para cada ciclo en 1 y 2, entonces esperamos esa diferencia de tiempo. Así, todos los ciclos demoran lo mismo y el tiempo de espera se ajusta dinámicamente. </span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">De esta forma logramos un rendimiento igual entre celulares de distinta potencia. Este método se puede mejorar implementando saltos de ciclos (frame skipping) cuando el celular es de muy baja potencia, pero corremos el riesgo de que el juego se vuelva injugable. Así, el juego ejecutará más lento en celulares de poca potencia, ya que todo el tiempo se consumirá en los puntos 4, 5 y 6 y nunca entrará en espera.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Es sorprendente la cantidad de cosas interesantes que se pueden hacer utilizando esta sencilla técnica.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;"><strong>A la práctica</strong></span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Vamos a implementar, con esta técnica, el “hola mundo” de los juegos: el PONG de a uno.</span></span></p>
<div id="attachment_225" class="wp-caption aligncenter" style="width: 219px"><a href="http://blog.aquait.info/wp-content/uploads/2010/06/Screenshot.png"><img class="size-full wp-image-225" title="Pong" src="http://blog.aquait.info/wp-content/uploads/2010/06/Screenshot.png" alt="Pong" width="209" height="202" /></a><p class="wp-caption-text">Pong</p></div>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Es como si fuera un Arkanoid, pero sin los ladrillos. Es verdad, no es muy divertido.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">La implementación en Java del bucle principal sería algo así:</span></span></p>
<pre class="brush: java">final int CICLOS_POR_SEGUNDO = 30;
final int MILISEGUNDOS_POR_CICLO = 1000 / CICLOS_POR_SEGUNDO;
while (true) {
    long tInicial = System.currentTimeMillis();
    procesarEntradaDelUsuario();
    actualizarEstadoDelJuego();
    dibujarLaPantalla();
    long tCiclo = System.currentTimeMillis() - tInicial;
    if (tCiclo &lt; MILISEGUNDOS_POR_CICLO) {
        Thread.sleep(MILISEGUNDOS_POR_CICLO - tCiclo);
    }
}
</pre>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Notar que hasta ahora no hay nada hecho particularmente para el PONG. Lo particular estará en las funciones procesarEntradaDelUsuario(), actualizarEstadoDelJuego() y dibujarLaPantalla().</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">La primera tiene la responsabilidad de tomar la entrada del usuario y modificar algo en el juego, en este caso sería la posición de la paleta. Sí, la paleta es ese rectángulo verde.. hay que tener imaginación <img src='http://blog.aquait.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">La segunda debe actualizar el estado interno del juego. En este juego, esta función tiene dos objetivos: a) mover la pelota y b) si la pelota se va hacia abajo, entonces el juego termina con el fatídico “Game Over”. </span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">La tercer y última función, debe tomar el estado del juego y dibujarlo en la pantalla.</span></span></p>
<p><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">El código fuente se puede bajar desde acá: <a href="http://blog.aquait.info/wp-content/uploads/2010/06/pong-scr.tar.gz">pong-scr.tar</a>. En esta implementación, nunca se pierde. Cuando la pelota se va para abajo, aparece nuevamente en el medio de la pantalla. Un buen ejercicio, sería agregarle vidas, que aumente la velocidad de la pelota, darle aceleración a la paleta, mejorar los gráficos, agregarle ladrillitos, sonidos, powerups y ponerle un nombre marketinero (que no sea Arkanoid, claro <img src='http://blog.aquait.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) y de ahí, a la fama!</span></span></p>
<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } --><span style="font-family: Liberation Sans,sans-serif;"><span style="font-size: x-small;">Enjoy!</span></span></p>
<p><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fblog.aquait.info%2F2010%2F06%2Fjuegos-en-jme-o-como-convertir-tu-celular-en-una-mini-consola-de-video-juegos%2F&amp;linkname=Juegos%20en%20JME%20%28o%20c%C3%B3mo%20convertir%20tu%20celular%20en%20una%20mini%20consola%20de%20video%20juegos%29" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.aquait.info%2F2010%2F06%2Fjuegos-en-jme-o-como-convertir-tu-celular-en-una-mini-consola-de-video-juegos%2F&amp;linkname=Juegos%20en%20JME%20%28o%20c%C3%B3mo%20convertir%20tu%20celular%20en%20una%20mini%20consola%20de%20video%20juegos%29" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.aquait.info%2F2010%2F06%2Fjuegos-en-jme-o-como-convertir-tu-celular-en-una-mini-consola-de-video-juegos%2F&amp;linkname=Juegos%20en%20JME%20%28o%20c%C3%B3mo%20convertir%20tu%20celular%20en%20una%20mini%20consola%20de%20video%20juegos%29" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fblog.aquait.info%2F2010%2F06%2Fjuegos-en-jme-o-como-convertir-tu-celular-en-una-mini-consola-de-video-juegos%2F&amp;linkname=Juegos%20en%20JME%20%28o%20c%C3%B3mo%20convertir%20tu%20celular%20en%20una%20mini%20consola%20de%20video%20juegos%29" title="Google Reader" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.aquait.info%2F2010%2F06%2Fjuegos-en-jme-o-como-convertir-tu-celular-en-una-mini-consola-de-video-juegos%2F&amp;title=Juegos%20en%20JME%20%28o%20c%C3%B3mo%20convertir%20tu%20celular%20en%20una%20mini%20consola%20de%20video%20juegos%29" id="wpa2a_4"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.aquait.info/2010/06/juegos-en-jme-o-como-convertir-tu-celular-en-una-mini-consola-de-video-juegos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java AppServer-03: Configuración y código</title>
		<link>http://blog.aquait.info/2009/10/180/</link>
		<comments>http://blog.aquait.info/2009/10/180/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 01:08:40 +0000</pubDate>
		<dc:creator>Enrique</dc:creator>
				<category><![CDATA[AppServer]]></category>
		<category><![CDATA[RPC]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Lab]]></category>

		<guid isPermaLink="false">http://blog.aquait.info/?p=180</guid>
		<description><![CDATA[Este es el último artículo de esta serie. En este voy a presentar como se configura el servidor y además voy a subir el código fuente. Estructura de directorios: aquait-appserver/ application/ db_connection_pool.config Configuración del módulo pool de conexiones a la base modules.config Configuración de los módulos services.config Configuración de los servicios messaging.config Configuración del módulo [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } 		A:link { so-language: zxx } --></p>
<p style="margin-bottom: 0in; font-weight: normal;">Este es el último artículo de esta serie. En este voy a presentar como se configura el servidor y además voy a subir el código fuente.</p>
<p style="margin-bottom: 0in; font-weight: normal;"><span id="more-180"></span></p>
<p style="margin-bottom: 0in; font-weight: normal;">Estructura de directorios:</p>
<p style="margin-bottom: 0in;"><strong>aquait-appserver/</strong></p>
<ul>
<li><strong> application/</strong>
<ul>
<li>db_connection_pool.config	Configuración del módulo pool de conexiones a la base</li>
<li>modules.config		Configuración de los módulos</li>
<li>services.config 		Configuración de los servicios</li>
<li>messaging.config		Configuración del módulo de mensajería</li>
<li>security.config 		Configuración de seguridad</li>
</ul>
</li>
<li><strong> lib/</strong>
<ul>
<li>aquaitrt-bin_2009r1.jar	Runtime</li>
<li>mail.jar 			Servicio de mail</li>
</ul>
</li>
<li><strong> log/</strong></li>
<li>logging.config				Configuración de logging</li>
<li>server.config				Configuración del servidor</li>
<li>start.sh</li>
<li>stop.sh</li>
<li>start.cmd				       Scripts para iniciar y detener al servidor</li>
<li>start.sh</li>
<li>stop.cmd</li>
<li>stop.sh</li>
</ul>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in;"><strong>logging.config</strong></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"> </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">java.util.logging.FileHandler.level = ALL </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">java.util.logging.FileHandler.pattern = ./log/server.%u.txt </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">java.util.logging.FileHandler.limit = 50000 </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">java.util.logging.FileHandler.count = 1 </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">java.util.logging.FileHandler.formatter = com.aquait.utils.logging.ServerFormatter </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"> </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">java.util.logging.ConsoleHandler.level = INFO </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">java.util.logging.ConsoleHandler.formatter = com.aquait.utils.logging.ServerFormatter </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">Archivo que configura el logging. El servidor usa la API estándar de Java SE para logear. El archivo por defecto define dos handlers. El primero que genera archivos y el segundo logea a la consola. Por más detalles, ver http://java.sun.com/javase/6/docs/api/java/util/logging/package-summary.html.</p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in;">
<p style="margin-bottom: 0in;"><strong>server.config</strong></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># Server config </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"> </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># Server listening port </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">port = 6666 </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"> </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># Worker pool size </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">workers.poolsize = 10 </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"> </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># Shutdown password </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">shutdown.password = _shut_down_now_server_ </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">Este archivo define tres parámetros del servidor. Primero el puerto TCP/IP en el cual el servidor escucha conexiones. Los clientes se deberán conectar a este puerto. El segundo parámetro define la cantidad de workers (hilos) que atienden los pedidos de los clientes. Y el tercero es la contraseña para bajar el servidor. Se baja mediante el script stop que se comunica al puerto definido y manda un mensaje especial. El servidor solamente se puede bajar desde el mismo host en donde está ejecutando.</p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in;">
<p style="margin-bottom: 0in;"><strong>db_connection_pool.config</strong></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># DBConnectionPoolModule configuration </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># Examples: </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#     url = jdbc:oracle:thin:@&lt;host&gt;:&lt;port&gt;:&lt;database&gt; </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#     driverclass = oracle.jdbc.driver.OracleDriver </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">enable = false </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">url = &lt;url&gt; </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">username = &lt;user&gt; </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">password = &lt;pass&gt; </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">driverclass = &lt;driver_class&gt; </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">autocommit = false </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">poolsize = 5 </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">maxpoolsize = 10 </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">Este archivo controla los parámetros del pool de conexiones a la base de datos.</p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in;">
<p style="margin-bottom: 0in;"><strong>modules.config</strong></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># Modules to load </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># Format: </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#       module.name = &lt;module_name&gt; </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#       module[&lt;module_name&gt;].class = &lt;module_class&gt; </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#</span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">En este archivo se delcaran los módulos que van a desplegarse en el servidor. Cada módulo puede tener una cantidad varible de parámetros.</p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in;">
<p style="margin-bottom: 0in;"><strong>messaging.config</strong></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># MessagingModule configuration </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">enable = false </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">poolsize = 10 </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"> # Security realms </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># Format (&lt;n&gt; starts at 0): </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#       security_realm[&lt;n&gt;] = &lt;security_realm_class&gt; </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#</span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">Este archivo configura la seguridad del servidor. Se pueden definir varios realms que se ejecutan en orden  para cada pedido de los clientes.</p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in;">
<p style="margin-bottom: 0in;"><strong>services.config</strong></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># Services </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># Format: </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#       service[&lt;service_name&gt;].interface = &lt;service_interface&gt; </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#       service[&lt;service_name&gt;].implementation = &lt;service_implementation&gt; </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#       service[&lt;service_name&gt;].parameter[&lt;param_name&gt;] = &lt;param_value&gt; </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># </span></span></p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">Este archivo configura los servicios que se publican en el servidor. Para cada servicio hay que configurar la interfaz y la implementación de esta. Además, opcionalmente, se pueden agregar parámetros de inicialización.</p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;">Con esto finalizamos esta serie. Siempre estoy a las orden ante cualquier consulta que tengan al respecto de este servidor.</p>
<p style="margin-bottom: 0in; font-weight: normal;">Bajar código fuente: <a href="http://blog.aquait.info/wp-content/uploads/2009/10/aquaitrt_2009-10-14.tar.gz">aquaitrt_2009-10-14.tar.gz</a></p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F10%2F180%2F&amp;linkname=Java%20AppServer-03%3A%20Configuraci%C3%B3n%20y%20c%C3%B3digo" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F10%2F180%2F&amp;linkname=Java%20AppServer-03%3A%20Configuraci%C3%B3n%20y%20c%C3%B3digo" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F10%2F180%2F&amp;linkname=Java%20AppServer-03%3A%20Configuraci%C3%B3n%20y%20c%C3%B3digo" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F10%2F180%2F&amp;linkname=Java%20AppServer-03%3A%20Configuraci%C3%B3n%20y%20c%C3%B3digo" title="Google Reader" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.aquait.info%2F2009%2F10%2F180%2F&amp;title=Java%20AppServer-03%3A%20Configuraci%C3%B3n%20y%20c%C3%B3digo" id="wpa2a_6"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.aquait.info/2009/10/180/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Java AppServer-02: DBPool + Messaging</title>
		<link>http://blog.aquait.info/2009/10/java-appserver-02-dbpool-messaging/</link>
		<comments>http://blog.aquait.info/2009/10/java-appserver-02-dbpool-messaging/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 18:17:16 +0000</pubDate>
		<dc:creator>Enrique</dc:creator>
				<category><![CDATA[AppServer]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Lab]]></category>

		<guid isPermaLink="false">http://blog.aquait.info/?p=175</guid>
		<description><![CDATA[Siguiendo la exploración de los principales componentes de servidor, en este artículo vamos a ver el el componente de conexiones a la base de datos y el de mensajería. Los dos componentes se diseñaron e implementaron separadamente del servidor de aplicaciones, por lo que no están acoplados de ninguna forma. Para “agregarlos” al servidor, se [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } --></p>
<p style="margin-bottom: 0in;">Siguiendo la exploración de los principales componentes de servidor, en este artículo vamos a ver el el componente de conexiones a la base de datos y el de mensajería. Los dos componentes se diseñaron e implementaron separadamente del servidor de aplicaciones, por lo que no están acoplados de ninguna forma. Para “agregarlos” al servidor, se implementaron módulos del servidor que los adaptan. <span id="more-175"></span></p>
<p style="margin-bottom: 0in;">Pool de conexiones a la base de datos</p>
<p style="margin-bottom: 0in;">El pool implementado es muy sencillo. Tiene una colección de conexiones con un tamaño inicial (configurable) y en caso de que el cliente (en este caso el servidor de aplicaciones) necesite más, crea hasta un máximo (también configurable).</p>
<p style="margin-bottom: 0in; text-align: center;">
<div id="attachment_176" class="wp-caption aligncenter" style="width: 570px"><a href="http://blog.aquait.info/wp-content/uploads/2009/10/Java-AppServer-02-fig1.png"><img class="size-full wp-image-176 " title="Java-AppServer-02-fig1" src="http://blog.aquait.info/wp-content/uploads/2009/10/Java-AppServer-02-fig1.png" alt="Diseño del pool de conexiónes a la BD" width="560" height="426" /></a><p class="wp-caption-text">Diseño del pool de conexiónes a la BD</p></div>
<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } --></p>
<p style="margin-bottom: 0in;">Los métodos startup() y shutdown() del módulo manejan el ciclo de vida del pool. El primero carga de un archivo de configuración -que veremos más adelante- los datos para crear el pool y el segundo mata a las conexiones activas.</p>
<p style="margin-bottom: 0in;">
<p style="margin-bottom: 0in;">Mensajería</p>
<p style="margin-bottom: 0in; font-weight: normal;">El servicio de mensajería también es sencillo, pero potente. Poseé un pool de hilos que procesan los mensajes en form asíncrona. La clase Messaging tiene un conjunto de MessageHandlers que son los responsables de procesar los mensajes. Cuando llega un mensaje, este se le pasa a todos los handlers y cada uno es responsable de si lo procesa o no.</p>
<p style="margin-bottom: 0in; text-align: center;">
<div id="attachment_177" class="wp-caption aligncenter" style="width: 634px"><a href="http://blog.aquait.info/wp-content/uploads/2009/10/Java-AppServer-02-fig2.png"><img class="size-full wp-image-177 " title="Java-AppServer-02-fig2" src="http://blog.aquait.info/wp-content/uploads/2009/10/Java-AppServer-02-fig2.png" alt="Diseño del servicio de mensajería" width="624" height="435" /></a><p class="wp-caption-text">Diseño del servicio de mensajería</p></div>
<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } --></p>
<p style="margin-bottom: 0in; font-weight: normal;">En el próximo artículo voy presentar la configuración del servidor y también voy a subir el código fuente. Hasta el próximo!</p>
<p><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F10%2Fjava-appserver-02-dbpool-messaging%2F&amp;linkname=Java%20AppServer-02%3A%20DBPool%20%2B%20Messaging" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F10%2Fjava-appserver-02-dbpool-messaging%2F&amp;linkname=Java%20AppServer-02%3A%20DBPool%20%2B%20Messaging" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F10%2Fjava-appserver-02-dbpool-messaging%2F&amp;linkname=Java%20AppServer-02%3A%20DBPool%20%2B%20Messaging" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F10%2Fjava-appserver-02-dbpool-messaging%2F&amp;linkname=Java%20AppServer-02%3A%20DBPool%20%2B%20Messaging" title="Google Reader" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.aquait.info%2F2009%2F10%2Fjava-appserver-02-dbpool-messaging%2F&amp;title=Java%20AppServer-02%3A%20DBPool%20%2B%20Messaging" id="wpa2a_8"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.aquait.info/2009/10/java-appserver-02-dbpool-messaging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lanzamiento de Labs</title>
		<link>http://blog.aquait.info/2009/08/lanzamiento-de-labs/</link>
		<comments>http://blog.aquait.info/2009/08/lanzamiento-de-labs/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 22:25:34 +0000</pubDate>
		<dc:creator>Enrique</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Lab]]></category>

		<guid isPermaLink="false">http://blog.aquait.info/?p=22</guid>
		<description><![CDATA[Con este post, damos por inaugurada la sección Labs del blog. En esta sección se tratará todo lo concerniente a la experimentación con distintos lenguajes de programación. En el primer artículo (en el cual estoy trabajando) implementaremos RPC en Java. Para que sea “divertido”, este RPC va a ser multi-hilo del lado del servidor (capacidad [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } 		A:link { so-language: zxx } -->Con este post, damos por inaugurada la sección Labs del blog.</p>
<p>En esta sección se tratará todo lo concerniente a la experimentación con distintos lenguajes de programación.</p>
<p>En el primer artículo (en el cual estoy trabajando) implementaremos RPC en Java. Para que sea “divertido”, este RPC va a ser multi-hilo del lado del servidor (capacidad de atender muchos pedidos a la vez) y también multi-hilo del lado del cliente (capacidad hacer múltiples invocaciones a la vez)</p>
<p style="margin-bottom: 0in;">Hasta pronto!</p>
<p><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F08%2Flanzamiento-de-labs%2F&amp;linkname=Lanzamiento%20de%20Labs" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F08%2Flanzamiento-de-labs%2F&amp;linkname=Lanzamiento%20de%20Labs" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F08%2Flanzamiento-de-labs%2F&amp;linkname=Lanzamiento%20de%20Labs" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F08%2Flanzamiento-de-labs%2F&amp;linkname=Lanzamiento%20de%20Labs" title="Google Reader" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.aquait.info%2F2009%2F08%2Flanzamiento-de-labs%2F&amp;title=Lanzamiento%20de%20Labs" id="wpa2a_10"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.aquait.info/2009/08/lanzamiento-de-labs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog de AQuA.it</title>
		<link>http://blog.aquait.info/2009/08/blog-de-aqua-it/</link>
		<comments>http://blog.aquait.info/2009/08/blog-de-aqua-it/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 02:57:16 +0000</pubDate>
		<dc:creator>Enrique</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.aquait.info/?p=6</guid>
		<description><![CDATA[En este blog los integrantes de AQuA.it comenzarán a escribir sobre su experiencia profesional. Esperamos en breve estar en contacto. Gracias]]></description>
			<content:encoded><![CDATA[<p>En este blog los integrantes de AQuA.it comenzarán a escribir sobre su experiencia profesional.</p>
<p>Esperamos en breve estar en contacto.</p>
<p>Gracias</p>
<p><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F08%2Fblog-de-aqua-it%2F&amp;linkname=Blog%20de%20AQuA.it" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F08%2Fblog-de-aqua-it%2F&amp;linkname=Blog%20de%20AQuA.it" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F08%2Fblog-de-aqua-it%2F&amp;linkname=Blog%20de%20AQuA.it" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fblog.aquait.info%2F2009%2F08%2Fblog-de-aqua-it%2F&amp;linkname=Blog%20de%20AQuA.it" title="Google Reader" rel="nofollow" target="_blank"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.aquait.info%2F2009%2F08%2Fblog-de-aqua-it%2F&amp;title=Blog%20de%20AQuA.it" id="wpa2a_12"><img src="http://blog.aquait.info/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.aquait.info/2009/08/blog-de-aqua-it/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

