tag:blogger.com,1999:blog-31348829333471307192024-02-07T09:18:43.433-08:00El Javero<a href="auribox.com"></a>Unknownnoreply@blogger.comBlogger12125tag:blogger.com,1999:blog-3134882933347130719.post-45618383203005657482013-09-30T10:08:00.000-07:002013-09-30T10:13:26.891-07:00Convertir PDF a SWF con PDF2SWF por linea de comandos<b>1. </b>Descargar e instalar pdf2swf desde: <a href="http://www.swftools.org/download.html">SWFTOOLS</a><br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfbez0DMcLIwJLP9_7TwJWr1sibNypOQyFpO1GzVNwnY-Ugvlpy6nEVoLeSh1SPNqlpDeh_09SAqdRnKpdVI-25-4xOnk262OOt9oTAvv74ZDMelnBj3L6u5EDYUAGQG5IGXjL7cwiQjw/s1600/swftools.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfbez0DMcLIwJLP9_7TwJWr1sibNypOQyFpO1GzVNwnY-Ugvlpy6nEVoLeSh1SPNqlpDeh_09SAqdRnKpdVI-25-4xOnk262OOt9oTAvv74ZDMelnBj3L6u5EDYUAGQG5IGXjL7cwiQjw/s320/swftools.png" width="320" /></a></div>
<br />
<b>2.</b> Incluir el pdf2swf en el path del sistema.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDFFzZpCTiLnFvNF6DBpQw3AG9zi4RKxrxKWntVDAksiFH2qAKGx7K7u8a0Mx4vCF5ALXNGKK5hj6bJzImpUKgYkcabr0AtR42dCy5WYMtOHm9M7UitqlscHHKieeAaGcziy1NFRQIPcc/s1600/swftools2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDFFzZpCTiLnFvNF6DBpQw3AG9zi4RKxrxKWntVDAksiFH2qAKGx7K7u8a0Mx4vCF5ALXNGKK5hj6bJzImpUKgYkcabr0AtR42dCy5WYMtOHm9M7UitqlscHHKieeAaGcziy1NFRQIPcc/s320/swftools2.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJkOkJ50gjRgzH86uKYBbUAHYKyZXj1Oj5-cwWVl6APhhty7Jq6FcSV6WdDmPyW-j6b_I21ZstSfXOEy-Aa-EBORDlg-ezlScvtlE-UdKjODYMQm_4p_CI_6JLNH4aPA08wvPoPjeqkkw/s1600/swftools4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDenCGpdYzKb7B7qCwqD9nMLhOnIH7QlbKAAsURJCxZeNVn9Mx2M-wnfafb18ahBHNuN6xlLV5-wxrS8GQRswzk1bhTWxRfk4n04rnAJp36vYhLZcReSfejij3s7CQQX0Jhrl-vKQq-GA/s1600/swftools3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDenCGpdYzKb7B7qCwqD9nMLhOnIH7QlbKAAsURJCxZeNVn9Mx2M-wnfafb18ahBHNuN6xlLV5-wxrS8GQRswzk1bhTWxRfk4n04rnAJp36vYhLZcReSfejij3s7CQQX0Jhrl-vKQq-GA/s320/swftools3.png" width="279" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJkOkJ50gjRgzH86uKYBbUAHYKyZXj1Oj5-cwWVl6APhhty7Jq6FcSV6WdDmPyW-j6b_I21ZstSfXOEy-Aa-EBORDlg-ezlScvtlE-UdKjODYMQm_4p_CI_6JLNH4aPA08wvPoPjeqkkw/s1600/swftools4.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJkOkJ50gjRgzH86uKYBbUAHYKyZXj1Oj5-cwWVl6APhhty7Jq6FcSV6WdDmPyW-j6b_I21ZstSfXOEy-Aa-EBORDlg-ezlScvtlE-UdKjODYMQm_4p_CI_6JLNH4aPA08wvPoPjeqkkw/s320/swftools4.png" width="292" /> </a><br />
<br />
<b>2.1</b> Incluir la ruta en donde esta instalado el pdf2swf.exe al final de la cadena del path. en este caso es: <span style="background-color: yellow;"><b>C:\Program Files (x86)\SWFTools</b></span><br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd_3Psv_Ddj23jOPCrxGA7d2TxkN78FzuxPdctTV1yxBdQo4omd-iazSePyKF6ZK8io68cGWOXfZleGoQeyG5FK0HylyeTInBEyrR91aTpymiVcsMOGvJ5euyZSqiV8tS47-GDw_TUbpo/s1600/swftools5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd_3Psv_Ddj23jOPCrxGA7d2TxkN78FzuxPdctTV1yxBdQo4omd-iazSePyKF6ZK8io68cGWOXfZleGoQeyG5FK0HylyeTInBEyrR91aTpymiVcsMOGvJ5euyZSqiV8tS47-GDw_TUbpo/s320/swftools5.png" width="320" /></a></div>
<br />
3. En una sesión del DOS introducir la siguiente línea: <b> </b><br />
<br />
<span style="font-size: x-small;"><span style="background-color: black;"><span style="color: white;"><span style="font-family: "Courier New",Courier,monospace;">pdf2swf </span></span></span></span><br />
<br />
deberá mostrar una lista de opciones; eso quiere decir que el <b>pdf2swf </b>de entorno se cargo correctamente al path del sistema.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKMW3_l_5RGk-uSD1o3PK-s35fdjN9NcPiXkkrlpdRGonzW6HBmqTtmbQPP1ZS6CQX6xj6dj36KL0HQRBxz_-FaJ_RVvM5-1XfwWXBOcerKatZ0vY1iL_GnjHo_ELlUBDbw4VdhfhF5xA/s1600/swftools6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="189" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKMW3_l_5RGk-uSD1o3PK-s35fdjN9NcPiXkkrlpdRGonzW6HBmqTtmbQPP1ZS6CQX6xj6dj36KL0HQRBxz_-FaJ_RVvM5-1XfwWXBOcerKatZ0vY1iL_GnjHo_ELlUBDbw4VdhfhF5xA/s320/swftools6.png" width="320" /></a></div>
<br />
<b>4. </b>Ubicarse en la ruta del archivo pdf que se quiere convertir, en este caso es C:\PDF e introducir la siguiente instrucción:<br />
<span style="font-size: x-small;"><br /></span>
<span style="color: white; font-size: x-small;"><span style="background-color: black;"><span style="font-family: "Courier New",Courier,monospace;">pdf2swf [archivo].pdf -o </span><span style="font-family: "Courier New",Courier,monospace;"><span style="font-family: "Courier New",Courier,monospace;">[archivo]</span>.swf<span style="font-family: Arial, Helvetica, sans-serif;"> <span style="font-family: inherit;"><span style="font-family: inherit;"> </span></span></span></span></span></span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: inherit;"><span style="font-family: inherit;">En este caso el pdf se llama test.pdf, así que la instrucción queda de la siguiente forma:</span></span></span></span><br />
<span style="font-size: x-small;"><br /></span>
<span style="background-color: black; font-size: x-small;"><span style="color: white;"><span style="font-family: "Courier New",Courier,monospace;">pdf2swf test.pdf -o test.swf </span></span></span><br />
<br />
<span style="background-color: white;">El archivo test.swf se debió haber creado</span><br />
<span style="background-color: white;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbEugGT08ceK8M1hmxXRCv6ILh0vY6RJPEPOUSZzoI7b5ls4adSD44WcDIQpiHG28TardBGNjWZHiSmPfCJUSA1TmpLJtxdBfFQXPnqnAInXWwnEid3DZ-rDwMJMdneBiYQrYnCesqS8k/s1600/swftools7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbEugGT08ceK8M1hmxXRCv6ILh0vY6RJPEPOUSZzoI7b5ls4adSD44WcDIQpiHG28TardBGNjWZHiSmPfCJUSA1TmpLJtxdBfFQXPnqnAInXWwnEid3DZ-rDwMJMdneBiYQrYnCesqS8k/s320/swftools7.png" width="258" /></a></div>
<br />
<span style="background-color: white;"><b>5.</b> Para agregar el viewer: </span><br />
<br />
<span style="background-color: white;">Ir al directorio de instalación, copiar el siguente archivo <b>'rfxview.swf' </b>y pegarlo en el directorio destio en este caso es C:PDF</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;">Ahora el swf tiene un viewer para navegar en el documento.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjftzeqP6EDOj_3qtgdTQMQ_4lJ_6d8z25D8fgK_kfFMb8CvlW9ac8l_xHreHRPHruNAZhp_B0vKEUqL1qMwKwwS_ve8GPAkZMgqdogu58AczEyUl4SB4sjwtjBuUh634Dy-hJIrI_rxtc/s1600/swftools8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjzQtglfDnKvQLsRhv1alAGa9l0V8UwjQqAt3hO2G3ie0Wf-xqvsdQix_U4D3y8SwrIMok7hzxp8AGFME8QcuSygVD_cuhN-pmC3fSQKwpcVY8jdUwXW49vn-sRJbCQ8CW6vIvvzJzwOM/s1600/swftools8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjzQtglfDnKvQLsRhv1alAGa9l0V8UwjQqAt3hO2G3ie0Wf-xqvsdQix_U4D3y8SwrIMok7hzxp8AGFME8QcuSygVD_cuhN-pmC3fSQKwpcVY8jdUwXW49vn-sRJbCQ8CW6vIvvzJzwOM/s320/swftools8.png" width="242" /></a></div>
<b><span style="background-color: white;"><br /></span></b>
<span style="background-color: white;"><b>6. </b>Para hacer un proceso batch con todos los pdf's del directorio actual.</span><br />
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: black;"><span style="color: white;"><br /></span></span></span>
<span style="background-color: white;"><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: black;"><span style="color: white;">for %I in (*.pdf) do pdf2swf --viewer rfxview.swf %I -o %~dpI%~nI.swf </span></span></span></span></span><br />
<br />
<br />
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3134882933347130719.post-68645876593007354442011-08-11T17:24:00.000-07:002011-08-11T17:37:47.128-07:00JSF 2.1 con Spring 3.0 Parte 1En este artículo se utilizara Eclipse Indigo como IDE y Glassfish 3.1.1 como Servidor de Aplicaciones+
<br />
<br /><span style="font-weight: bold; color: rgb(153, 0, 0);">Configuracion de Eclipse para JSF 2.1.2</span>
<br />
<br />Obtener la última versión de JSF 2.1.2 en el <a href="http://javaserverfaces.java.net/" target="parent">sitio oficial.</a>
<br />
<br />
<br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje1-ZSA7IQjyPflveU3JrIhyod0pfF1dFJyJo7EobOapqzoRHGXc7ckiATy4vxn0N4SqHkBXrG6PZC93UWjKgwjevVY8ihRf3hlUvW2cYXMI30a5ICvsifolGs8a51DiqUBjgYJri2HnA/s1600/jsf-t-2-1.jpg"><img style="cursor: pointer; width: 400px; height: 264px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje1-ZSA7IQjyPflveU3JrIhyod0pfF1dFJyJo7EobOapqzoRHGXc7ckiATy4vxn0N4SqHkBXrG6PZC93UWjKgwjevVY8ihRf3hlUvW2cYXMI30a5ICvsifolGs8a51DiqUBjgYJri2HnA/s400/jsf-t-2-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5639760636433056466" border="0" /></a>
<br />
<br />
<br />
<br /><div style="text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAP6pewpekQIPtKN7V63f-0xbqlXdqe-6B0IpHvOhWRSd3eVXSkQy8QCh0J-ltqsasJLk3t3gPUtMNFJy2Lg420CqYiYT6_Z4EsIGtIEw0ZcEE2y-vp9bZFe4V5d9Chak9660qZ9EKLkU/s1600/jsf-t-2-1.jpg">
<br /></a>
<br /></div>
<br />
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3134882933347130719.post-82753523255822565222010-05-17T19:21:00.000-07:002010-05-17T19:26:48.566-07:00Conceptos y principios de diseño de aplicaciones<span style="font-weight:bold;">Principio de Substitución Liskov (LSP)</span><br /><span style="font-style:italic;">Subclases deben poder ser substituidas por su Clase base</span><br /><br />El Principio Abierto-Cerrado (OCP Open Close Principle) es el más importante de los principios de categoría de Clases. Y se puede decir que LSP es una extensión de OCP. Para poder tomar ventaja del LSP, debemos relacionarlo directamente al OCP por que si se viola el LSP también se está violando el OCP, pero no viceversa. En una forma más simple, es muy difícil poder diferenciar entre LSP y OCP, pero existe una sutil diferencia. OCP está centrado alrededor del acoplamiento abstracto, aunque LSP está fuertemente ligado al acoplamiento abstracto, su mayor dependencia se centra en precondiciones y post condiciones, a estos conceptos se les conoce como diseño por contrato que se establece cuando las pre y post condiciones se han formalizado. Una precondición es la parte del contrato que se debe satisfacer antes que el método sea invocado.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3134882933347130719.post-6174651662743354452009-10-26T13:14:00.000-07:002009-11-03T11:59:00.348-08:00Instalación de Glassfish v. 2.1 en WindowsAntes que nada debo aclarar que prefiero trabajar bajo una distribución de linux, sin embargo por cuestiones de políticas de las empresas en las que he trabajado, raramente se puede trabajar con el SO. que uno prefiera, así que ni modo, a batallar con la monserga del jugete de Bill Gates y todos sus problemas e inestabilidades.<br /><br />Para instalar glassfish en un ambiente windows por medio del jar de instalación se deben seguir los siguientes pasos:<br /><br />1. Instalar el JDK que puede ser <a href="https://dct.sun.com/dct/forms/reg_us_0809_958_0.jsp">descargado de aquí</a>, te pedirán algunos datos, y despues lo puedes descargar.<br /><br />Generalmente se instala en C:\Program Files\Java como se muestra en la siguiente imagen, <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmKbfyD0Q6iaFsrWic0zbfAq7MvLCXqschccnMZZytjzzMQJqLkAQeYg95DixwNv3me9ovVmsrYKnzc8hOF2xcOPm8Yoypr79hgnheSaux57hYgkbCmf_2F5icRQbkLpwe6nZuT1M3Ak0/s1600-h/installjava.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmKbfyD0Q6iaFsrWic0zbfAq7MvLCXqschccnMZZytjzzMQJqLkAQeYg95DixwNv3me9ovVmsrYKnzc8hOF2xcOPm8Yoypr79hgnheSaux57hYgkbCmf_2F5icRQbkLpwe6nZuT1M3Ak0/s400/installjava.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5397040756177647698" /></a><br /><br />Lo que sigue es agregar java a la variable de entorno PATH del Windows. En MiPC (MyComputer)>Configuración Avanzada del Sistema>Variables de entorno.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSH2hvzrORorayuWALUPDB8_uTpHXbCvy18ZRAbYv_dF-LVP4erxSplhXcprqp55_zUHaXLM6Y27dIJjIWLqifHYAk2k8QvYMT_rhBEVd-p5CkE8ECaI13vMexklPOmqo_Cl2qOzgdQE8/s1600-h/path.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 380px; height: 154px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSH2hvzrORorayuWALUPDB8_uTpHXbCvy18ZRAbYv_dF-LVP4erxSplhXcprqp55_zUHaXLM6Y27dIJjIWLqifHYAk2k8QvYMT_rhBEVd-p5CkE8ECaI13vMexklPOmqo_Cl2qOzgdQE8/s400/path.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5399937401801830034" /></a><br /><br />Esta operacion nos permite compilar y ejecutar clases java desde cualquier dierctorio del sistema. Ejecutamos desde línea de comandos: <br />> java –version <br />Esta instrucción nos debe mostrar la siguiente información:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcBDib3P-kLqEMy0QesWmtLkZwjYMMAK8iOuG42F68uQE8O6wHhRWC-qaQY7mDPaSMzXLcJlDi3pgCYEb12EQIFmAfKi8I-fzuGwREqrMGFKxqDkPyPRKRc_acNZM2fZpBwSC_cN33DyA/s1600-h/java_version.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 62px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcBDib3P-kLqEMy0QesWmtLkZwjYMMAK8iOuG42F68uQE8O6wHhRWC-qaQY7mDPaSMzXLcJlDi3pgCYEb12EQIFmAfKi8I-fzuGwREqrMGFKxqDkPyPRKRc_acNZM2fZpBwSC_cN33DyA/s400/java_version.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5399938467748993202" /></a><br /><br />Si no es así es que algo se hizo mal en la creación de la variable. Por alguna razón que desconozco se debe poner la ruta a java al inicio del la cadena de la variable <span style="font-weight:bold;">PATH</span> y otra cosa rara es que en la ruta la palabra BIN debe ser como se muestra en la imagen o sea en mayusculas, no me preguntes ¿porque? y si alguien lo sabe por favor saquenos de nuestra ignorancia poniendo un comentario en este artículo.<br /><br />Ahora creamos la variable de entorno JAVA_HOME:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlslbWH6IjxZldArrAs6uyX1vGEvLK4socruQfsflT9x287PNTsmXfNSmVMmen1SQf-9zQoxsbfh8XEEd9iEkYm4SelS7Zbl9YVuRvqo8YEEceKnp4Vqavx0cHgYTjUezdekAnegwCnFE/s1600-h/java_home_nueva.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 362px; height: 400px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlslbWH6IjxZldArrAs6uyX1vGEvLK4socruQfsflT9x287PNTsmXfNSmVMmen1SQf-9zQoxsbfh8XEEd9iEkYm4SelS7Zbl9YVuRvqo8YEEceKnp4Vqavx0cHgYTjUezdekAnegwCnFE/s400/java_home_nueva.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5399941879211539138" /></a><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPy9TmK7B8H_By8HskP37N02kiTZmGhLDeEcskZNufihUXICiK-YLE4VXyiXZ9EV1ZR1l_y5RMNnm_-lyLt2bawYApp0O64sPJxOt4HExrBeHsPu5pyZA6VuYfqobPRuesJCE1S85e4Bo/s1600-h/java_home.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 380px; height: 154px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPy9TmK7B8H_By8HskP37N02kiTZmGhLDeEcskZNufihUXICiK-YLE4VXyiXZ9EV1ZR1l_y5RMNnm_-lyLt2bawYApp0O64sPJxOt4HExrBeHsPu5pyZA6VuYfqobPRuesJCE1S85e4Bo/s400/java_home.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5399938263082570578" /></a><br /><br />Para comprobar que se ha hecho esta variable correctamente ejecutar desde linea de comandos:<br /><br />> echo %JAVA_HOME%<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBULIopSgs0dro9bv1fEk0gLFuBBOKSjiUSq_AMN_zCMGuBS1V6p2gmkv-iXSs75g8fkqWPeHqqlSQgRmuMm5kWT_HfMk6Q7yy5uxldg-J4b0wNTU0vMiyq22M6H7EfyQ7HMzqcSlKFRE/s1600-h/echo_java_home.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 310px; height: 97px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBULIopSgs0dro9bv1fEk0gLFuBBOKSjiUSq_AMN_zCMGuBS1V6p2gmkv-iXSs75g8fkqWPeHqqlSQgRmuMm5kWT_HfMk6Q7yy5uxldg-J4b0wNTU0vMiyq22M6H7EfyQ7HMzqcSlKFRE/s400/echo_java_home.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5399945969133030466" /></a><br /><br /><br /><span style="font-weight:bold;">Instalacion de ANT</span><br /><br /><a href="http://apache.ziply.com/ant/binaries/apache-ant-1.7.1-bin.zip">Descargar ant </a><br /><br />Y descomprimirlo de preferencia en un directorio designado para el uso de herramientas, puede ser C:\support\ant por sugerir algo.<br /><br />De la misma manera que se genero la variable de entorno JAVA_HOME, ahora se debe generar la variable ANT_HOME:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt0xtaZDOVowlS9KKdH87uQ-rwUQ16usl4Wz-FTrrC9VWqfjdaC10BA8yV68QbXHwr4P7QWQW75mKpbMC822QQcNwo685zs5sh6-9y6dSA93MV0kdiyK6bGYZ37zvzjlOB5FEhPtn_8XA/s1600-h/ant_home.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 380px; height: 154px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt0xtaZDOVowlS9KKdH87uQ-rwUQ16usl4Wz-FTrrC9VWqfjdaC10BA8yV68QbXHwr4P7QWQW75mKpbMC822QQcNwo685zs5sh6-9y6dSA93MV0kdiyK6bGYZ37zvzjlOB5FEhPtn_8XA/s400/ant_home.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5399945148600703154" /></a><br /><br /><span style="font-weight:bold;">Descarga de Glassfish</span><br /><br /><a href="https://glassfish.dev.java.net/public/downloadsindex.html"><br />Descargar el Servidor</a><br /><br />Ejecutamos el jar con el siguente comando: <br /><br />java -jar -Xmx256m glassfish-installer-v2.1-xxxxxxxxxxxxx.jar<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbzG8nfxPpbUFmLbbv-Dlhqz1Y6K7FGm8hEPdjnAAe4TpuytitTbf0sXEVZCoog34vKkyJkBDBD-alQWEaORoFa1lET03NBDkH3Wvkx16Tk3LXWFK-xw5yiaT3j2KUb57mxxxY9wq510Q/s1600-h/cmd_glassfish.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 118px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbzG8nfxPpbUFmLbbv-Dlhqz1Y6K7FGm8hEPdjnAAe4TpuytitTbf0sXEVZCoog34vKkyJkBDBD-alQWEaORoFa1lET03NBDkH3Wvkx16Tk3LXWFK-xw5yiaT3j2KUb57mxxxY9wq510Q/s400/cmd_glassfish.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5399963088386565986" /></a><br /><br /><br />Y nos mostrará la licencia de uso:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7e92SmVxIMjRI2el0CJgHCN-rB32u3rQRQ2yn363PiOEpsD_ohu-iAuppLAuwq3D9NBB59aHWqW7B4Enxv6uWwgyaSAKtTCcqQjiu2wm0Kx4OS3o-zgFM80BrOPn6BZ_hWgud2Uv6iRU/s1600-h/agreement_glassfis.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 327px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7e92SmVxIMjRI2el0CJgHCN-rB32u3rQRQ2yn363PiOEpsD_ohu-iAuppLAuwq3D9NBB59aHWqW7B4Enxv6uWwgyaSAKtTCcqQjiu2wm0Kx4OS3o-zgFM80BrOPn6BZ_hWgud2Uv6iRU/s400/agreement_glassfis.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5399962878416141778" /></a><br /><br />Se descromprimirá el contenido del jar en el directorio actual.<br /><br />Ahora vamos a instalar el Servidor con la siguiente instruccion <br /><br />>ant -f setup.xml<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRTpXwvERYfiktSNYjIMokLRzdV42NSAQEc6sz-XjAIyXFBCDRrC6lSRDFaZV7TKCgXTpxZr9ALVPqn3RWrGhB89j_QW-yQdPIJYcu2TXyoWrzqmE2ecmHoTDbNh3ysvyyhnXQTA63Ccg/s1600-h/run_ant.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 118px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRTpXwvERYfiktSNYjIMokLRzdV42NSAQEc6sz-XjAIyXFBCDRrC6lSRDFaZV7TKCgXTpxZr9ALVPqn3RWrGhB89j_QW-yQdPIJYcu2TXyoWrzqmE2ecmHoTDbNh3ysvyyhnXQTA63Ccg/s400/run_ant.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5399965614279115554" /></a><br /><br />Listo, el Servidor fue instalado.<br /><br />Ahora vamos a levantarlo, en el directorio en donde se instalo el servidor nos movemos a la ruta del diectorio bin y ejecutamos el comando:<br /><br />>asadmin start-domain domain1<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihQmy30jUAQb-AlkflsogHsLDPMEKWmPCmHoVgmfxhwvR8OoKUi4Ltm-fTg-01U3bTOj_MfLjgH9Ra0W6QaCnM1erzOPN87daYF_rZCcZr_PokZT6P5i88lmvJvfWlTPC0Ml0lra6tSaM/s1600-h/start_domain.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 118px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihQmy30jUAQb-AlkflsogHsLDPMEKWmPCmHoVgmfxhwvR8OoKUi4Ltm-fTg-01U3bTOj_MfLjgH9Ra0W6QaCnM1erzOPN87daYF_rZCcZr_PokZT6P5i88lmvJvfWlTPC0Ml0lra6tSaM/s400/start_domain.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5399966813441410578" /></a><br /><br /><br />Se mostrará la siguiente información:<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNnhi3JRFHjW9iKsNZXoW-mOiRBTOs5ZT3Pl_D6gqX_vltdmNKM1BAmyt5DyQrFvCmQX-P906NMzSdA_D_o5JyLAi4YCXo3x_X15Ed7agkRiv5YavyQMEbP0fs8hcqtttyCVWLBKbnbBM/s1600-h/glassfish_started.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 184px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNnhi3JRFHjW9iKsNZXoW-mOiRBTOs5ZT3Pl_D6gqX_vltdmNKM1BAmyt5DyQrFvCmQX-P906NMzSdA_D_o5JyLAi4YCXo3x_X15Ed7agkRiv5YavyQMEbP0fs8hcqtttyCVWLBKbnbBM/s400/glassfish_started.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5399967695697839602" /></a><br /><br />El dominio que se crea por default es el domain1 , con las credenciales:<br /><br />User:admin<br />Password:adminadmin<br /><br />Abrimos un navegardor de internet en http://localhost:4848 y esto nos dirige al panel de control:<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS4MGjE8m-jKhln47mlJDPgd7QcmJe23ee0ZNjDmAydGDt_m1nZ82qsulMnkRGYJGR8sl1w_nYCFV5f7YZ73G63D7zayQEdffWl5J4fp0hmYpsENF6OPVj18Ae3tg-VN-chKlerMJ07Is/s1600-h/login_glassfish.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 250px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS4MGjE8m-jKhln47mlJDPgd7QcmJe23ee0ZNjDmAydGDt_m1nZ82qsulMnkRGYJGR8sl1w_nYCFV5f7YZ73G63D7zayQEdffWl5J4fp0hmYpsENF6OPVj18Ae3tg-VN-chKlerMJ07Is/s400/login_glassfish.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5399968532217542210" /></a><br /><br />Nos logeamos y listo!!, a trabajar.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJUWOlN-WUjk6HBGjSH0I-9aMjPGc4-O2bEnsb5Mo90BDZ84wUtIHHVDvDPElhuYQASdzvOIMmIU89QpFcAEtV6Im8zoOpC80GPrynYfaaQb5xXqRpW2svyxpul7JXpbhZ_YEt3Gghc5E/s1600-h/consola_glassfish.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 250px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJUWOlN-WUjk6HBGjSH0I-9aMjPGc4-O2bEnsb5Mo90BDZ84wUtIHHVDvDPElhuYQASdzvOIMmIU89QpFcAEtV6Im8zoOpC80GPrynYfaaQb5xXqRpW2svyxpul7JXpbhZ_YEt3Gghc5E/s400/consola_glassfish.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5399969144128343858" /></a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3134882933347130719.post-22830998224701452322008-08-18T11:44:00.000-07:002008-08-18T11:45:44.286-07:00Excepciones - Bloque finallySi se usa return en un bloque try y en un bloque finally se solicita una instrucción, el bloque finally se ejecuta primero y después el return.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3134882933347130719.post-84935235139094492212008-08-18T11:35:00.000-07:002008-08-18T11:42:39.195-07:00POO Uso de referenciasLa llamada a changePerson () pasa el objeto <span style="font-weight:bold;">Persona</span> como referencia, por lo que el <span style="font-weight:bold;">name </span>se ajusta a "GHI". Sin embargo, a continuación, una referencia a un nuevo objeto <span style="font-weight:bold;">Persona </span>que se crea con el valor del atributo name "JKL" se ha asignado a p. De ahí la posterior setName () define el atributo name con "MNO" sólo para nuevo objeto Persona y no el objeto original <span style="font-weight:bold;">p</span> que todavía se refiere al método principal (que define el atributo name con "GHI").<br /><br /> public class Example1 {<br /> public static void main(String [] args) {<br /> Person p = new Person("ABC");<br /> p.setName("DEF");<br /> changePerson(p);<br /> System.out.println(p.getName());<br /> }<br /> <br /> public static void changePerson(Person p) {<br /> p.setName("GHI");<br /> p = new Person("JKL");<br /> p.setName("MNO");<br /> System.out.println(p.getName());<br /> }<br /> }<br /> <br /> class Person {<br /> String name;<br /> <br /> Person(String name) {<br /> this.name = name;<br /> }<br /> <br /> public void setName(String n) {<br /> name = n;<br /> }<br /> <br /> public String getName() {<br /> return name;<br /> }<br /> }Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3134882933347130719.post-89439458067541021662008-08-18T11:28:00.000-07:002008-08-18T11:46:17.486-07:00Excepciones - Bloque finallySi se pone el return en un bloque try y en un bloque finally se solicita una instrucción, el bloque finally se ejecuta primero y después el return:<br /><br /><br /><br />public class Animal {<br /><br />private static String name = "nameless";<br /><br />public Animal(String nm) {<br />name = nm;<br />}<br /><br />public static void setName(String name) {<br /> Animal.name = name;<br />}<br /><br />public String getName() {<br /> try {<br /> return name;<br /> } catch (Exception e) {<br /> return name;<br /> }finally{<br /> System.out.println("Si alcanzo el finally");<br /> }<br /><br />}<br /><br />public static void main(String[] args) {<br /> <br /> Animal fido = new Animal("Fido");<br /> Animal garfield = new Animal("Garfield");<br /> <br /> System.out.println(fido.getName());<br /> <br />}<br />}<br /><br /><span style="font-weight:bold;">Salida: </span><br />Si alcanzo el finally<br />GarfieldUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-3134882933347130719.post-4340147438368289232008-08-18T11:22:00.000-07:002008-08-18T11:43:29.481-07:00POO - Variables estaticas y ConstructoresUna variable local estática, está compartida por cualquier cantidad de instancias. Si esta se inicializa en el constructor, todas las instancias subsecuentes tendrán el mismo valor.<br /><br />public class Animal {<br /><br /> public static String name = "Nameless";<br /><br /> public Animal(String iName) {<br /> name = iName;<br /> }<br /><br /> public String getName() {<br /> return name;<br /> }<br /> }<br /><br /><br /> public class Main {<br /><br /> public static void main(String[] args) {<br /> Animal fido = new Animal("Fido");<br /> Animal garfield = new Animal("Garfield");<br /> <br /> System.out.println(fido.getName() + " and " + garfield.getName());<br /> }<br /> }<br /><span style="font-weight:bold;">Salida: </span>Garfield and GarfieldUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-3134882933347130719.post-38472947600529919162007-06-29T08:29:00.000-07:002009-08-31T11:16:59.875-07:00Struts con NetBeans 5.5 Parte I<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.auribox.com"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 316px; height: 53px;" src="http://www.auribox.com/cms/training/images/banners/price-java.png" border="0" alt="" target="parent"/></a><br /><br /><br /><span style="font-weight: bold;">Introducción<br /><br /></span><div style="text-align: justify;">Podemos encontrar mucha información acerca del Framework Jakarta Struts en la red, por tal motivo este artículo no pretende ser un tutorial de Struts propiamente, sólo es una guía práctica para implementar algunas utilidades con<a href="http://www.netbeans.org/index.html"> Netbeans 5.5 </a> y <a href="http://struts.apache.org/">Struts 1.2.9.</a><br /></div><br />Crear la Aplicacion Web:<br /><br />Para crear una nueva aplicación web nos dirigimos a File/New Project:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3dAMFXZiNd4vu80Dm3FVzbXy3vp41ZcVi-t5DKnBfntG9qTyHSjg6lVzbXvktblI-lnhyphenhyphenR_tOSP1fwGhGs6-CBYN3aW7n3NfYJXoyNtwb2pwILFCinwMfbRBHJYtDldrYwTC9uW09mho/s1600-h/project.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3dAMFXZiNd4vu80Dm3FVzbXy3vp41ZcVi-t5DKnBfntG9qTyHSjg6lVzbXvktblI-lnhyphenhyphenR_tOSP1fwGhGs6-CBYN3aW7n3NfYJXoyNtwb2pwILFCinwMfbRBHJYtDldrYwTC9uW09mho/s400/project.jpg" alt="" id="BLOGGER_PHOTO_ID_5081535392929770786" border="0" /></a><br />Asignamos nombre al proyecto:<br /><br /><div style="text-align: left;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijfZSjxgAznIeLwYu9eA3YgsxZHsU26nup-Vuh3qWFdJyz_D3Zler6PtZ1gplvzUDr95Ky33PQsCljFf5hasZRg01sm1TdzZ9d-UtKxQnBZRaAAkr-sNCwHNVG91t1OvLaWV6OejecAmM/s1600-h/name.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijfZSjxgAznIeLwYu9eA3YgsxZHsU26nup-Vuh3qWFdJyz_D3Zler6PtZ1gplvzUDr95Ky33PQsCljFf5hasZRg01sm1TdzZ9d-UtKxQnBZRaAAkr-sNCwHNVG91t1OvLaWV6OejecAmM/s400/name.jpg" alt="" id="BLOGGER_PHOTO_ID_5081549136825118034" border="0" /></a><br /><br /><div style="text-align: justify;">Y marcamos la opción Struts 1.2.9, notemos como asigna la extensión *.do como predeterminada, esta extensión según he leido no es obligatoría, podemos usar cualquier otra, sin embargo por convención es preferible usarla como lo indica el estandar de struts.<br /></div></div><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYRaAX6ORtdl2nz9lWeJO2KzG7L3KcSxSxmG-MvalfTmXcKh7dsh3kNCTt1l-ob2lDNKmsnkPFe5d6EjPCqzAHXv3gBIkrQzhkiIyi-n47O8jndAWs3YGOIP6Bd0JHDjsrdVQxnusJp8A/s1600-h/framework.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYRaAX6ORtdl2nz9lWeJO2KzG7L3KcSxSxmG-MvalfTmXcKh7dsh3kNCTt1l-ob2lDNKmsnkPFe5d6EjPCqzAHXv3gBIkrQzhkiIyi-n47O8jndAWs3YGOIP6Bd0JHDjsrdVQxnusJp8A/s400/framework.jpg" alt="" id="BLOGGER_PHOTO_ID_5081536075829570866" border="0" /></a><br />Una vez seleccionadas las opciones, damos clic en finalizar. Apareceré el explorador de proyecto con con su correspondiente árbol de estructura.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV-w4_xYqnINdydX6dqu9TuKyq5d-QMNBU81Jv9e5MaAnTZ5Dault_tklAMU6JNyx3GGvdPAmCYinVdevEd7LyKZzJr1H2PLtkS7B887mNPUUG5XaTtT7MtrRF6Fmfi8r0ravwJ6ADwCU/s1600-h/Picture+9.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 218px; height: 330px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV-w4_xYqnINdydX6dqu9TuKyq5d-QMNBU81Jv9e5MaAnTZ5Dault_tklAMU6JNyx3GGvdPAmCYinVdevEd7LyKZzJr1H2PLtkS7B887mNPUUG5XaTtT7MtrRF6Fmfi8r0ravwJ6ADwCU/s400/Picture+9.png" alt="" id="BLOGGER_PHOTO_ID_5081605907702836578" border="0" /></a><br /><br />Vale la pena que antes de seguir veamos como esta organizado el patrón MVC de Struts.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6f1z5-zxuylf9HgfCEGImHGSSrpvYVAwmq_Atfg6AchUZB8fghTe9NgqGgf4oJecRCdAhgvsKWGuSbc7f50mNHS3uuovapK7ebPTZ4PUtlPMkvBcTT1MnywKJV5fnvhRjHRtSicY2L20/s1600-h/mvc.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6f1z5-zxuylf9HgfCEGImHGSSrpvYVAwmq_Atfg6AchUZB8fghTe9NgqGgf4oJecRCdAhgvsKWGuSbc7f50mNHS3uuovapK7ebPTZ4PUtlPMkvBcTT1MnywKJV5fnvhRjHRtSicY2L20/s400/mvc.jpg" alt="" id="BLOGGER_PHOTO_ID_5081606345789500786" border="0" /></a>Este es modelo del caso más simple que se podría presentar en una aplicación basada en struts.<br /><br /><ol style="text-align: justify;"><li>El cliente hace la petición al controlador que a final de cuentas es un servlet, a este servlet se le conoce como <span style="font-weight: bold;">action, </span>este es mapeado a través de un archivo xml que generalmente se llama struts-config.xml y que incluye todas las directivas que controlan la aplicación.<br /></li><li>Si la acción se encuentra dentro del archivo de configuración, el ActionServlet <span style="font-style: italic; font-weight: bold;">controlador<controlador></controlador></span> entrega el control al <span style="font-weight: bold; font-style: italic;">modelo<modelo></modelo></span> que general mente es un JavaBean que contiene la lógica del negocio que puede o no estar dentro del mismo Servidor Web ó en un Servidor de Aplicaciones como JBoss ó WebLogic (en forma de EJB).<br /></li><li>Este a su vez puede hacer una petición a una capa de persistencia, a una Base de Datos, Archivo XML ó de texto plano. Hasta aquí el flujo se encuentra dentro del <span style="font-weight: bold; font-style: italic;">modelo.<modelo></modelo></span> </li><li>Una vez obtenidos los métodos ó la información requeridos el <span style="font-weight: bold; font-style: italic;">controlador<controlador></controlador></span> retoma el control del flujo para presentar información a través de una pégina JSP <span>la</span><span style="font-weight: bold; font-style: italic;"> vista</span> ó simplemente ejecutar el método del bean sin presentar ninguna información situación que raramente nos podremos encontrar pero que es posible.</li></ol><div style="text-align: justify;">Es muy sencillo crear un proyecto de una aplicación web basada en struts con Netbeans 5.5, ahora vamos a hechar un vistazo a los documentos más importantes del proyecto:<br /><br /><span style="color: rgb(0, 0, 153);"><span style="color: rgb(0, 0, 0);">El documento</span> <span style="font-weight: bold; font-style: italic;">web.xml<br /><br /></span></span><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqLMW4GhWIf52L3mw3ES1KoMDDruZDhEQ2UNegqHanKiuEWblzbFSnmzb4F4nYEZ5kAPExdWMMfbklP-sQ8cs4cXDq1HTBzFXmbCWJzKAky_wovBymbbIFywM0zPzqZL6GYGLvRVtdPTQ/s1600-h/webxml.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqLMW4GhWIf52L3mw3ES1KoMDDruZDhEQ2UNegqHanKiuEWblzbFSnmzb4F4nYEZ5kAPExdWMMfbklP-sQ8cs4cXDq1HTBzFXmbCWJzKAky_wovBymbbIFywM0zPzqZL6GYGLvRVtdPTQ/s400/webxml.jpg" alt="" id="BLOGGER_PHOTO_ID_5091917021715780162" border="0" /></a><br /><br />En este documento se establecen las directivas de la aplicación, como ya sabemos todo proyecto basado en servlets debe incluir este documento y todos los servlets del proyecto deben ser declarados aquí, de esta forma el contenedor (tomcat) podrá acceder a ellos.<br />A grandes rasgos el <span style="font-style: italic;">web.xml</span> que utilizamos con struts se compone de las siguientes directivas:<br /><br /><ol><li><span style="font-weight: bold;">servlet</span> contiene la definicion de los servlets que residiran en el contexto.</li><ul><li> <span style="font-weight: bold;">servlet-name</span> el nombre utilizado para hacer referencia al servlet en este caso se llama action<br /></li><li><span style="font-weight: bold;">sevlet-class </span>el nombre de la clase del servlet, para struts la clase se llama <span style="font-weight: bold;">ActionServlet</span>, todos los peidos que lleguen a nuestra aplicacion struts deben pasar atraves de un <span style="font-style: italic;">action.</span></li><ul><li><span style="font-weight: bold;">param-name</span> nombre del parametro</li><li><span style="font-weight: bold;">param-value</span> el path en donde recide el archivo de configuracion <span style="font-style: italic; color: rgb(0, 0, 153);">struts-cofig.xml</span> que es el archivo que regira el contexto del framework</li></ul><li><span style="font-weight: bold;">url-pattern </span>el patrón permite asociar al Servlet de struts con todos los pedidos que tengan la extención <span style="font-weight: bold; font-style: italic;">.do </span><br /></li><ul><li>Es muy importante recordar que de ahora en adelante todos las ligas de referencia que utilicemos en nuetro proyecto se deben asociar a una acción , osea en lugar de mandar llamar a la página <span style="font-style: italic; font-weight: bold;">pagina.jsp</span> deberemos asociarla a una <span style="font-style: italic;"><span style="font-weight: bold;">accion.do</span> </span>que generará la vista ( no preocuparse si esto suena confuso, pues aún n hemos visto como hacer esto, pero digamos que en este concepto radicará el exito de entender ó no el funcionamiento del framework)</li></ul><li><span style="font-weight: bold; font-style: italic;">wlecome-file </span>El archivo de la página que se visualizara al ingresar al entorno de nuestra aplicación creada con struts.</li></ul></ol><br /> (Nota: Por ahora solo veremos estos parametros)<br /><br /><br />Bueno, ahora vamos a ver que pasa despues de haber creado nuestra aplicación, así sin habe tecleado una sola línea de código, hacemos clic sobre el icono "Debug Main Project" o con la tecla F5:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLBIVQHwqXBe5vMAVHxtmYBRdh7ikeThl2tIiwGpd3PIz-7B5LzlLMAQBPwMEVq3nk5BNukJt7CLnJ5xTnJ2cHn3W3vcVjMGKE2hujU9xMrPggbcayV5L7rt9I9OroDKY-bWv0_-74T0o/s1600-h/Picture+5.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLBIVQHwqXBe5vMAVHxtmYBRdh7ikeThl2tIiwGpd3PIz-7B5LzlLMAQBPwMEVq3nk5BNukJt7CLnJ5xTnJ2cHn3W3vcVjMGKE2hujU9xMrPggbcayV5L7rt9I9OroDKY-bWv0_-74T0o/s400/Picture+5.jpg" alt="" id="BLOGGER_PHOTO_ID_5091924602333057618" border="0" /></a><br />Se compilará y hará el despliege del proyecto (deploy), el navegador por defecto (Firefox para este caso) es lanzado y podremos entrar al entorno de la aplicacion que en este caso tiene como pagina de beienvenida la página <span style="font-weight: bold; font-style: italic;">"index.jsp", </span><span>cuyo codigo es el siguiente</span><span style="font-weight: bold; font-style: italic;">:<br /><br /><br /></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhosxW14ydk0kLdv2XuzOf_fgDfcLxvIU4by1zfkiY7wKbXMxSeWYgpXPkGR0hcRxjYelOahGyKtO6o8IaumcHZ0e_wCqGLgMDCH3XZaYK-eFpOVCISJMKy1l_4xauyLesiy3XOsIhKN14/s1600-h/index.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhosxW14ydk0kLdv2XuzOf_fgDfcLxvIU4by1zfkiY7wKbXMxSeWYgpXPkGR0hcRxjYelOahGyKtO6o8IaumcHZ0e_wCqGLgMDCH3XZaYK-eFpOVCISJMKy1l_4xauyLesiy3XOsIhKN14/s400/index.jpg" alt="" id="BLOGGER_PHOTO_ID_5091926187175989858" border="0" /></a><br />Notemos que tiene una liga que hace referencia a la url : <span style="font-style: italic; font-weight: bold;">"./Welcome.do"</span> , pero en donde rayos esta ese documento?, en realidad no es un dovumento, sino una referencia que Netbeans carga en el struts-cofig.xml y que apunta por así decirlo hacia un archivo JSP que se llama <span style="font-style: italic; font-weight: bold;">"welcomestruts.jsp" </span><span style="font-style: italic;">, </span>veamos que si hacemos clic sobre la liga, la barra de navegación del browser mostrara la siguiente URL :<span style="font-weight: bold; color: rgb(0, 0, 153);"> http://localhost:8084/ToolShop/Welcome.do<br /><br /><br /></span></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin0rR0szw7PvhtQnxuMrpMTliYLBelUwLbPc3ZjBa3iK0QUeW_B6kEKuGgBtbEOYQCAYu6AXfV1p7B_l1RhdeRBQjvEaGoOlH1DAW3-Fn_kMdZX4LiLBQnVgwSv8EBa22qcR0nqhBsvm0/s1600-h/welcome.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin0rR0szw7PvhtQnxuMrpMTliYLBelUwLbPc3ZjBa3iK0QUeW_B6kEKuGgBtbEOYQCAYu6AXfV1p7B_l1RhdeRBQjvEaGoOlH1DAW3-Fn_kMdZX4LiLBQnVgwSv8EBa22qcR0nqhBsvm0/s400/welcome.jpg" alt="" id="BLOGGER_PHOTO_ID_5091929704754205298" border="0" /></a>Ahora vamos a ver como lograr que esto pase. Abrimos el documento ./WEB-INF/struts-config.xml<br /><span style="font-weight: bold;"></span>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-3134882933347130719.post-39635954278448997222007-03-01T08:54:00.000-08:002007-03-01T10:02:23.771-08:00Stored Procedures con Oracle10 EXProcediniento sencillo que busca un registro coincidente con el argumento <span style="font-family:courier new;">p_email</span> que proviene de un servlet, si no encuntra coincidencias, creará un nuevo registro.<br /><br /><span style="font-family:courier new;"><span style="color: rgb(0, 0, 153);">CREATE OR REPLACE PROCEDURE</span> INSERTA_CLIENTE(p_idCliente out Cliente.idCliente<span style="color: rgb(0, 0, 153);">%TYPE</span>, </span><span style="font-family:courier new;">p_nombre in Cliente.Nombre</span><span style="font-family:courier new;"><span style="color: rgb(0, 0, 153);">%TYPE</span></span><span style="font-family:courier new;">,<br /></span><span style="font-family:courier new;">p_apaterno in Cliente.APaterno</span><span style="font-family:courier new;"><span style="color: rgb(0, 0, 153);">%TYPE</span></span><span style="font-family:courier new;">, </span><span style="font-family:courier new;">p_amaterno in Cliente.AMaterno</span><span style="font-family:courier new;"><span style="color: rgb(0, 0, 153);">%TYPE</span></span><span style="font-family:courier new;">, </span><span style="font-family:courier new;">p_email in Cliente.Email%TYPE,</span><br /><span style="font-family:courier new;">p_estado in Cliente.Estado</span><span style="font-family:courier new;"><span style="color: rgb(0, 0, 153);">%TYPE</span></span><span style="font-family:courier new;">,</span><span style="font-family:courier new;">p_ciudad in Cliente.Ciudad</span><span style="font-family:courier new;"><span style="color: rgb(0, 0, 153);">%TYPE</span></span><span style="font-family:courier new;">,</span><br /><span style="font-family:courier new;">p_pwd in Cliente.Pwd</span><span style="font-family:courier new;"><span style="color: rgb(0, 0, 153);">%TYPE</span></span><span style="font-family:courier new;">)</span><br /><br /><span style="color: rgb(0, 0, 153); font-weight: bold;font-family:courier new;" >AS<br /><br /></span><span style="font-family:courier new;">aux Cliente.idCliente%TYPE;</span><br /><br /><span style="font-weight: bold; color: rgb(0, 0, 153);font-family:courier new;" >BEGIN</span><br /><br /><span style="font-family:courier new;"> <span style="color: rgb(0, 0, 153);">SELECT</span> idCliente <span style="color: rgb(0, 0, 153);">INTO</span> aux <span style="color: rgb(0, 0, 153);">FROM</span> Cliente</span><br /><br /><span style="font-family:courier new;"> <span style="color: rgb(0, 0, 153);">WHERE</span> lower(email)= lower(p_email);</span><br /><br /><span style="font-family:courier new;"> p_idCliente:=-1;</span><br /><br /><span style="font-weight: bold; color: rgb(0, 0, 153);font-family:courier new;" >EXCEPTION</span><br /><br /><span style="font-family:courier new;"> <span style="color: rgb(0, 0, 153);">WHEN</span> <span style="color: rgb(204, 0, 0);">NO_DATA_FOUND</span> <span style="color: rgb(0, 0, 153);">THEN</span> <span style="color: rgb(0, 153, 0);">// (</span></span><span style="font-family:courier new;"><span style="color: rgb(204, 0, 0);"><span style="color: rgb(0, 153, 0);">NO_DATA_FOUND</span> </span></span><span style="font-family:courier new;"><span style="color: rgb(0, 153, 0);">es una constante de oracle) Si no encuentra ningun registro ...</span></span><br /><br /><span style="font-family:courier new;"> <span style="color: rgb(0, 0, 153);">INSERT</span> <span style="color: rgb(0, 0, 153);">INTO</span> Cliente <span style="color: rgb(0, 0, 153);">VALUES</span>(SEQ_IDCLIENTE.NEXTVAL,p_nombre,p_apaterno,<br />p_amaterno,p_email,p_estado,p_ciudad,p_pwd);</span><br /><br /><span style="font-family:courier new;"> <span style="color: rgb(0, 0, 153);">SELECT</span> SEQ_IDCLIENTE.CURRVAL <span style="color: rgb(0, 0, 153);">INTO</span> p_idCliente <span style="color: rgb(0, 0, 153);">FROM</span> dual; <span style="color: rgb(0, 102, 0);">//</span></span><span style="color: rgb(0, 102, 0);font-family:courier new;" >SEQ_IDCLIENTE.CURRVAL es un objeto de oracle que crea una, secuencia de mumeros, su uso tine ciertas restricciones,dual es umna tabla auxiliar de oracle que se crea temporalmente. </span><br /><br /><span style="font-family:courier new;"><span style="color: rgb(0, 0, 153);">COMMIT</span>;</span><br /><br /><span style="font-family:courier new;"><span style="font-weight: bold; color: rgb(0, 0, 153);">END</span> INSERTA_CLIENTE;<br /><br /></span>Finalmente el procedimiento devuelve un valor de salida llamado <span style="font-family:courier new;">p_idCliente</span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3134882933347130719.post-81933682608973467992007-02-23T08:31:00.000-08:002007-02-23T15:29:08.593-08:00Breves<span style="font-family:trebuchet ms;">Crear un Package Java con Console<br /><br />En la cabecera del archivo.java se anexa la siguiente instrucción:</span><br /><br /><span style="font-family:courier new;"><span style="color: rgb(0, 0, 153);">package</span> directorio_principal.sub_directorio1.subdirectorio_n;<br /><br /><span style="font-family:trebuchet ms;">En la consola:<br /><br /><span style="font-family:courier new;">javac -d . archivo.java</span><br /><br />Esta instrucción genera los folders y los integra en el calsspath del proyecto, de ahora en adelante compilaremos los archivos java que se deseen incluir en este package de esta forma.<br /><br /><br />Clases Abstractas<br /><br />Una clase abstracta tiene la característica de no poder ser instanciada debido a que sus métodos son abstractos es decir aún no han sido implementados o están vacíos para decirlo en una forma más simple, la forma de invocar una clase abstracta es extendiendola e implementando sus métodos en la clase extendida.<br /><br /></span></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3134882933347130719.post-57356647881719970852007-02-13T07:28:00.000-08:002007-02-13T15:50:38.957-08:00MySQL 5.0 en MacOSXEl paquete para MacOSX lo encontre aquí: <a href="http://www.mpimf-heidelberg.mpg.de/serviceEinrichtungen/itGruppe/datenbankServices/datenbankDownloads/appleMacintosh/index.html">MySQL 5.0</a>, actualmente tengo instalado Apache 2.0 con PHP 4 y Mysql 4 corriendo en una PowerPc G4 y todo ha ido de maravilla, todo el paquete se puede conseguir en <a href="http://www.serverlogistics.com/downloads.php">Server Logistics </a>en forma gratuita y su configuración es sumamente sencilla. Ahora toca instalar MySQL 5 para poder invocar Stored Procedures con Java.<br /><br />Para crear un procedimiento almacenado desde mysql:<br /><br /><span style="font-size:85%;"><br /><br /><span style="font-family:courier new;">mysql> delimiter // (para cambiar ";" por "//")</span><br /><br /><span style="font-family:courier new;">mysql> CREATE PROCEDURE p (out p int)</span><br /><span style="font-family:courier new;"> -> BEGIN</span><br /><span style="font-family:courier new;"> -> SELECT COUNT(*) INTO p FROM muestra; <- esta tabla existe en la BD -> END//</span><br /><br /><span style="font-family:courier new;">mysql> delimiter ;</span><br /><br /><span style="font-family:courier new;">**********************************************************************************</span><br /><span style="font-family:courier new;">Para crear un Stored Procedure un poco más útil:</span><br /><br /><span style="font-family:courier new;">mysql> DELIMITER //</span><br /><br /><span style="font-family:courier new;">mysql> CREATE PROCEDURE inserta(p int(1))</span><br /><span style="font-family:courier new;"> -> BEGIN</span><br /><span style="font-family:courier new;"> -> SET @id = p; </span><br /><span style="font-family:courier new;"> -> SET @muestra = HEX(p);</span><br /><span style="font-family:courier new;"> -> CREATE TABLE muestras(id int(1), muestra varchar(10));</span><br /><span style="font-family:courier new;"> -> INSERT INTO muestras(id, muestra) VALUE(@id, @muestra);</span><br /><span style="font-family:courier new;"> -> END//</span><br /><br /><span style="font-family:courier new;">Query OK, 0 rows affected (0.00 sec)</span><br /><br /><span style="font-family:courier new;">mysql> DELIMITER ; </span><br /><span style="font-family:courier new;">mysql> CALL inserta(1);</span><br /><br /><span style="font-family:courier new;">Query OK, 1 row affected (0.05 sec)</span><br /><br /><span style="font-family:courier new;">mysql> SELECT * FROM muestras;</span><br /><span style="font-family:courier new;">+------+---------+</span><br /><span style="font-family:courier new;">| id | muestra |</span><br /><span style="font-family:courier new;">+------+---------+</span><br /><span style="font-family:courier new;">| 1 | 1 |</span><br /><span style="font-family:courier new;">+------+---------+</span><br /><span style="font-family:courier new;">1 row in set (0.00 sec)<br /><br /><span style=";font-family:times new roman;font-size:100%;" >Manejo de excepciones con Stored Procedures </span><br /><br />mysql-> CREATE PROCEDURE creatabla_m()<br />BEGIN<br />DECLARE error_tabla CONDITION FOR SQLSTATE '42S01';<br />DECLARE CONTINUE HANDLER FOR error_tabla<br />BEGIN<br />SELECT 'La tabla muestras ya existe, esta se volvera a crear';<br />DROP TABLE muestras;<br />CREATE TABLE muestras(id int(1), muestra varchar(10));<br />END;<br />BEGIN<br />CREATE TABLE muestras(id int(1), muestra varchar(10));<br /><br />END;<br />INSERT INTO muestras (id, muestra) VALUES (1, 'nuevo');<br />END//</span></span><span style="font-size:85%;"><span style="font-family:courier new;"><br /></span></span>Unknownnoreply@blogger.com0