<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2831594257051275697</id><updated>2012-02-16T04:42:09.143-06:00</updated><category term='apache'/><category term='hibernate'/><category term='cassandra'/><category term='jdbc'/><category term='tools'/><category term='javascript'/><category term='java'/><category term='generic'/><category term='jdk 64 ide intellij idea mac osx'/><category term='jdk'/><category term='servidores'/><category term='ajax'/><category term='tutorial'/><category term='appfuse'/><category term='maven'/><category term='tomcat'/><category term='concurrency'/><category term='thread'/><category term='jakarta'/><category term='ebs4j'/><category term='grails'/><category term='jse'/><category term='commons'/><category term='frameworks'/><category term='agile'/><category term='opensource'/><category term='rad'/><category term='spring'/><category term='noticias'/><category term='dao'/><category term='sun'/><category term='opensolaris'/><category term='jee'/><category term='database'/><category term='utilities'/><category term='google'/><title type='text'>Notas sobre Java / JEE</title><subtitle type='html'>Artículos, notas y recursos sobre Java y tecnologías relacionadas a la programación y el software libre.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-4481901943720901438</id><published>2011-04-27T12:32:00.000-06:00</published><updated>2011-04-27T12:32:00.140-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jdk 64 ide intellij idea mac osx'/><title type='text'>IntellijIDEA en Mac OSX Snow Leopard en modo de 64bits</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Intellij IDEA en Snow Leopard a 64 bits.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si utilizamos IntelijIDEA 9/10 en Mac OSX Snow Leopard, un sistema operativo de 64bits, tenemos el inconveniente de que se ejecuta bajo 32bits por defecto. Si se desea ejecutarse en 64 bits para optimizar el uso de una memoria mayor podemos utilizar el siguiente procedimiento:&lt;br /&gt;&lt;br /&gt;1. Abrimos el contenido de la aplicacion utilizando cmd+click en el icono de la aplicación de Idea y seleccionamos Show Package Contents (mostrar el contenido del paquete)&lt;br /&gt;&lt;br /&gt;2. Seleccionamos la carpeta Contents y realizamos un click alternativo (right click) al archivo Info.plist y seleccionamos "Open With" (Abrir con) y seleccionamos abrir con TextEdit o nuestro editor de texto favorito.&lt;br /&gt;&lt;br /&gt;3. Realizamos una búsqueda en el archivo y búscamos la cadena&amp;nbsp;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;i&gt;JVMArchs &amp;nbsp;&lt;/i&gt;&lt;/span&gt;y agregamos los siguientes valores&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;lt;key&amp;gt;JVMArchs&amp;lt;/key&amp;gt;&lt;br /&gt;&amp;lt;array&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;string&amp;gt;i386&amp;lt;/string&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;string&amp;gt;x86_64&amp;lt;/string&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;string&amp;gt;ppc&amp;lt;/string&amp;gt;&lt;br /&gt;&amp;lt;/array&amp;gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4. Finalmente salvamos el archivo (Cmd+S) y salimos de la aplicación (Cmd+q).&lt;br /&gt;&lt;br /&gt;5. Lanzamos de nuevo el ejecutable de Idea y listo. Para verificar podemos utilizar el menú de "About" para visualizar el JVM con que Idea se esta ejecutando.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-4481901943720901438?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/4481901943720901438/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=4481901943720901438' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/4481901943720901438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/4481901943720901438'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2011/04/intellijidea-en-mac-osx-snow-leopard-en.html' title='IntellijIDEA en Mac OSX Snow Leopard en modo de 64bits'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-8851464899375565723</id><published>2011-02-11T12:09:00.002-06:00</published><updated>2011-02-11T12:26:49.817-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='jee'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='appfuse'/><title type='text'>Comparación de Web Frameworks para Java</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Comparación de Web Frameworks para Java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Es realmente intrigante cada vez que se nos asigna un proyecto Web basado en Java, a veces pareciera como si tuvieramos que empezar de nuevo una y otra vez, el concepto&amp;nbsp;de encapsulamiento queda en el pasado y cada nueva tecnología a veces nos hace&amp;nbsp;retroceder. En un post anterior hablaba acerca de un &lt;a href="http://ceqm.blogspot.com/2009/06/comparacion-de-tecnologias-rad.html"&gt;Ecosistema Agil&lt;/a&gt;&amp;nbsp;para desarrollo Java, sin embargo la adaptabilidad del ecosistema depende de la tecnología de servidor a la que estemos amarrados, ya para que una aplicación sea realmente "Cholesterol Free" nuestra arquitectura requerirá de trabajo más elaborado, dicho de otra manera: La arquitectura e Infraestructura de nuestras aplicaciones deben de ser compatibles con el servidor de aplicaciones y base de datos a utilizar. ¿Pero que sucede en el caso de cual es nuestro framework de desarrollo ideal?&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;El Framework Ideal&lt;/span&gt;&lt;br /&gt;Respecto a la elección del Web Framework ideal, y considerando que existen muchos allá afuera en el mercado, tales como: Flex, Grails, Play!, Stripes, Wicket, Tapestry, Lift Struts 1 y 2, Rails, Face, Vaading, Spring, entre otros. Es necesario considerar o tener mucho tiempo para evaluarlos.&amp;nbsp;Para&amp;nbsp;ello&amp;nbsp;podemos&amp;nbsp;realizar&amp;nbsp;el&amp;nbsp;siguiente&amp;nbsp;método&amp;nbsp;o&amp;nbsp;proosición en 3 simples pasos.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Paso&amp;nbsp;1)&amp;nbsp;Tipificar&lt;/span&gt;&lt;br /&gt;Considerar y comparar las características de ellos para ubicarlo en que categoría es posible tipificarlo, para ello es importante tomar en cuenta la tipificación del proyecto, para ello debemos preguntamos &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Consumer&lt;/b&gt;: ¿Estamos haciendo un sitio dirigido al consumidor?&lt;/li&gt;&lt;li&gt;&lt;b&gt;Rich Media&lt;/b&gt;: ¿Estamos haciendo Un sitio dirigido a medios (Rico en gráficos, videos, redes sociales, etc) ?&lt;/li&gt;&lt;li&gt;&lt;b&gt;Application&lt;/b&gt;: ¿Estamos haciendo Una aplicación orientada a datos?&lt;/li&gt;&lt;li&gt;&lt;b&gt;Long Live&lt;/b&gt;: ¿Estamos haciendo una aplicacion que estará en producción de 5, 10 o más años?&lt;/li&gt;&lt;li&gt;&lt;b&gt;Legacy &lt;/b&gt;: ¿Estamos haciendo una aplicación Legacy Backend (Conectores del tipo Queue, Mainframes, etc)?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Paso&amp;nbsp;2)&amp;nbsp;Ubicar&lt;/span&gt;&lt;br /&gt;Una vez tipificado con lo anterior, debemos tomar en cuenta que los Web Frameworks&amp;nbsp;se han dividido y agrupado en las siguientes principales categorías:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Request Based Frameworks (Struts, Spring MVC, Rails, Stripes)&lt;/li&gt;&lt;li&gt;Component Based Frameworks (JSF, Tapestry, GWT)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Rich Internet Applications (Flex, Rails)&lt;/li&gt;&lt;li&gt;Orientados a Rapid Development and Deploy (Grails, Rails)&lt;/li&gt;&lt;/ul&gt;Por tanto es posible ubicarlos de la siguiente manera&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td&gt;&lt;/td&gt;   &lt;td&gt;&lt;div align="center"&gt;&lt;b&gt;Request Based Frameworks&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;&lt;b&gt;Component Based Frameworks&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;td nowrap="nowrap"&gt;&lt;div align="center"&gt;&lt;b&gt;Rich Internet Applications&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;&lt;b&gt;Rapid Development&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;&lt;div align="right"&gt;&lt;b&gt;Consumer&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td&gt;&lt;div align="center"&gt;B&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;M&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;M&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;MB&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;&lt;div align="right"&gt;&lt;b&gt;Rich Media&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td&gt;&lt;div align="center"&gt;B&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;M&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;MB&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;B&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;&lt;b&gt;Application&lt;/b&gt;&lt;/td&gt;   &lt;td&gt;&lt;div align="center"&gt;MB&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;B&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;MM&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;B&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;&lt;div align="right"&gt;&lt;b&gt;Long Live&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td&gt;&lt;div align="center"&gt;MB&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;M&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;M&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;M&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;&lt;div align="right"&gt;&lt;b&gt;Legacy&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td&gt;&lt;div align="center"&gt;B&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;MM&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;MM&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="center"&gt;MM&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Donde MM = Muy Malo, M = MALO, B = BUENO, MB = MUY BUENO&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Paso&amp;nbsp;3)&amp;nbsp;Calificar&lt;/span&gt;&lt;br /&gt;Ya ubicado nuestro en la tabla anterior tomamos los frameworks disponibles y los probamos, uno por uno,una pequeña aplicación, con el fin de documentar en una&amp;nbsp;matriz, calficar y finalizar con un resumen de cual es el que más se adapta a nuestro proyecto. En esta etapa deben considerarse también si nuestro proyecto necesita características tales como:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Facilidad de Uso&lt;/li&gt;&lt;li&gt;Curva de Aprendisaje&lt;/li&gt;&lt;li&gt;Comunidad activa o pasiva&lt;/li&gt;&lt;li&gt;Futuro del Proyecto&lt;/li&gt;&lt;li&gt;La escabilidad, alto tráfico, demanda&lt;/li&gt;&lt;li&gt;Sistema de Plantillas&lt;/li&gt;&lt;li&gt;Componentes Disponibles&lt;/li&gt;&lt;li&gt;AjAX&lt;/li&gt;&lt;li&gt;Soporte de Plugins&lt;/li&gt;&lt;li&gt;Soporte de pruebas unitarias&lt;/li&gt;&lt;li&gt;i18m y I10n&lt;/li&gt;&lt;li&gt;Validación&lt;/li&gt;&lt;li&gt;Soporte Multilenguaje&lt;/li&gt;&lt;li&gt;Calidad de Documentación&lt;/li&gt;&lt;li&gt;Literatura&lt;/li&gt;&lt;li&gt;Soporte REST&lt;/li&gt;&lt;li&gt;Soporte Mobil&lt;/li&gt;&lt;/ul&gt;Con esos 3 pasos podemos identificar "casi" cualquier tipo de framework que se adapte a nuestros proyectos, independientemente de la arquitectura/infraestructura que utilicemos, pero vale la pena mencionar que aparentemente la batalla de los frameworks esta encabezada por Spring MVC, GWT, Ruby on Rails, Wicket y Struts 2. Y con el paso del tiempo me he dado cuenta que esta variación sube o baja, pero en general y en mi opinión personal, hay un factor crucial final en la consideración: Una vez selecciona nuestra porción de frameworks útiles para nuestro proyecto, el gusto y/o afinidad entra en juego. Si nuestra fuerza de trabajo o programación gusta más de Struts vs Spring MVC y el proyecto aplica para ambas, pues&amp;nbsp;lógicamente&amp;nbsp;debe seleccionarse la primera para aumentar el desempeño o motivación del equipo. Si algo funciona cambialo solo cuando sea estrictamente necesario.&lt;br /&gt;&lt;br /&gt;Referencias&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks"&gt;Excelente Presentación de Matt Raible&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://spreadsheets.google.com/pub?key=0AtkkDCT2WDMXdC1HOEtnUHpCejJMbUhGeGJWUmh5dVE&amp;amp;hl=en&amp;amp;output=html"&gt;Matriz de Comparación de Web Frameworks&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-8851464899375565723?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/8851464899375565723/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=8851464899375565723' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/8851464899375565723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/8851464899375565723'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2011/02/comparacion-de-web-frameworks-para-java.html' title='Comparación de Web Frameworks para Java'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-1785217890868172960</id><published>2010-10-05T17:33:00.002-06:00</published><updated>2010-10-05T17:33:20.520-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><title type='text'>Grails 1.3.5 Released</title><content type='html'>El día de ayer 4 de Octubre de 2010, fue liberada la ultima version establa de Grails 1.3.5, corrige problemas de URL's , permite parametrizar el JVM de Tomcat para el modo de desarrollo, mejoras en GORM (ignoreCase:true) entre otros.&lt;br /&gt;&lt;br /&gt;Más información en&lt;br /&gt;&lt;br /&gt;&lt;a href="http://grails.org/1.3.5+Release+Notes"&gt;http://grails.org/1.3.5+Release+Notes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-1785217890868172960?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/1785217890868172960/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=1785217890868172960' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/1785217890868172960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/1785217890868172960'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/10/grails-135-released.html' title='Grails 1.3.5 Released'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-6217147381283277384</id><published>2010-10-05T16:24:00.001-06:00</published><updated>2010-10-05T16:24:48.089-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='commons'/><category scheme='http://www.blogger.com/atom/ns#' term='utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><title type='text'>Apache Common en Grails</title><content type='html'>&lt;b&gt;Apache Commons en Grails&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Algo tan simple como importar librerias estáticas en Grails a veces no es percibido a simple vista, por ejemplo para validar cadenas, numeros, etc. podemos importar el poderoso Apache Commons StringUtils dentro de Grails estáticamente ya que vienen como parte de las librerías estandar de Grails en sí, por ejemplo:&lt;br /&gt;&lt;br /&gt;import static org.apache.commons.lang.StringUtils.*&lt;br /&gt;&lt;br /&gt;class DefaultController {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; def index = {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // filtar por tipo de bien&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (isNotBlank(params?.id))&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; println params?.id&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;a href="http://commons.apache.org/lang/api-release/index.html"&gt;http://commons.apache.org/lang/api-release/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-6217147381283277384?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/6217147381283277384/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=6217147381283277384' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6217147381283277384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6217147381283277384'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/10/apache-common-en-grails.html' title='Apache Common en Grails'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-831762166171055496</id><published>2010-06-08T19:28:00.004-06:00</published><updated>2010-06-08T19:32:42.372-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><title type='text'>Multithreading, Threads y Concurrency en Java, excelente articulo</title><content type='html'>Un poco de teoría de como utilizar estas obscuras técnicas,&amp;nbsp;aprendamos un poco de teoria con excelentes ejemplos:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tutorials.jenkov.com/java-concurrency/index.html"&gt;http://tutorials.jenkov.com/java-concurrency/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-831762166171055496?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/831762166171055496/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=831762166171055496' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/831762166171055496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/831762166171055496'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/06/multithreading-threads-y-concurrency-en.html' title='Multithreading, Threads y Concurrency en Java, excelente articulo'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-4996683237775006531</id><published>2010-05-14T09:45:00.001-06:00</published><updated>2010-05-14T10:05:23.208-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><title type='text'>Bye, Bye Sun....</title><content type='html'>Sin palabras. :'(&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blogs.sun.com/jag/resource/SunRIP.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; cursor: pointer; width: 421px; height: 315px;" src="http://blogs.sun.com/jag/resource/SunRIP.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://blogs.sun.com/jag/entry/so_long_old_friend"&gt;http://blogs.sun.com/jag/entry/so_long_old_friend&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-4996683237775006531?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/4996683237775006531/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=4996683237775006531' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/4996683237775006531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/4996683237775006531'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/03/bye-bye-sun.html' title='Bye, Bye Sun....'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-1831015815959494171</id><published>2010-05-12T09:57:00.003-06:00</published><updated>2010-05-12T10:51:14.640-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cassandra'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>La Base de Datos Social, ¿Qué es Apache Cassandra?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://cassandra.apache.org/media/img/cassandra_logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="80" src="http://cassandra.apache.org/media/img/cassandra_logo.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;¿Base de Datos Social? &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;El proyecto &lt;a href="http://cassandra.apache.org/"&gt;Apache Cassandra&lt;/a&gt;, mantenido por Apache Foundation es una base de datos &lt;b&gt;No Relacional&lt;/b&gt;,&amp;nbsp; basada en un modelo basado en columnas (llaves y valores). Heredado o donado por Facebook Corporation en 2008 (lo cual lo hace interesante para muchos de nosotros, tomando en cuenta la congestión transaccional de millones de usuarios de una de las más populares redes sociales), Cassandra es tambien utilizado por otras redes, tales como Digg, Twitter, Reddit, entre otros, y es también utlizados por compañías que manejan grandes cantidades de información tales como Rackspace, Cloudkik, etc. Algunes de ellas poseen clusters con más de 100TB de datos sobre más de 150 nodos. De hecho, la naturaleza de Cassandra es que esta distribuido sobre Nodos, los datos son automaticametne replicados y los nodos pueden ser removidos y adicionados sin reiniciar ningún servicio, es decir sin downtime.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;¿Basado en Java?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Completamente, Cassandra esta 100% desarrollado con Java. Efectivamente, los detractores del rendimiento del JVM tienen un problema aquí. &lt;b&gt;Cassandra esta 100% desarrollado, distribuido, publicado, ejecutado con herramientas Java&lt;/b&gt;. Realmente la tecnología y arquitectura bajo Cassandra es la que hace que el rendimiento sea superior a otras bases de datos basadas en Java, ya que esta diseñada exclusivamente para &lt;b&gt;DATOS&lt;/b&gt;, no posee relaciones, modelos, vistas, sql, triggers, ya que estos no son el camino ni el destino del proyecto. Tomando en cuenta también que la arquitectura, tecnología y algoritmos del proyecto estan basados en estudios bien fundamentados de terceros, tales como: El &lt;a href="http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf"&gt;Teorema de CAP&lt;/a&gt; de la Universidad de Berkeley, &lt;a href="http://en.wikipedia.org/wiki/BigTable"&gt;BigTable&lt;/a&gt; un sistema de datos estructurados nada más y nada menos que el DBMS de Google y también &lt;a href="http://arstechnica.com/old/content/2007/10/amazon-reveals-its-distributed-storage-dynamo.ars"&gt;Dynamo&lt;/a&gt; la fuente de datos Key-Value de Amazon, entre otros, hacen que los fundamentos del proyecto esten basados y orientados a rendimiento de alto nivel.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Conectividad&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;El API de bajo nivel &lt;a href="http://incubator.apache.org/thrift/"&gt;Thrift&lt;/a&gt;, es el cliente de conectividad nativo de Cassandra, por lo tanto es el más rápido y eficaz. Thrift API/RPC es un Framework que permite definir Tipos de Datos, Estructuras y Servicio en un formato de archivo estandar para diferentes lenguajes (java, python, c, c++, perl, php,etc), que a es enviado y recibido a través de RPC, sin necesidad de código de serialización/deserialización; todo esto a través de Sockets (Back to the basics...again). Eventualmente se distribuiran API's de conectividad de más alto nivel, de hecho ya existen algunas, sin embargo utilizar un API de alto nivel sin conocer Thrift sería como utilizar Hibernate sin conocer JDBC. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ejemplo, Insertando una Tupla con Thrift API&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; import java.util.List;   &lt;br /&gt;  import java.io.UnsupportedEncodingException;   &lt;br /&gt;  import org.apache.thrift.transport.TTransport;   &lt;br /&gt;  import org.apache.thrift.transport.TSocket;   &lt;br /&gt;  import org.apache.thrift.protocol.TProtocol;   &lt;br /&gt;  import org.apache.thrift.protocol.TBinaryProtocol;   &lt;br /&gt;  import org.apache.thrift.TException;   &lt;br /&gt;  import org.apache.cassandra.service.*;   &lt;br /&gt;  public class CClient   &lt;br /&gt;  {   &lt;br /&gt;   public static void main(String[] args)   &lt;br /&gt;   throws TException, InvalidRequestException, UnavailableException, UnsupportedEncodingException, NotFoundException   &lt;br /&gt;   {   &lt;br /&gt;    // conexion a socket thrift   &lt;br /&gt;    TTransport tr = new TSocket("localhost", 9160);   &lt;br /&gt;    TProtocol proto = new TBinaryProtocol(tr);   &lt;br /&gt;    Cassandra.Client client = new Cassandra.Client(proto);   &lt;br /&gt;    // abrir transporte   &lt;br /&gt;    tr.open();   &lt;br /&gt;    String key_user_id = "1";   &lt;br /&gt;    String key_space = "Keyspace1";   &lt;br /&gt;    // insertando un registro (dos columnas: nombre y edad)   &lt;br /&gt;    long timestamp = System.currentTimeMillis();   &lt;br /&gt;    client.insert(key_space,   &lt;br /&gt;       key_user_id,   &lt;br /&gt;       new ColumnPath("Standard1", null, "nombre".getBytes("UTF-8")),   &lt;br /&gt;       "Juan Perez".getBytes("UTF-8"),   &lt;br /&gt;       timestamp, ConsistencyLevel.ONE);   &lt;br /&gt;    client.insert(key_space,   &lt;br /&gt;       key_user_id,   &lt;br /&gt;       new ColumnPath("Standard1", null, "edad".getBytes("UTF-8")),   &lt;br /&gt;       "30".getBytes("UTF-8"),   &lt;br /&gt;       timestamp, ConsistencyLevel.ONE);    &lt;br /&gt;    // cerrar transporte   &lt;br /&gt;    tr.close();   &lt;br /&gt;  }   &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre dir="ltr" id="CA-4e254bdb6d5ba67d991196413b14ba10f9636dd2" lang="en" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Más Información&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://cassandra.apache.org/"&gt;Apache Cassandra&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.apache.org/cassandra/ThriftExamples"&gt;http://wiki.apache.org/cassandra/ThriftExamples&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://incubator.apache.org/thrift/"&gt;http://incubator.apache.org/thrift/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/cassandra-java-client/"&gt;http://code.google.com/p/cassandra-java-client/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-1831015815959494171?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/1831015815959494171/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=1831015815959494171' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/1831015815959494171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/1831015815959494171'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/05/la-base-de-datos-social-que-es-apache.html' title='La Base de Datos Social, ¿Qué es Apache Cassandra?'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-833478812975143808</id><published>2010-05-10T23:14:00.007-06:00</published><updated>2010-05-11T08:51:34.577-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='servidores'/><category scheme='http://www.blogger.com/atom/ns#' term='jee'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>Monitor / Estadisticas para Tomcat 5.X</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.subsecret.dk/pictures/tomcat.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 130px; height: 92px;" src="http://www.subsecret.dk/pictures/tomcat.png" alt="" border="0" /&gt;&lt;/a&gt;El glorioso y perdurable Tomcat V, es una herramienta simple, para nada menospreciable, que se encuentra en la mayoría del "ToolBox" de un desarrollador/programador Java EE; sin importar el nivel. Ya que su naturaleza "WebApp Container" es a veces lo suficientemente simple, sencillo y eficaz para publicaciones en desarrollo y también producción de aplicaciones basadas en Web. Tomcat es tan bueno, hasta donde lo permitimos. Soporta Clusters, JNDI DataSources, Hot Deployment, etc. Características lo suficientemente buenas para un entorno que no necesita todo el colesterol de otros servidores de aplicaciones, tales como Glassfish, JBoss, Websphere, OAS, etc. (Los dos primeros utilizan Tomcat internamente).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.lambdaprobe.org/d/img/the-probe-logo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 95px; height: 44px;" src="http://www.lambdaprobe.org/d/img/the-probe-logo.gif" alt="" border="0" /&gt;&lt;/a&gt;En fin, Tomcat es muy bueno, pero comparado con los servidores de aplicaciones comerciales, Tomcat carece de una herramienta administrativa o de monitoreo, o al menos el "Manager" y "Admin" lucen como aplicaciones de prueba o de aficionados comparado con las consolas administrativas de los anteriormente mencionados. Sin embargo, existen para eso, para pruebas. He ahí donde entra una excelente aplicación Web, llamada &lt;b&gt;Lambda Probe&lt;/b&gt;, es un WAR que contiene las características necesarias para hacer de complemente de Tomcat. Posee monitoreo, dashboard, visor de memoria del JVM, WAR Deployment, Status, Restart, JNDI Monitor, Quick Check, entre otros.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Vale la pena darle una oportunidad. Es tan buena la aplicación, que simplemente descargamos el WAR, lo publicamos en Tomcat y listo. Lambda Probe utiliza la seguridad integrada de Tomcat (tomcat-users.xml) para la seguridad de la misma. Y finalmente lo más importante, &lt;b&gt;es libre&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.lambdaprobe.org/d/index.htm"&gt;http://www.lambdaprobe.org/d/index.htm&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.lambdaprobe.org/d/screenshots.shtml"&gt;http://www.lambdaprobe.org/d/screenshots.shtml&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.lambdaprobe.org/d/download.htm"&gt;http://www.lambdaprobe.org/d/download.htm&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-833478812975143808?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/833478812975143808/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=833478812975143808' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/833478812975143808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/833478812975143808'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/05/monitor-estadisticas-para-tomcat-5x.html' title='Monitor / Estadisticas para Tomcat 5.X'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-6756868393933903842</id><published>2010-05-05T16:25:00.004-06:00</published><updated>2010-05-05T16:45:12.381-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='servidores'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='opensolaris'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='jdk'/><title type='text'>Tomcat 5.5 + OpenSolaris</title><content type='html'>Ayer por la noche, tuve la oportunidad de instalar Tomcat 5.5 bajo OpenSolaris, al analizar las posibles alternativas, me decidí a probar la distribución de CoolStack, la cual me ha funcionado de maravilla. He aquí unos simples pasos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Prerequisitos&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Tener el JDK instalado&lt;/li&gt;&lt;li&gt;Acceso de super usuario (root, en mi caso)&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Instalación&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Descargar el archivo CSK&lt;span class="search_hit"&gt;tomcat&lt;/span&gt;bundle_1.3.1_i386.pkg.bz2&lt;br /&gt;este puede ser descargado desde &lt;a href="http://www.sunfreeware.com/ftp/pub/freeware/CSK/"&gt;http://www.sunfreeware.com/ftp/pub/freeware/CSK/&lt;/a&gt;&lt;br /&gt;&lt;pre class="code"&gt;wget &lt;a href="http://www.sunfreeware.com/ftp/pub/freeware/CSK/CSKtomcatbundle_1.3.1_i386.pkg.bz2"&gt;http://www.sunfreeware.com/ftp/pub/freeware/CSK/CSKtomcatbundle_1.3.1_i386.pkg.bz2&lt;/a&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Descomprimir el archivo utilizando bzip2 (puede ser en un directorio temporal, si no se va a utilizar el paquete)&lt;br /&gt;&lt;pre class="code"&gt;bzip2 -d CSK&lt;span class="search_hit"&gt;tomcat&lt;/span&gt;bundle_1.3.1_i386.pkg.bz2&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Instalar el Paquete utilizando el comando&lt;br /&gt;&lt;pre class="code"&gt;pkgadd -d CSK&lt;span class="search_hit"&gt;tomcat&lt;/span&gt;bundle_1.3.1_i386.pkg&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Una vez instalado el paquete, es necesario configurar el servicio con ciertos parametros de ajuste de memoria si no queremos tener problemas con el JVM en nuestro servidor. Para ellos utilizamos los siguientes comandos:&lt;br /&gt;&lt;pre class="code"&gt;svccfg -s svc:/network/http:&lt;span class="search_hit"&gt;tomcat&lt;/span&gt;&lt;span class="search_hit"&gt;5&lt;/span&gt;-csk setenv -m start JAVA_OPTS -Xmx64m&lt;br /&gt;svccfg -s svc:/network/http:&lt;span class="search_hit"&gt;tomcat&lt;/span&gt;&lt;span class="search_hit"&gt;5&lt;/span&gt;-csk setenv -m stop JAVA_OPTS -Xmx64m&lt;br /&gt;&lt;/pre&gt;Donde  -Xmx64m nos indica que al iniciar el servicio tomcat5, el JVM utilizaría un máximo de 64MB's de memoria, si nuestras aplicaciones necesitan más memoria, éste parámetro debe de ser ajustado a sus necesidades.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Para iniciar y/o detener el servicio, podemos utilizar los siguientes comandos&lt;br /&gt;&lt;pre class="code"&gt;svcadm enable &lt;span class="search_hit"&gt;tomcat&lt;/span&gt;&lt;span class="search_hit"&gt;5&lt;/span&gt;-csk&lt;br /&gt;svcadm disable &lt;span class="search_hit"&gt;tomcat&lt;/span&gt;&lt;span class="search_hit"&gt;5&lt;/span&gt;-csk&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Finalmente, para verificar que el servicio se esta ejecutando, podemos utilizar&lt;br /&gt;&lt;pre class="code"&gt;svcs -a | grep &lt;span class="search_hit"&gt;tomcat&lt;/span&gt;&lt;span class="search_hit"&gt;5&lt;/span&gt;-csk&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;Realmente estoy bastante satisfecho del rendimiento de Java y Tomcat para OpenSolaris, me resulta más práctico utilizar este sistema operativo, que de alguna manera esta orientado a Java, ya que cuenta exactamente con los paquetes que necesito, que incluye paquetes comerciales, tales como el JDK de Sun Microsystems, y esto hace mi vida más felíz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-6756868393933903842?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/6756868393933903842/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=6756868393933903842' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6756868393933903842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6756868393933903842'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/05/tomcat-55-opensolaris.html' title='Tomcat 5.5 + OpenSolaris'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-2885375671497043302</id><published>2010-04-12T11:17:00.005-06:00</published><updated>2010-04-12T12:09:08.057-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><title type='text'>Más Cambios de Oracle para Sun / Java</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blogs.sun.com/jag/resource/SouthParkJAG-small.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 142px; height: 197px;" src="http://blogs.sun.com/jag/resource/SouthParkJAG-small.png" alt="" border="0" /&gt;&lt;/a&gt;Aparentemente los cambios de políticas y tendences de los productos Sun ahora de Oracle, no dejan de impresionarnos, hoy por la mañana recibi la noticias de que &lt;a href="http://blogs.sun.com/jag/"&gt;James Gosling&lt;/a&gt; (El Creador o Padre de Java) deja la compañías por motivos personales y profesionales, no creo que esto sea bueno para el futuro a mediano plazo de Java, más que tecnológicamente, la presencia de Gosling garantizaba cierta seriedad en la participación de la comunidad.&lt;br /&gt;&lt;br /&gt;Por otro lado, Solaris ya no será gratis. Oracle anuncia que a partir de este mes, la versión de Solaris 10 será gratuita durante los primeros 90 días de su uso, y será necesario pagar licencia despues de cumplirse dicho período. Esto desconcierta especialmente a la comunidad de Open Solaris, la cual seguirá igual gracias a su licenciamiento CDDL, pero las reglas del juego no estan definidas.&lt;br /&gt;&lt;br /&gt;Para más información&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.fayerwayer.com/2010/04/el-padre-de-java-abandona-oracle/"&gt;http://www.fayerwayer.com/2010/04/el-padre-de-java-abandona-oracle/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.fayerwayer.com/2010/03/solaris-dejara-de-ser-gratuito-por-decision-de-oracle/"&gt;http://www.fayerwayer.com/2010/03/solaris-dejara-de-ser-gratuito-por-decision-de-oracle/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://arstechnica.com/open-source/news/2010/03/solaris-10-no-longer-free-as-in-beer-now-a-90-day-trial.ars"&gt;http://arstechnica.com/open-source/news/2010/03/solaris-10-no-longer-free-as-in-beer-now-a-90-day-trial.ars&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-2885375671497043302?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/2885375671497043302/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=2885375671497043302' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/2885375671497043302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/2885375671497043302'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/04/mas-cambios-de-oracle-para-sun-java.html' title='Más Cambios de Oracle para Sun / Java'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-6021308062124596012</id><published>2010-04-12T09:55:00.004-06:00</published><updated>2010-05-12T10:49:59.366-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='commons'/><category scheme='http://www.blogger.com/atom/ns#' term='jakarta'/><category scheme='http://www.blogger.com/atom/ns#' term='utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Base Commons con Apache Maven</title><content type='html'>La mayoría de los proyectos necesitan una base de funciones comunes de manipulación de cadenas, numericas, fechas, codificacion, validacion, etc.  Apache Commons es una rica fuenta de estas funciones y material base para no reinventar la rueda.  Para más información ver el siguiente excelente artículo &lt;a href="http://onjava.com/pub/a/onjava/2004/12/22/jakarta-gems-1.html"&gt;http://onjava.com/pub/a/onjava/2004/12/22/jakarta-gems-1.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Si utilizamos Apache Maven, podemos utilizar los commons con las siguiente dependencias&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; &lt;br /&gt;      &amp;lt;dependency&amp;gt;  &lt;br /&gt;           &amp;lt;groupId&amp;gt;commons-beanutils&amp;lt;/groupId&amp;gt;  &lt;br /&gt;           &amp;lt;artifactId&amp;gt;commons-beanutils&amp;lt;/artifactId&amp;gt;  &lt;br /&gt;           &amp;lt;version&amp;gt;1.8.2&amp;lt;/version&amp;gt;  &lt;br /&gt;           &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;  &lt;br /&gt;           &amp;lt;/dependency&amp;gt;  &lt;br /&gt;      &amp;lt;dependency&amp;gt;  &lt;br /&gt;           &amp;lt;groupId&amp;gt;commons-codec&amp;lt;/groupId&amp;gt;  &lt;br /&gt;           &amp;lt;artifactId&amp;gt;commons-codec&amp;lt;/artifactId&amp;gt;  &lt;br /&gt;           &amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt;  &lt;br /&gt;           &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;  &lt;br /&gt;      &amp;lt;/dependency&amp;gt;  &lt;br /&gt;      &amp;lt;dependency&amp;gt;  &lt;br /&gt;           &amp;lt;groupId&amp;gt;commons-collections&amp;lt;/groupId&amp;gt;  &lt;br /&gt;           &amp;lt;artifactId&amp;gt;commons-collections&amp;lt;/artifactId&amp;gt;  &lt;br /&gt;           &amp;lt;version&amp;gt;3.2.1&amp;lt;/version&amp;gt;  &lt;br /&gt;           &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;  &lt;br /&gt;      &amp;lt;/dependency&amp;gt;  &lt;br /&gt;      &amp;lt;dependency&amp;gt;  &lt;br /&gt;           &amp;lt;groupId&amp;gt;commons-lang&amp;lt;/groupId&amp;gt;  &lt;br /&gt;           &amp;lt;artifactId&amp;gt;commons-lang&amp;lt;/artifactId&amp;gt;  &lt;br /&gt;           &amp;lt;version&amp;gt;2.4&amp;lt;/version&amp;gt;  &lt;br /&gt;           &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;  &lt;br /&gt;      &amp;lt;/dependency&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-6021308062124596012?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/6021308062124596012/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=6021308062124596012' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6021308062124596012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6021308062124596012'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/04/base-commons-con-apache-maven.html' title='Base Commons con Apache Maven'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-1569549957864304469</id><published>2010-04-09T12:18:00.006-06:00</published><updated>2010-04-12T12:06:16.742-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><title type='text'>En paz descanses Felipe....</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.cejug.org/wp-content/uploads/2010/03/FelipeGaucho.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 270px; height: 319px;" src="http://www.cejug.org/wp-content/uploads/2010/03/FelipeGaucho.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;QEPD&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este pasado Jueves 5 de Marzo, fallece uno de los grandes de Java en America Latina, Felipe Gaucho, fundador de CEJUG y gran activista del mundo JEE.  Condelencias para su familia y siempre te recordaremos.&lt;br /&gt;&lt;br /&gt;Su ultimo POST del blog fue un dia antes de su muerte.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.java.net/blogs/felipegaucho"&gt;http://www.java.net/blogs/felipegaucho&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mas Info&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cejug.org/2010/03/06/noticia-triste-para-o-java-no-brasil-e-o-ceara/"&gt;http://www.cejug.org/2010/03/06/noticia-triste-para-o-java-no-brasil-e-o-ceara/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-1569549957864304469?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.sun.com/theaquarium/entry/remembering_felipe_ga%C3%BAcho' title='En paz descanses Felipe....'/><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/1569549957864304469/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=1569549957864304469' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/1569549957864304469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/1569549957864304469'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/04/en-paz-descanses-felipe.html' title='En paz descanses Felipe....'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-6129508435670121730</id><published>2010-03-02T16:38:00.004-06:00</published><updated>2010-05-12T08:55:59.800-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cassandra'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='jdbc'/><title type='text'>Empiezan los cambios....Apache Cassandra</title><content type='html'>Todo lo que empieza tiene que terminar (SUN It's All Your Fault), al parecer muchas de las redes sociales (como referentes de alto trafico) estan migrando y "dejando" de utilizar MySQL como base de datos relacional y estan migrando a Apache Cassandra.&lt;br /&gt;&lt;br /&gt;Apache Cassandra es un gestor de datos, no-relacional y no-sql, utiliza un estilo denominado BigTable y esta diseñada para guardar campos-valores, lo que permite dinamismo en el diseño, pero pérdida para el paradigma relacional de estricta tipificación.&lt;br /&gt;&lt;br /&gt;Como muchos proyectos nuevos tiene fanáticos y detractores, en lo personal, aplaudo una base de datos no-relacional ya que hay sistemas que necesitan personalización de usuarios, por ejemplo un formulario dinámico, para lo cual más de una vez he diseñado tablas campo-valor. Asimismo existen programadores que trabajan con mentalidad Documental ( Lotus Notes Fans, You're Back !!! ) y posiblemente les guste&lt;br /&gt;trabajar con una versión evolucionda de Cassandra.&lt;br /&gt;&lt;br /&gt;Sitio Web&lt;br /&gt;&lt;a href="http://incubator.apache.org/cassandra/"&gt;http://incubator.apache.org/cassandra/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Clientes (PHP Y JAVA Incluidos)&lt;br /&gt;&lt;a href="http://wiki.apache.org/cassandra/ClientExamples"&gt;http://wiki.apache.org/cassandra/ClientExamples&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-6129508435670121730?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/6129508435670121730/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=6129508435670121730' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6129508435670121730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6129508435670121730'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/03/empiezan-los-cambiosapache-cassandra.html' title='Empiezan los cambios....Apache Cassandra'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-7519389321555516549</id><published>2010-03-01T15:15:00.009-06:00</published><updated>2010-03-02T16:29:08.824-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='generic'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='dao'/><title type='text'>Objetos de Acceso de Datos Genéricos Parte I</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Sobre los DAO's (Infamous DAO's)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Los famosos DAO's, (Data Access Objects)...cualquier nuevo estudiante informático o profesional ha escuchado o alguna lección sobre las capas que una aplicación puede tener: capa de datos, capa de lógica de negocios, capa de presentación entre otros, conocidas tambien como aplicaciones multicapas (existe algún sistema mono-capa ???), y entre tantas capas se toma un patron de acceso de datos, una parte fundamental de una aplicación de datos, ¿Que tanto es necesario saber de DAO's? Un DAO puede resumirse como el factor de un programa que gestione los datos de una entidad, tales como operaciones CRUD's y Finders. Esto puede parecer historia comparado con los nuevos motores de persistencia tales como JPA y EJB3, sin embargo, su desconocimiento puede acarrear graves errores a la hora de gestionar la información de las bases de datos relaciones, problemas de transaccionabilidad, atomicidad, isolación y peor aún, si se ha utilizado un "Wizard" para dicha meta.&lt;br /&gt;&lt;br /&gt;Efectivamente en la actualidad, los DAO's se dan como hecho, algo que posiblemente se debe dar por entendido, sin embargo, en una aplicación pequeña que gestione información, fácilmente podemos examinar unas 10 0 15 entidades de base de datos, los DAOs son el puento entre los datos y el mundo de objetos. El rendimiento de un DAO puede afectar en gran medida el rendimiento global de nuestras aplicaciones. Asimismo, "hacer" DAO's es una tarea no solo engorrosa sino también aburrida, y por lo tanto propensa a errores. La solución que he tomado (y muchos otros más) es generalizar estas aburridas operaciones en algun concentrador de DAO's o dicho de otra manera GENERALIZAR un DAO para reutilizarlo en las comunes operaciones CRUD's.&lt;br /&gt;&lt;br /&gt;Vale la pena mencionar, antes de entrar en materia, que la razón de un DAO, es AGREGAR, ACTUALIZAR, ELIMINAR y CONSULTAR DATOS. No se debe de realizar operaciones de lógica de negocios en ellos, a pesar de generalizarlo, no debe de sobrecargarse o engordarse con tareas que no corresponde a él. En Java como en otros lenguajes orientados a objetos, es clave la frase "Divide y Vencerás", la idea es factorizar las operaciones a su mínima expresión, y un DAO debe ser la mínima expresión de un CRUFD (CREATE, UPDATE, FIND &amp;amp; DELETE). Operaciones de filtrado, cálculos, isolación, transacciones, operaciones, etc. Deben de ejecutarse en otro patrón, los Objetos de Servicios o DSO's, off-topic, Por ahora.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Hibernate Generic DAO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En este artículo, se muestra como evitar repetir operaciones de DAO's una y otra vez, sin perder los beneficios de tipos (Type Safety) , de hecho todo lo que sería necesario sería definir una interface para cada entidad, y dejar el control a nuestro DAO genérico, todo esto controlado bajo un archivo de configuración de Spring.&lt;br /&gt;&lt;p&gt;El patrón DAO  y sus implementaciones peuden variar considerablemente, sin embargo ciertas caracterísitcas son claves, en este artículo se consideran las siguientes::&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Todo el acceso a datos y su encapsulamiento será a través de DAO's&lt;/li&gt;&lt;li&gt;Cada DAO será responsable para cada una de las entidades, y cada entidad debe tener su propio DAO.&lt;/li&gt;&lt;li&gt;El DAO es el responsable de Crear, Actualizar, Eliminar entidades -- CRUD --&lt;/li&gt;&lt;li&gt;El DAO debe permitir consultas, búsquedas por criterio de las entidades, y retornar listas de entidades ó instancias de las entidades&lt;/li&gt;&lt;li&gt;El DAO no es responsable de manejar transacciones, sesiones, conexiones, estas van gestionadas, fuera del DAO.&lt;/li&gt;&lt;li&gt;Las entidades de la base de datos (Tablas) poseen un identificador unico serializable (AKA Integer, Long, Varchar), en este tutorial no se utilizan llaves compuestas (composites-ids)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;NOTA: En el presente tutorial, se anexará una manera común de gestionar datos utilizando Spring e Hibernate, consolidando información que con el tiempo he recopilado en Internet y utilizado en mis propios sistemas. En el presente tutorial se utilizará Eclipse como IDE, Apache Maven, Spring 2.5 e Hibernate 3. Es necesario tener conocimientos de Interfaces e Implementaciones, Sólidos conocimientos de Abstracción y Herencia, Java Generics, Inyección de Dependencias con Spring Framework y conocer al menos lo básico de Hibernate.&lt;br /&gt;&lt;br /&gt;Ver :&lt;br /&gt;&lt;a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html"&gt;http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/java/library/j-genericdao.html"&gt;http://www.ibm.com/developerworks/java/library/j-genericdao.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/hibernate-generic-dao/"&gt;http://code.google.com/p/hibernate-generic-dao/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-7519389321555516549?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/7519389321555516549/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=7519389321555516549' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/7519389321555516549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/7519389321555516549'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/03/objetos-de-acceso-de-datos-genericos.html' title='Objetos de Acceso de Datos Genéricos Parte I'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-7478479580333761773</id><published>2010-03-01T15:08:00.002-06:00</published><updated>2010-03-01T15:15:05.262-06:00</updated><title type='text'>Drools 5 - The Business Logic integration Platform</title><content type='html'>Ya desde un par de años atrás, le he seguido la pista a los motores de interpretación de reglas, un área que a pesar de no ser tan popular, es la base filosófica de las aplicaciones de tomas de decición o sistemas Expertos.&lt;br /&gt;&lt;br /&gt;Como un fiel seguidor de Hibernate, y aunque mi relación con RedHat y JBoss ha perdido sentimientos, creo que vale la pena revisar esta nueva versión de Drools el motor de Reglas de JBoss, ahora en su versión 5.&lt;br /&gt;&lt;br /&gt;http://www.jboss.org/drools/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-7478479580333761773?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.jboss.org/drools/' title='Drools 5 - The Business Logic integration Platform'/><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/7478479580333761773/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=7478479580333761773' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/7478479580333761773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/7478479580333761773'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2010/03/drools-5-business-logic-integration.html' title='Drools 5 - The Business Logic integration Platform'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-6153427392130528627</id><published>2009-08-18T12:22:00.004-06:00</published><updated>2009-08-18T12:27:52.414-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='jee'/><category scheme='http://www.blogger.com/atom/ns#' term='rad'/><category scheme='http://www.blogger.com/atom/ns#' term='appfuse'/><title type='text'>Appfuse 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://appfuse.org/s/813/1/APF/_/download/userResources/APF/logo"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 203px; height: 75px;" src="http://appfuse.org/s/813/1/APF/_/download/userResources/APF/logo" alt="" border="0" /&gt;&lt;/a&gt;Siempre he sido admirador de AppFuse, creado por Matt Raible, he aprendido infinidad de buenas prácticas desde los inicios del proyecto, desde Ant, Struts, Hibernate, etc. Ahora en la versión 2 parece decirle adiós al Ant y practicamente todo esta basado con Maven.&lt;br /&gt;&lt;br /&gt;Nunca he tenido la oportunidad de utilizarlo para una aplicación en producción, pero siempre ha estado en mi laboratorio y observatorio de buenos proyectos. Y esta versión específicamente vale la pena echarle un ojo.&lt;br /&gt;&lt;br /&gt;Más información sobre el proyecto: &lt;a href="http://appfuse.org/display/APF/Tutorials"&gt;http://appfuse.org/display/APF/Tutorials&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-6153427392130528627?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/6153427392130528627/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=6153427392130528627' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6153427392130528627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6153427392130528627'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2009/08/appfuse-2.html' title='Appfuse 2'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-8469037000746243857</id><published>2009-07-12T19:13:00.005-06:00</published><updated>2009-07-12T19:27:00.240-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>AJAX API's de Google</title><content type='html'>Practicamente en todas las aplicaciones Web basadas en Java, un WAR por ejemplo, se acostumbra que los recursos estáticos, tales como librerías JavaScript, se empaqueten en el WAR ya sea por comodidad o por carecer de un servidor de recursos estáticos dedicado.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.prototypejs.org/" target="_blank"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 298px; height: 92px;" src="http://www.prototypejs.org/images/codesample1.gif" border="0" alt="" /&gt;&lt;/a&gt;Hoy en día (Web 2.0) el JS es tan demandante, que prácticamente es imposible en una aplicación Web orientada a usuarios finales no incluir al menos una librería de JavaScript, especialmente cuando hay mucho AJAX o manipulación de DOM, entre otras cosas.&lt;br /&gt;&lt;br /&gt;Si nuestra aplicación va ser distribuida por Internet, es decir de dominio público, sería de muy buena práctica delegar la carga y tráfico de dichos recursos a servidores dedicados, con un buen soporte de cache, uptime, etc. Y tomando en cuenta esas características comenzé a utilizar el Google AJAX API, el cual me ha sido de mucha utilidad, especialmente porque me gusta trabajar con Prototype + Scriptaculous.&lt;br /&gt;&lt;br /&gt;Una vez incluída la librería de Google AJAX API's ya podemos incluir otras librerías de una manera bastante sencilla, por ejemplo para incluir Prototype + Scriptaculous&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  google.load("prototype", "1.6");&lt;br /&gt;  google.load("scriptaculous", "1.8.2");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Otros colegas fans de JQuery, pueden utilizar algo como esto&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  google.load("jquery", "1.3.1");&lt;br /&gt;  google.load("jqueryui", "1.5.3");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y listo, otra ventaja es el versionamiento de las librerías, el cual podemos parametrizar ya en nuestra aplicación para cambiar de versiones de una manera transparente.&lt;br /&gt;&lt;br /&gt;Visite: &lt;a href="http://code.google.com/intl/es-ES/apis/ajaxlibs/"&gt;http://code.google.com/intl/es-ES/apis/ajaxlibs/&lt;/a&gt; para más información y descargas.&lt;br /&gt;&lt;br /&gt;P.D. Obviamente es HTML puro y por tanto también lo he utilizado en proyectos PHP :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-8469037000746243857?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/8469037000746243857/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=8469037000746243857' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/8469037000746243857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/8469037000746243857'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2009/07/ajax-apis-de-google.html' title='AJAX API&apos;s de Google'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-1376582585606332793</id><published>2009-07-12T19:04:00.004-06:00</published><updated>2009-07-12T19:10:45.117-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='jee'/><category scheme='http://www.blogger.com/atom/ns#' term='rad'/><title type='text'>Artículo sobre Maven - Getting Started</title><content type='html'>Al recuperar mis bookmarks de del.icio.us encontre un Link bastante bueno relacionado con Apache Maven:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://today.java.net/pub/a/today/2007/03/01/building-web-applications-with-maven-2.html"&gt;http://today.java.net/pub/a/today/2007/03/01/building-web-applications-with-maven-2.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En su momento sirve de mucho como inicio para quien desee iniciar con tan buena herramienta, vale mencionar que es ya del 2007 este artículo, sin embargo sigue siendo de mucha utilidad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-1376582585606332793?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/1376582585606332793/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=1376582585606332793' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/1376582585606332793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/1376582585606332793'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2009/07/articulo-sobre-maven-getting-started.html' title='Artículo sobre Maven - Getting Started'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-7412691926468522322</id><published>2009-07-02T11:35:00.002-06:00</published><updated>2009-07-02T11:38:19.914-06:00</updated><title type='text'>NetBeans 6.7 está aquí</title><content type='html'>Bueno NetBeans no se podía quedar atrás, ya esta disponible la versión 6.7 de este poderoso IDE. Realmente aprecio que han mejorado considerablemente el soporte para Apache Maven, Groovy and Grails. Aparentemente han mejorado el rendimiento, y como siempre, NetBeans sigue siendo líder en WYSIWYG tanto para Swing como para Web.&lt;br /&gt;&lt;br /&gt;Visite http://www.netbeans.org/ para más información&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-7412691926468522322?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/7412691926468522322/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=7412691926468522322' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/7412691926468522322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/7412691926468522322'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2009/07/netbeans-67-esta-aqui.html' title='NetBeans 6.7 está aquí'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-6429934253531975914</id><published>2009-06-24T22:06:00.004-06:00</published><updated>2009-06-24T22:09:01.970-06:00</updated><title type='text'>Galileo está aquí</title><content type='html'>El día de hoy ha sido liberado Eclipse Galileo, este release en especial me llama mucho la atención debido a que por fin SWT soporta COCOA, la librería nativa para MacOS Leopard. Por otro lado para las otras plataformas igualmente están consideradas muchas mejoras y pronto anexaré mi evaluación respecto al IDE.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;http://www.eclipse.org&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-6429934253531975914?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/6429934253531975914/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=6429934253531975914' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6429934253531975914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6429934253531975914'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2009/06/galileo-esta-aqui.html' title='Galileo está aquí'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-441049242816134720</id><published>2009-06-22T12:42:00.006-06:00</published><updated>2009-07-02T11:34:24.963-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebs4j'/><title type='text'>EBS4J, Consultoría y Servicios</title><content type='html'>El día de hoy Lunes 22 de Junio, inicia el desarrollo del portal ebs4j, sitio web orientado a brindar consultoría y y entrenamiento de Java y JEE a la pequeña y mediana empresa de El Salvador, el equipo integrado y mi persona espera que este proyecto a corto/mediano plazo tenga el éxito y aprobación necesaria del mercado y atender la demanda actual de servicios profesionales, además de trabajar de la mano con la gente que necesita actualizar y/o mejorar su procesos con las nuevas tecnologías para el beneficio común y social de nuestro país.&lt;br /&gt;&lt;br /&gt;Visite &lt;a href="http://www.ebs4j.com/"&gt;http://www.ebs4j.com/&lt;/a&gt; para más información&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-441049242816134720?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/441049242816134720/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=441049242816134720' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/441049242816134720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/441049242816134720'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2009/06/ebs4j-consultoria-y-servicios.html' title='EBS4J, Consultoría y Servicios'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-6367480097998242928</id><published>2009-06-10T16:18:00.017-06:00</published><updated>2009-06-15T16:39:49.815-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='jee'/><category scheme='http://www.blogger.com/atom/ns#' term='rad'/><title type='text'>Comparación de Tecnologías RAD</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;Rapid Web Application Development, ¿¿¿en JAVA???&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hace ya como 3 o 4 años, he estado investigando sobre un modelo o plataforma para desarrollo rápido de aplicaciones en Java, tomando en cuenta que una de las quejas generales de Java es que toma mucho tiempo realizar tareas relativamente simples en comparación con otros lenguajes, tales como conexión a bases de datos relacionales, gestión de archivos, el mantenimiento CRUD de una tabla, etc. Colegas de Microsoft, me han demostrado como es posible desarrollar dichas tareas con unos cuantos clicks y drag &amp;amp; drops en el ambiente de Visual Studio, independientemente del lenguaje: Visual Basic, C#Sharp, entre otros. Claro esta, que al demostrarle las bondades de Java, tales como independencia de plataforma, IDE, librerías libres de gran calidad, entre otros; la comparación entre ambos queda bastante igualada. Lamentablemente para el ambiente empresarial un factor primordial es el &lt;span style="font-weight: bold;"&gt;tiempo&lt;/span&gt; basándose en la simple y vieja ecuación &lt;span style="font-weight: bold;"&gt;tiempo = dinero&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Es por ello que muchos de los sistemas en que he desarrollado o al menos participado han utilizado diferentes plataformas y marcos de trabajo, tales como Spring, TopLink, Hibernate, Struts, JSP &amp;amp; JSTL, JSF, Ajax, etc. Y básicamente en todas, a pesar de su irrefutable calidad y rendimiento, el tiempo de programación es un factor en contra en el desarrollo. Ya que además de la curva de aprendizaje de cada una de ellas, prácticamente no hay una manera de generar código de manera automática. Y las herramientas de autogeneración, tales como middlegen, hibernatetools, etc. No siempre cumplen con las expectativas deseadas y definitivamente el tiempo que nos toma corregir, es el mismo que nos hubiera tomado diseñarlo artesanalmente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;¿La solución?&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;No RAD, AGIL, &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pues...la verdad...No existe una solución. No hay RAD, sin embargo si es posible ser más &lt;span style="font-weight: bold;"&gt;ÁGIL&lt;/span&gt;. Con el tiempo y luego de horas de dolores de cabeza, me he dado cuenta que &lt;span style="font-weight: bold;"&gt;todo depende sobre qué, para qué y para quien&lt;/span&gt;, es el sistema, al formular esas simples preguntas, es posible tomar las decisiones que nos lleven al camino adecuado para reducir el tiempo y ser más efectivos. Por ejemplo: Si por X o Y motivo estamos bajo Oracle, lo recomendable es utilizar las herramientas de Oracle, por otro lado si estamos sobre Websphere, pues lo recomendable es utilizar las herramientas de IBM. Y si estamos sobre Open Source??? en este caso es un poco más complicado, pero todo se resume a combinar las tecnologías de manera ecológica y armónica o el &lt;span style="font-weight: bold;"&gt;ecosistema JEE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Ecosistema JEE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para la mayoría de proyectos JEE (especialmente orientados a RAD)  es necesario la inclusión de diferentes herramientas, tecnologías, librerías y plataformas que faciliten el análisis, desarrollo, implementación y funcionamiento de las aplicaciones. Sin embargo un proyecto JEE puede estar agobiado de dichos componentes, muchas veces innecesarios, o por el contrario, carecer parcial o totalmente de ellas. Es necesario formar y establecer un ECOSISTEMA JEE que estandarizen y armonicen el posible caos dentro de las aplicaciones y servicios, tanto en el desarrollo como en la publicación y el ciclo de vida completo de los sistemas, de tal manera que la productividad se aumente y se disminuyan los posibles errores y cuellos de botella, que son realmente, los que consumen el tiempo y vuelven el desarrollo e implementación un caos.&lt;br /&gt;&lt;br /&gt;Algunos de los componentes, y sus combinaciones, que no deben de faltar en ninguna implementación RAD son:&lt;br /&gt;&lt;br /&gt;1. Build Tool : Ant, Maven, IVY&lt;br /&gt;2. Dependency Injection / IoC : Spring Framework&lt;br /&gt;3. Data Access Layer (JDBC ú ORM's : Hibernate, TopLink, iBatis)&lt;br /&gt;4. Model View Controller, Struts, Spring MVC, JSF&lt;br /&gt;5. IDE: Tales como (Sin orden de preferencia) : Eclipse, NetBeans, JDeveloper, IntelliJ Idea&lt;br /&gt;6. Generadores o plantillas : Tales como AppFuse, Grails, FireStorm&lt;br /&gt;&lt;br /&gt;Ejemplo de ello, pueden ser:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ant + Spring + TopLink + ADF Faces + JDeveloper&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Maven + Spring + Hibernate + Struts + Eclipse&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Maven + Spring + JPA + Eclipse/NetBeans&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Groovy / Grails + Intellij IDEA&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;Definitivamente, Java es cambiante, cada día surgen nuevas herramientas, lo importante es no perder de vista las preguntas: Sobre qué, Para qué y Para quién. Una vez estamos inmersos en el mundo de JEE, sabremos exactamente que camino tomar y cual arsenal vamos a llevar con nosotros.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-6367480097998242928?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/6367480097998242928/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=6367480097998242928' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6367480097998242928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/6367480097998242928'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2009/06/comparacion-de-tecnologias-rad.html' title='Comparación de Tecnologías RAD'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-3339120114658031667</id><published>2009-06-10T16:13:00.003-06:00</published><updated>2009-06-10T16:18:01.923-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jse'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>Fundamentos de Java</title><content type='html'>El sábado anterior finalizó el entrenamiento de Java Fundamentals, el cual fué impartido a 2 empresas interesadas en tecnologías Java. Fueron 20 horas divididas en 4 sesiones, anexo el material de trabajo junto con el material de la presentación. Todo el material está basado en el entrenamiento de Sun Microsystems, aunque el material de trabajo fué redactado según mi criterio y recolección de información de Internet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-3339120114658031667?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/3339120114658031667/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=3339120114658031667' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/3339120114658031667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/3339120114658031667'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2009/06/fundamentos-de-java.html' title='Fundamentos de Java'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-3212978693901502896</id><published>2008-09-04T23:30:00.011-06:00</published><updated>2009-05-06T16:14:25.879-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jse'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='jee'/><title type='text'>Guías y Tutorial de Java</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gfErZt9QKlA/SMDOgWYk3TI/AAAAAAAAADA/NshPJKWBxbQ/s1600-h/87C1FD1AA0ECD7137569A01D2A9C.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_gfErZt9QKlA/SMDOgWYk3TI/AAAAAAAAADA/NshPJKWBxbQ/s320/87C1FD1AA0ECD7137569A01D2A9C.gif" alt="" id="BLOGGER_PHOTO_ID_5242417021419052338" border="0" /&gt;&lt;/a&gt;Actualmente un nuevo reto se ha presentado en mi carrera como Analista de Sistemas, entrenamiento... Este nuevo reto surge lo tomo muy a pecho porque creo que al colaborar con el aprendizaje de los demás en el mundo de Java aporto el granito de arena que desde hace tiempo he querido brindar, y que mejor manera que enseñando a otros mis experiencias con el lenguaje.&lt;br /&gt;&lt;br /&gt;La pedagogía definitivamente no es mi rama, sin embargo, soy creyente de que cada uno de las personas que nos involucramos con el desarrollo de sistemas, tenemos un tutor interno, el que nos empuja a auto-enseñarnos de manera empírica uno que otro tema que deseamos conocer. &lt;a id="publishButton" class="cssButton" href="javascript:void(0)" target="" onclick="if (this.className.indexOf(&amp;quot;ubtn-disabled&amp;quot;) == -1) {var e = document['stuffform'].publish;(e.length) ? e[0].click() : e.click(); if (window.event) window.event.cancelBubble = true; return false;}"&gt;&lt;div class="cssButtonOuter"&gt;&lt;div class="cssButtonMiddle"&gt;&lt;div class="cssButtonInner"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;Es común que en nuestras labores diarias se acerque el jefe inmediato y diga clásicamente "El programa es para mañana", o aún peor, el cliente notifica que lo necesita para hoy a las 3:00PM, y esta "tradición" o "costumbre" ha hecho que encontremos las más rápidas maneras de realizar algo, que no es lo mejor, pero al menos funcional.  ¿Porque menciono esto? Porque si cada uno diéramos un poco de nuestro conocimiento, nuestro día a día sería mucho mejor.&lt;br /&gt;&lt;br /&gt;Por otro lado, una cosa si la tengo bien clara, el recurso en español es muy escazo, al menos en google, comparado con el inglés, este es otro reto, por tanto he decidido basarme en dividir el Java Tutorial de Sun para una versión basica y avanzada del JSE. Así que manos a la obra, y espero que el contenido publicado en el blog sea de interés y que sirva de guía para los demás.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-3212978693901502896?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/3212978693901502896/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=3212978693901502896' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/3212978693901502896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/3212978693901502896'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2008/09/entrenamiento-java.html' title='Guías y Tutorial de Java'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_gfErZt9QKlA/SMDOgWYk3TI/AAAAAAAAADA/NshPJKWBxbQ/s72-c/87C1FD1AA0ECD7137569A01D2A9C.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-1397069863615467032</id><published>2008-05-16T22:13:00.009-06:00</published><updated>2008-12-09T01:33:34.766-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jee'/><title type='text'>Adiós 1.4 fué un placer conocerte</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_gfErZt9QKlA/SC5fNmvLTcI/AAAAAAAAACk/g2ZxMWc63hI/s1600-h/j2ee_compatibility_logo.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5201199307000860098" style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://2.bp.blogspot.com/_gfErZt9QKlA/SC5fNmvLTcI/AAAAAAAAACk/g2ZxMWc63hI/s320/j2ee_compatibility_logo.gif" border="0" /&gt;&lt;/a&gt;Luego de llegar a la actualización 15 del JDK 1.5 o Java SE 5, he decidido finalmente migrar e instalar el JDK 6 (Actualización 6 a la fecha) ... Tomando en cuenta que estamos todavía con algunos pocos proyectos sobre JDK 1.4, me parece que es hora de migrar.&lt;br /&gt;&lt;br /&gt;Si hay algo que es admirable en Java es su compatibilidad entre versiones, a la fecha no he tenido ningun problema al cambiarme de versiones. De 1.3 a 1.4 a 1.5 y ahora a 6 espero que sea igual de transparente que en las anteriores ocasiones.&lt;br /&gt;&lt;br /&gt;Reconozco que Java 6 tiene ya buen tiempo de estar disponible, sin embargo tomo muy cuenta personalmente en que versión de JEE (Java Enterprise Edition) esta trabajando la industria comercialmente. Actualmente compilo sobre 1.5 con compatibilidad sobre 1.4, tomando en cuenta que los servidores de aplicaciones empresariales siempre estan una o dos versiones atrás que la más actual de Sun, claro por compatibilidad y estabilidad. Pero a la fecha muchos de ellos, entre ellos: JBoss, IBM, BEA y Oracle, ya estan en producción sobre 1.5, creo que es hora de compilar sobre 1.6 utilizando compatibilidad con 1.5.&lt;br /&gt;&lt;br /&gt;Vamos a ver si 1.6 nos ofrece tan buena compatibilidad como la familia 1.5 y al recordad tanto tiempo programando sobre 1.4, con un poco de nostalgia, creo que es hora de decirle "&lt;strong&gt;&lt;em&gt;Adiós venerable 1.4 fué un placer conocerte&lt;/em&gt;&lt;/strong&gt;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-1397069863615467032?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/1397069863615467032/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=1397069863615467032' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/1397069863615467032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/1397069863615467032'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2008/05/adis-14-fu-un-placer-conocerte.html' title='Adiós 1.4 fué un placer conocerte'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gfErZt9QKlA/SC5fNmvLTcI/AAAAAAAAACk/g2ZxMWc63hI/s72-c/j2ee_compatibility_logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2831594257051275697.post-2990923125955656710</id><published>2008-05-01T19:46:00.000-06:00</published><updated>2008-05-01T20:16:58.301-06:00</updated><title type='text'>¿Blogs, para gente de I.T.?</title><content type='html'>En lo personal, y sin afán de ofender, yo pienso que los BLOGS son una herramienta maravillosa para la gente que tiene mucho tiempo libre, o al menos se dedican a eso. En el área del desarrollo informática ó I.T. como algunos le apodan, es muy difícil contar con el tiempo necesario para llevar un blog como debe de ser, en lo personal realmente admiro a aquellos que lo hacen, y me ha sido de gran utilidad en mis desarrollos personales y laborales,  y es por eso que he llegado a la conclusión que ya es hora de iniciar un espacio en el cual comparta con todos mi mínima contribución compartiendo mis experiencias y publicando contenido que espero sea útil para otros.&lt;br /&gt;&lt;br /&gt;    Voy a tratar de darle continuidad a este espacio a medida ordene mis ideas para darle el seguimiento lógico que deseo compartir, con el fin de ahorrarles los dolores de cabeza por los cuales ya he pasado y que no se lo deseo a nadie, aunque para ser sincero ha sido divertido....Y la diversión es el centro de esto, ¿No?. Hay gente que trabaja en I.T. para vivir, hay otra gente que lo mira como un estilo de vida,  creo que los segundos son una especie de masoquistas, ya que encuentran placer a esos desvelos, horas y horas de trabajo e investigación, también son vanidosos, porque a su vez gustan de los resultados y sienten orgullo al compilar ese programa con "cero warnings, cero errors" al final de las 1500 líneas de código que digitaron la noche anterior, también son competitivos, se sienten orgullosos cuando en 5 líneas se logra mejor resultado que las 25 líneas de fulanito....En resumen por todas esas características que hacen, o al menos pensamos, que hacen especiales a la gente que programa con el corazón...Espero mi granito de arena les sea de utilidad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2831594257051275697-2990923125955656710?l=ceqm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceqm.blogspot.com/feeds/2990923125955656710/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2831594257051275697&amp;postID=2990923125955656710' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/2990923125955656710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2831594257051275697/posts/default/2990923125955656710'/><link rel='alternate' type='text/html' href='http://ceqm.blogspot.com/2008/05/blogs-para-gente-de-it.html' title='¿Blogs, para gente de I.T.?'/><author><name>Carlos Quijano</name><uri>https://profiles.google.com/106989976724803438012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-CzNevh029-g/AAAAAAAAAAI/AAAAAAAAAAA/T7UmBU68-S8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
