Mostrando entradas con la etiqueta Netbeans. Mostrar todas las entradas
Mostrando entradas con la etiqueta Netbeans. Mostrar todas las entradas

noviembre 23, 2011

Using PHP like a JavaWeb Project on Tomcat server



Recuerde que..
Este blog esta desarrollado en idioma español pero utilizando Google Traductor puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a Integracion Google.

Continuando con nuestras investigaciones y pruebas de tecnologías Web vigentes, nos encontramos con la librería Quercus, que es una implementación Java de PHP (de PHP  versión 5.3.2 para Quercus 4.0.18 vigente a fecha 30.09.2011), aunque aunque debemos tener presente que la Tecnología Caucho promotora de la librería, y del servidor Resina, se muestra bastante vigente y activa, principalmente a causa que éste servidor puede ser  utilizado para soportar PHP en desarrollos Java y de Google Appengine, como una librería en el primer caso y como una aplicación en el caso del SDK de Google Appengine para Java (resaltando que Quercus es uno de los componentes principales del servidor Resina, que es un servidor de aplicaciones JSP y servlets similar a Tomcat ó Glassfish, y que puede colaborar de manera transparente con el servidor Jetty empleado por GAE).

Lla infraestructura cloud de Google Appengine soporta actualmente Python y Java; lenguajes que nos permiten entre otras cosas, conectarnos y trabajar con el datastore de Appengine, que es una base de datos escalable y de alta confiabilidad desarrollada Google (definido con el concepto "big table" ); asimismo, a partir de Octubre del 2011, Appengine también soporta lo que se ha denominado Google Cloud SQL, que corresponde a la base de datos relacional MySQL, adecuada para obtener de ella una alta disponibilidad y confiabilidad dentro de la infraestructura de Google ( libre de mantenimiento y administración de parte de los usuarios de nuestros aplicativos ), y ya nos debe resultar familiar que dentro el entorno de desarrollo Java usualmente resulta fácil conectamos a estas bases de datos utilizando JDBC, método que ahora también es soportado por Google Appengine (en el caso de usuarios Phyton se puede utilizar DB-API con el mismo propósito).

Resulta también cierto afirmar que, para los desarrolladores Web en general, hablar de conexiones a bases de datos MySQL es hacer referencia a  un proceso ahora muy difundidos, y que esta base de datos da soporte a muchos proyectos opensource muy difundidos como son los gestores de contenidos Drupal, Wordpress, Elgg, Joomla; phpBB y muchas otras aplicaciones desarrollados para el Back-End.PHP+MySQL, y es importante destacar asimismo que, si nuestra plataforma de desarrollo mantiene soporte a PHP, pues  nos permitiría tener acceso a todos esos proyectos y "servicios sociales". Sería  entonces posible la opción de poder utilizar todos estos desarrollos dentro de la infraestructura de Java, y de los servidores de servlets y JSP como Tomcat ó Glassfish (los que son también muy difundidos en empresas y organizaciones corporativas), e incluso también dentro de la infraestructura de Google Appengine mediante el SDK de Java, y conectarnos con la novedosa infraestructura Google Cloud SQL, e incluso con el mismo datastore de Google Appengine, y para ello, en primer lugar, debemos conseguir utilizar PHP como parte de un proyecto JavaWeb, y dentro de la plataforma de desarrollo de un servidor de aplicaciones ( al igual como en el entorno de los servidores IIS utilizamos PHP con ASP.Net y C# mediante WebMatrix )..... y todo esto es posible mediante Quercus..

Tenemos que tener en cuenta que al ser Quercus una codificación Java del lenguaje PHP, nuestros proyectos que utilicen código PHP ya no se comportaría como un lenguaje interpretado, sino como "lenguaje compilado" durante su ejecución en un servidor de aplicaciones, con ello se lográ mejorar el rendimiento y tiempo de  respuesta de nuestros aplicativos desarrollados con PHP dentro de un proyecto JavaWeb, mejorando todo el rendimiento de nuestro aplicativo, y con ese objetivo (y para que podamos efectuar nuestras comparaciones), es que vamos a "migrar" nuestros codelabs que presentamos como parte de nuestras pruebas del Back-End PHP+MySQL para que trabajen ahora en un servidor Tomcat, cargándolos como proyectos JavaWeb usando el IDE Netbeans, que como ya hemos indicado, nos facilita la configuración y despliegue de nuestros desarrollos en dicha plataforma.

Quercus es una tecnología que vió la luz desde el año 2006,  y el 2009 tuvo relevancia junto con el lanzamiento del SDK de Java para Google  Appengine, y después de una difusión bastante promisoria,  inclusive con una presentación en el "Google I/O" de ese año (donde mostraron una "migración" de Wordpress que corre completamente dentro de infraestructura de Google con cambios mínimos de código PHP, y aunque la aplicación colgada en Appengine a veces sobrepasa la cuota libre proporcionada por Google para su desarrollador, nos consta su funcionamiento), pues parece que la aplicación no ha tenido suficiente soporte de parte de sus desarrolladores  y de la comunidad en general, para lograr las correspondientes facilidades y poder continuar con las pruebas y el desarrollo de aplicaciones, pero creo que todo puede variar con el reciente lanzamiento de Google Cloud SQL, con lo que poder utilizar PHP dentro de proyectos JavaWeb tanto en aplicaciones para nuestros propios servidores y dentro de la infraestructura de Google, y ahora en ambos casos,  prácticamente sin cambiar nada de código PHP, pues ahora desde esta perspectiva,  pensamos que ésta tecnología si puede llegar a convertirse en una opción bastante importante para considerar y creemos importante aportar al respecto... y por ello hicimos nuestras propias pruebas que ahora presentamos.


Para nuestros codelabs de esta oportunidad, vamos a mantener la opción de poner en cada proyecto lo necesario para que funcionen directamente ( solo siendo necesario configurar nuestras conexiones a MySQL en los codelabs que lo requieran, pero por ello el peso de nuestros proyectos se han incrementado a casi 10Mb, y  que corresponden casi todo al archivo resin.jar de Quercus que pesa mas dei 9Mb); entonces, para disfrutar de este codelab solo será necesario cargar los proyectos a nuestro Netbeans, como  proyectos JavaWeb con fuentes existentes. Vale decir, en el caso de los dos primeros codelabs que nos muestran la forma de uso de Quercus y de código PHP sobre una plataforma de desarrollo Java, pues deberá cargar y ejecutar directamente los proyectos... pero en los casos de nuestros codelabs Grid-MySQL, Wizard-sample e Integración Google 3ra. parte (Int-Google03), pues si ya hubiésemos instalado y puesto en funcionamiento nuestros codelabs anterioires correspondientes al uso del Back-End PHP+MySQL (ó del uso de PHP sobre servidores IIS mediante WebMatrix), en ese caso, los ejercicios podrán ser ejecutados y probados directamente, pero si Ud. estimado lector, ha llegado directamente a este codelab, deberá crear las bases de datos MySQL requeridas y verificar sus respectivos parámetros de conexión (host, usuario, password y las bases de datos utilizadas en estos), para lo cual también entregamos los achivos *.sql  correspondientes.

Ya desde nuestra primera entrada empezando desde cero que dió inicio a las investigaciones de nuestro proyecto Integración Google, les habíamos indicado que el lenguaje PHP, integrado completamente al servidor Apache en nuestra instalación de Appserv, como un componente del servidor, y que incluso podía ser instalado de manera independiente; el caso es que al instalar Appserv, u otro servidor similar LAMP, WAMP, etc, el lenguaje PHP ya viene configurado y listos para usar en nuestros desarrollos; pero ahora, para nuestras pruebas de Quercus,  y  ver nuestros códigos PHP trabajando en un proyecto JavaWeb, no requerimos instalar ni configurar nada nada sobre el servidor... Quercus como ya hemos indicado, es una librería que viene incluida en el servidor Resina, y a la que podemos acceder copiando el archivo resin.jar desde  la carpeta bin de nuestra descarga del servidor (ó tambien del war de nuestra descarga de Quercus; que como podrán observar, son el mismo archivo). Asi que en esta oportunidad, nuestro primer codelab es nuestro proyecto myQuercus, creado a partir del war de Quercus versión 4.0.18 (30.09.2010), el cual para adecuarlo a las nuevas versiones de la biblioteca, solo bastará con reemplazar el archivo resin.jar por el correspondiente de nuestras descargas de la pagina oficial de caucho.com


Instalando nuestros codelabs "myQuercus y PHP-with-Java" en Netbeans para ejecutar sobre el servidor Tomcat.

Como se indica, tenemos por supuesto que haber instalado en nuestro ordenador Netbeans y el servidor Tomcat, y si no lo han efectuado, conviene que den una lectura detallada e incluso ejecuten nuestro codelab Usando el Back-End Java+MySQL: Iniciandonos, donde se detalla el proceso y se ejecuta nuestros codelabs Integración Google 1ra. y 2da. parte, los que al no contener codificación Java ni PHP, son directamente ejecutados sobre esta plataforma y nos muestran el funcionamiento de los elementos del framework ExtJs que venimos empleando en nuestros desarrollos ( como maquetación utilizando viewport, Menu TreePanel, windows, paneles, stores y grillas, etc), y el empleo de algunas de las API de Google como autenticación, manejo de spreadsheets de Google Docs, visualizaciones y Mapas de Google...

Estos codelabs para ser instalados en nuestro IDE Netbeans y ser ejecutados sobre el servidor Tomcat, deben ser primero descargados sobre una carpeta que podríamos denominar "Quercus" ( el material de apoyo indicado a continuación ),  y con  lo que podremos crear nuestros proyectos a partir de las fuentes proporcionadas, y asimismo debenos indicar, durante el proceso y en la pantalla de configuración correspondiente, que utilizaremos el servidor Tomcat para ejecutar nuestros proyectos..

Material de Apoyo : 
( do click on blue icons to download )

myQuercus.rar, que corresponde a nuestra adaptación del war descargado de la pagina oficial de Quercus para ser utilizado con Netbeans, y que al ejecutar como proyecto JavaWeb podrán observar la información disponible proporcionada que hemos adecuado, especialmente la correspondiente a la forma de actualización a las nuevas versiones de la librería, pues al ser un proyecto bastante vigente y activo, como hemos indicado por su empleo en el entorno de desarrollo del SDK Java de Google Appengine, es continuamente actualizado... e incluso, en este año 2011 han logrado el reconocimiento Java EE6 Web Profile Certified with Healht System & Cloud Support (pueden revisar la cronologia), lo que nos puede dar una idea del real potencial y las posibilidades de esta librería.





PHP-with-Java.rar, que corresponde a nuestra muestra de como utilizar código PHP conjuntamente con Java, y para ello ejecutamos la función phpinfo() que nos muestra la versión PHP que utiliza nuestra librería Quercus instalada (que puede ser diferente dependiendo de nuestra version de Quercus que utilicemos); además de datos y variables del entorno PHP disponibles para nuestros desarrollos. Este codelab también solo necesita ser cargado y ejecutado a nuestro Netbeans para funcionar.





Instalando nuestros codelabs "Grid-MySQL, Wizard-sample e Integracion Google 3ra parte" del Back-End PHP + MySQL, en Netbeans para ejecutar sobre Tomcat:

Nuestros codelabs referidos al uso del Back-End PHP+ MySQL esta dividido en tres partes, los que son:   


1.- Iniciándonos (Grid-MySQL.rar ), que nos muestra un modelo CRUD -opciones básicas de Crear, Modificar, Borrar, Buscar e Imprimir-, sobre una tabla de una base de datos MySQL, considerando componentes dinámicos, y es el que corresponde a nuestro codelab Grid-MySQL indicado.

2.- Temas de Seguridad y Wizards (Wizard.sample.rar),  que muestra el mismo desarrollo anterior pero considerando una pantalla de acceso para poder utilizar dicha aplicación...y a la que le hemos acondicionado componentes dinámicos respecto al manejo de idioma de nuestro navegador ( la API language de Google, cuyo efecto podemos observar al cambiar el idioma de nuestro navegador...para ello, siga la ruta : Herramientas, Opciones, Avanzado, Contenido Web y Configuración de Idiomas en Google Chrome si están utilizando dicho navegador por supuesto);

y por último, tenemos:

3.- Nuestro codelab Integración Google 3ra parte (Int-Google.rar), que nos muestra un Modelo TreePanel de visualizaciones Google y del framework ExtJs, además de Google Maps, y a nuestro modelo CRUD de Mantenimiento de la tabla de presidentes utilizada en los dos primeros codelabs referidos, la que hemos unido al ejercicio en este caso, como muestra de como integrar nuestros componente desarrollado en nuestros proyectos.

Cabe reiterar que estos codelabs corresponden a los considerados en nuestros ejercicios sobre el Back-End PHP+ MySQL pero ahora instalados sobre el IDE Netbeans para ser ejecutados sobre el servidor Tomcat, para lo que debemos crear los proyectos a partir de las fuentes proporcionadas (y que como ya hemos indicado, debemos descargar sobre una carpeta que podemos denominar "Quercus"), y asimismo no debernos olvidarnos de indicar durante el proceso y en la pantalla de configuración correspondiente, que utilizaremos el servidor Tomcat para ejecutar nuestros proyectos..

Vale recordar que, como estos codelabs corresponden al uso de la base de datos MySQL, éste es un componente nativo de un servidor AppServ; entonces para el caso de las bases de datos requeridas para los ejercicios, recomendamos crearlas sobre el mismo servidor MySQL ya instalado con  Appserv, pues sobre un mismo ordenador no tiene ningún sentido tener instalado varios servidores MySQL ) aunque es posible, si se configuran para puertos diferentes ); y asimismo, que para crear las bases de datos debemos utilizar la herramienta phpMyAdmin también disponible en nuestro servidor Appserv con los archivos *.sql entregados en cada ejercicio.

Material de Apoyo : 
( do click on blue icons to download )

Grid-PHP-MySQL.rar, que corresponde a nuestro codelab "iniciándonos" sobre el Back-End PHP+ MySQL,  proyecto desarrollado tomando como referencia un tutorial de la pagina Oficial ExtJs, cuyo código por supuesto hemos mejorado y que utiliza la versión ExtJs-3.4.0; y que nos presenta un modelo CRUD -opciones básicas de Crear, Modificar, Borrar, Buscar e Imprimir-, sobre una tabla de una base de datos MySQL, considerando componentes dinámicos.


Using the Back-End PHP+MySQL (Getting Started) corriendo como proyecto JavaWeb sobre nuestro servidor local Tomcat :



Este codelab trabaja con la base de datos "tutorial", que si no la hemos creado para nuestros otros codelabs, deberá crearla primero con la herramienta phpMyAdmin de Appserv, y luego importar sobre ella las tablas y datos requeridos desde el archivo pdtes_usa.sql incluído en la descarga.

Recuérdese asimismo que en el archivo database.php, y en la instrucción msql_connect debemos indicar los datos para conectarnos a la base de datos (host, usuario y password), y en la instrucción msql_select_db,  indicar el nombre de la base de datos donde hemos importado las tablas y datos contenidos en pdtes_usa.sql ("tutorial" es el nombre de la base de datos que hemos utilizado).

Pueden también revisar nuestra entrada : Using the Back-End PHP+MySQL ( Getting Started ) donde mostramos con mayor detalle el contenido de cada componente de este codelab, aunque en esa oportunidad, las mostramos para instalar y hacer funcionar este proyecto sobre el entorno de desarrollo de Appserv ( servidor Apache+ PHP+ MySQL), pero cuyos conceptos son completamente compatibles para utilizarlos sobre este entorno de desarrollo de WebMatrix, por cuanto, en dicha plataforma, en ese caso, solo utilizamos al servidor IIS  y el lenguaje PHP instalado sobre ella... y el funcionamiento del servidor IIS es similar al del servidor Apache al desplegar código PHP, y esto porque en nuestro codelab no estamos utilizando ningún código ASP.Net ó C#.

Wizard-sample.rar, que corresponde a nuestro codelab "Temas de Seguridad y Wizards (acceso)" referidos al Back-End PHP+ MySQL,  donde mostramos los fundamentos para empezar a diseñar nuestros sistemas y proyectos tomando en consideración pantallas de acceso (Wizards) y revisando que opciones de seguridad debemos empezar a considerar en ellos. Este codelab hace referencia a como poder acceder (ó restringir el acceso a usuarios no autorizados) a nuestro modelo CRUD del codelab anterior, y para ello hace uso de los datos registrados en la tabla usuarios creada al importar pdtes_usa.sql sobre la base de datos "tutorial" ya creadas. Todo el código empleado en el codelab es PHP sobre HTML y Javascript, los que mediante Quercus on ahora soportados como proyecto JavaWeb, que cargaremos sobre Netbeans y ejecutaremos sobre nuestro servidor local Tomcat.

Para este codelab en la base de datos Tutorial debemos agregar manualmente la tabla usuarios que debe tener como mínimo los campos: ID (int, primary key e auto-incremental(, usuario, varchar(15); y password también varchar(15)... y allí indicar los valores de nuestro usuario y password de acceso (passer, passer por ejemplo). Las generalidades de configuración y conexión a la base de datos Tutorial los podemos observar al inicio del archivo index.php (donde nos conectamos a la base de datos mediante mysql_connect y mysql_select_db), y a partir de la línea 242 del código, donde se verifica que nuestro nombre de usuario y password se encuentren registrados en la tabla usuarios.

Using the Back-End PHP+MySQL (Wizard and safety themes) corriendo como proyecto JavaWeb sobre nuestro servidor local Tomcat :

Go to Wizard-Sample Codelab...


Pueden también revisar nuestra entrada : Using the Back-End PHP+MySQL ( Wizard & Safety themes) donde mostramos con mayor detalle el contenido de cada componente de este interesante codelab, y en que se detallan una de la principales formas de uso del lenguaje PHP en lo que respecta al manejo de base de datos, cookies y enlace entre diferentes páginas PHP.. y por supuesto, como ya hemos indicado, este proyecto lo podemos correr desde WebMatrix como ya hemos indicado...


Int-Google03.rar, que corresponde a nuestro codelab "Integracion Google 3ra parte" referidos al Back-End PHP+ MySQL, donde mostramos los fundamentos para empezar a diseñar nuestros sistemas y proyectos tomando el consideración el enfoque de uso que nos ofrece el framework ExtJs (maquetación utilizando viewport, uso de un menu TreePanel, al que se accede mediante una pantalla de acceso ó Wizard, permite la declaración y manejo de stores,  y mostramos la forma de conectarnos a una base de datos MySQL utilizando PHP en este caso, lo que finalmente nos permiten acceder a las diferentes visualizaciones  Google y ExtJs que hemos venido presentando en nuestros codelabs anteriores, incluyendo también al Modelo CRUD de Mantenimiento del listado de presidentes de los dos ejercicios anterioires que forman parte de esta entrega.

Este ejercicio trabaja con las bases de datos IGCodelab contenidos en igcodelab.sql (datos de productos de belleza), y la base de datos Tutorial (donde tenemos registrados a los presidentes USA contenidos en pdtes_usa.sql). Pero en esta oportunidad, el nombre y password del usuario para acceder al Modulo son los contenidos en la tabla usuarios de la base de datos IGCodelab. Los datos que conexión a la base de datos IGCodelab, y la grabación de cookies empleadas a lo largo del modulo, son detalladas en drivers.php, y el chequeo del usuarios se detalla en database.php en la función getuser(), a partir de la linea 63 del código.

Integracion Google 3ra. Parte corriendo como proyecto JavaWeb sobre nuestro servidor local Tomcat :



Pueden también revisar nuestra entrada Integracion Google (3ra parte) donde mostramos con mayor detalle el contenido de cada componente de este ejercicio...

NOTAS DE TRABAJO :


1.- Los ejercicios de este codelab funcionan sin mayor problema tal como los presentamos, pero para los codelabs Grid-MySQL e Int-Google03, como podrá observarse, los archivos *.php involucrados utilizan codificación UTF-8 (en el Back-End PHP+MySQL sobre servidores Apache utilizábamos codificación ANSI). ... Ocurre que cuando se trabaja con cookies (como es el caso de estos codelabs), puede haber restricciones para el uso de la función setcookie(), por cuanto PHP por defecto, en un servidor Apache, restringe las salidas del buffer del servidor luego que se haya cargado o ejecutado algun script HTML... y en el caso de estos proyectos JavaWeb, que implementan PHP mediante el uso de Quercus, no existen estan restricciones, ello aún cuanto, como podrán observar, en el archivo de configuración web.xml se ha configurado a nuestros archivos y scripts *.php para que trabajen con codificación UTF-8.

Cuando trabajamos con WebMatrix no ocurren estos problemas y es indiferente que nuestros archivos *.php sean codificados UTF-8 ó ANSI, pero como siempre, debe verificarse al ejecutarlos su correcto funcionamiento incluso antes de su puesta en producción para evitar contratiempos.

2.- Si revisan ahora con detalle los códigos de nuestros ejercicios, podrán observar, tal vez con sorpresa, que no hay ninguna variación respecto a los códigos presentados para ser ejecutados en  las otras que hemos venido utilizando  ( servidor Apache - PHP con Appserv, y servidor IIS + PHP con WebMatrix), y realmente sólo cambia la presentación de cada proyecto, vale decir, la adaptación que hemos efectuado para adecuarlos como proyectos JavaWeb, con la inclusión de la carpetas WEB-INF (donde se encuentra la carpeta lib que contiene nuestra librería resin.jar, y donde configuramos a través de web.xml el despliegue de nuestros servlets y librerías de nuestra aplicación en el servidor Tomcat); y de la carpeta META-INF, que contiene a context.xml, mediante el cual identificamos a nuestra aplicación en el servidor.

3.- Cabe resaltar que utilizando esta librería, y en la forma como lo utilizamos en nuestros codelabs (sobre un servidor como Tomcat ó sobre Glassfish), podríamos instalar en nuestros servidores de aplicaciones locales a proyectos sociales bastante conocidos como Drupal, Wordpress, Joomla, phpBB, etc. sin cambiar en nada el código de esos aplicativos y consiguiendo incluso un mejor rendimiento al trabajar PHP como un "lenguaje compilado" (apúntese que en las plataformas de desarrollo LAMP ó WAMP, PHP es un "lenguaje interpretado"). Lo mismo podríamos hacer si se considera utilizar el servidor Resina, y correr nuestros desarrollos Java y PHP, ó proyectos combinados de ambos, sobre dicha plataforma.

4.- Como indicamos, el archivo resin.jar puede ser copiado de la descarga del servidor Resina (carpeta bin), ó del war de la descarga de la página de Quercus. Recomendamos bajarla desde esta última opción por cuanto, en un proyecto JavaWeb instalado en nuestro IDE Netbeans, no resultan necesarios los componentes de java que se incluyen en el war, pero al trabajar con Google Appengine, con el SDK de Java y también con el IDE Netbeans, en ese caso, la carga de nuestros proyectos principalmente al hacer nuestras pruebas, en ese caso puede ser necesario trabajar con ANT y considerar todos los componentes de Java incluídos en el war de nuestra descarga, y los que utilizaremos en nuestra próxima entrada que nos mostrará como trabajar con PHP en Google Appengie, utilizando por supuesto, el SDK de Java de GAE y Quercus...

Saludos
@Mlaynes




octubre 02, 2011

Using the Back-End Java+MySQL: Instalando sdsimple..



Recuerde que..
Este blog esta desarrollado en idioma español pero utilizando Google Traductor puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a Integracion Google.

...y bueno amigos, continuando con el Back-End Java(JSP)+MySQL, pero continuando con nuestra modalidad de presentación de "codelabs", vamos ahora a poner la valla bien alta presentando en esta oportunidad al proyecto sdsimple.

Que es el proyecto sdsimple? es una aplicación administrativa desarrollado bajo la modalidad "Todo a la Web" bastante compacta y completa para facilitar la administración y gestión de PYMES que se distribuye bajo los términos de la Licencia Pública General GNU (tal como está publicada por la Free Software Foundation; ya sea la versión 3 de la licencia, o (según su elección) cualquier otra versión posterior). Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; incluso sin las garantías de COMERCIALIZACIÓN o USABILIDAD O UTILIDAD PARA USOS PARTICULARES... las anotaciones son las textuales indicadas por Pedro Peña García (desarrollador del proyecto), a quien de esta humilde comunidad presentamos nuestros respetos... sdSimple se presenta como un sistema de facturación on-line y como la "gestión eficaz de tu negocio", y en este caso vamos a precisar los alcances del proyecto sdsimple para que sepamos que tenemos entre manos:

  • No solo es facturación, abarca compras, ventas, cobranzas, pagos y gestión de caja y bancos; que considero un modelo muy interesante y apropiado para empresas de servicios, o empresas que "legalmente" conforme a la legislación de cada país, por el monto de sus ventas y/o activos, no son obligadas a mantener control de Stocks ni activos (basicamente lo que conocemos como PYMES). Sdsimple no hace control de stocks -el costo de los stocks y de ventas se tendría que calcular por diferencia de inventario, como es usual y legalmente establecido para este tipo de negocios-  pero si registra los impuestos basicos involucrados en el proceso (IVA y retenciones), por supuesto todo esto depende de cada país y  puede ser suficiente, pero por poner un ejemplo, en Argentina parece existen mas impuestos y/o retenciones que considerar respecto al caso peruano, de acuerdo a solicitudes de amigos de esta comunidad que han llegado a instalar el proyecto y ponerlo en funcionamiento de acuerdo a sus necesidades.
  • El proyecto en sí tiene soporte multiempresa, pero nos da opción a un único código de acceso a cada una de ellas, asimismo solo considera un único correlativo para la facturación y otro para las compras, vale decir, tal como esta diseñado solo soporta un único punto de venta y de registro; es decir, esta realmente diseñado para ser usado directamente por los administradores del negocio.
  • No presenta un modulo de contabilidad pero por supuesto que conociendo al detalle el modo de funcionamiento del sistema, y las bases de datos que la componen (las que son intuitivamente identificables), pues podría fácilmente enlazar a una aplicación contable..
  • Esta desarrollado utilizando como Back-End Java(JSP) + MySQL, y por el front utiliza ExtJs-2.2, una versión bastante estable y totalmente compatible con la ultima version ExtJs-3.4 de su tipo distribuido por sencha.com

Prueba SdSimple on line:


  • URL : http://free.hostingjava.it/-igcode/ ( en evaluación por fallas en el servicio)

  • Alternativa :

    URL : http://mysdsimple.aws.af.cm/ ( New! )
    ( nuestro proyecto sdsimple corriendo sobre la plataforma Cloud de AppFog )

  • credenciales: usuario passer, password passer, para ambos casos
  • al ingresar, lea detalles de funcionamiento en la sección "readme" del menú..



sdsimple on AppFog Cloud


Algunas limitaciones de servicio teníamos con la instalación de nuestro proyecto sdsimple sobre freehostingjava.it, así que decidimos aprovechar la plataforma Cloud de AppFog, una PaaS publica muy difundida que acepta incluso servicios clouds privados, y que por supuesto, nos proporciona una cuota free mas generosa: hasta 2Gb de source code, 100Mb de almacenamiento MySQL (soporta también otras bases de datos SQL y No-SQL), 5Gb de data transfer mensual, y otros detalles que pueden revisar en el siguiente enlace)

Vale destacar en este punto que a diferencia de un servicio de hosting java convencional, en este caso, al tratarse de una PaaS, resulta imprescindible averiguar el nombre de la base de datos, del usuario y la contraseña que el servicio Cloud de AppFog nos proporciona al activar nuestra cuenta y crear nuestro servicio de base de datos (MySQL en este caso), y para ello nos resultó conveniente crear una aplicación "phpmyAdmin" y enlazarla (Bind it) al servicio MySQL creado y que utilizamos para nuestro "proyecto mysdsimple", y ya con phpmyAdmin instalado podemos crear, consultar y trabajar con nuestras tablas y datos de manera mucho mas fácil y eficiente, teniendo presente que para este caso, no consideramos ninguna opción de seguridad para la creación de las vistas al utilizar CREATE VIEW, con el objeto de simplificar su creación (los nombre de las bases de datos y usuarios autogeneradas son generalmente bastante largos).

Este ultimo punto indicado es importante para considerar porque el nombre de nuestra base de datos NO es el nombre del servicio MySQL que creamos, sino que éste se encuentra definido dentro de la variable VCAP_SERVICES que se crea al utilizar los servicios cloud de AppFog, y una forma muy practica de obtener este dato es creando en nuestra aplicación "phpmyAdmin" un archivo PHP que podemos llamar info.php (puede ser cualquier nombre), y que contenga como única instrucción phpinfo(); al ejecutarlo directamente desde nuestro navegador, desde la dirección de nuestra aplicacion "phpmyAdmin" por supuesto, obtendremos la pantalla de información PHP, y en ella, los valores de la variable VCAP_SERVICES (pueden también utilizar los métodos de código indicados en la documentación de AppFog)

Detalles de mysdsimple app desplegada en AppFog Cloud:
  • Servidor Apache Tomcat 6.0.35
  • JDK 7, version 1.7.0
  • mySQL version 5.5.31

y finalmente, hay que considerar que al trabajar con JDK7, al ejecutar nuestros comandos sql, debemos preparar nuestra declaraciones considerando el parámetro: Statement.RETURN_GENERATED_KEYS ó utilizar el método preparedStatement considerando ese mismo parámetro; y que con el objeto de recuperar las conexiones que se van agotando en el tiempo (time out), y durante la carga de nuestros proyectos JavaWeb, no olvidemos de considerar en la configuración de nuestro "pool de conexiones" los parámetros: validationQuery="SELECT 1" testOnBorrow="true", que resuelven estos problemas y evitan excepciones que podrían afectar el funcionamiento de nuestro proyecto..


Consideradas y planteadas las "limitaciones" del modelo de nuestro proyecto sdsimple, pasaremos a hablar de sus "virtudes" por cuando sdsimple es un verdadero proyecto cloud-computing que fácilmente podríamos adaptar para una gestión completa de un negocio o empresa PYME, por supuesto que haciendo las correcciones y/o adiciones que se requieran, pero principalmente considera que sdsimple nos facilita considerablemente todas las cosas que hay que tener presentes en un proyecto "completo" usando el Back-End Java + MySQL, y nos puede resultar un buen modelo para nuestros propios proyectos.

Debe resaltarse asimismo que, trabajar con Java no es lo mismo que trabajar con PHP que es un lenguaje de programación interpretado, diseñado originalmente y principalmente para la creación de páginas web dinámicas. PHP se usa principalmente para la interpretación del lado del servidor (server-side scripting) y por supuesto, para las conexiones con una diversidad bases de datos.. pero PHP se adapta muy bien con el servidor HTTP Apache -de uso casi generalizado- y viene ahora completamente integrado con él, como podrá fácilmente comprobar al revisar los miles de servicios hosting website y webservers que se promocionan por la red (y actualmente a costos bastante acequibles que incluso pueden ser menores US$5.00 mensuales, y en muchos casos Unlimited storage, unmetered transfer, and of course.. Unlimited domains.) ..pero el mundo Java no solo va asociado al mundo Web, con él pueden hacerse desde simples hasta complejos sistemas de escritorio, y con una perfomance comparable a la del lenguaje C, y por supuesto que con ella podemos desarrollar de todo: aplicaciones de escritorio, proyectos WEB, para moviles, y realmente para todo lo que se pueda conectar y/o asociar a una computadora... es un lenguaje muy potente, y su curva de aprendizaje no es tan sencilla, pero si usted estimado amigo lector ya ha llegado hasta etapa de nuestros codelabs (y se ha tomado la molestia de instalarlos, ejecutarlos y llegado a comprender), pues ya habra notado y convencido que mucho de lo que es desarrollo Web es como manejar una serie de multiples "paquetes" en diversos lenguajes y bajo determinados formatos y convenciones, que ya varios de ellos ya están desarrollados y listos para su uso... un ejemplo básico para nuestro caso es el manejo del formato JSON, que como han podido comprobar, las librerías que utilizamos para PHP ya están hechas y solo las utilizamos -como cuando utilizamos widgets, iframes, etc.- ..pues lo mismo sucede en el mundo Java... y lo mismo tambien con el mundo Python y otros ..y conociendo y manejando todos esos "paquetes" o modelos transversales a los entornos de desarrollo web, pues nos resultará mas sencillo, por poner un ejemplo, conectarnos a cualquier base de datos.. "leer", trabajar y mostrar su contenido como planteamos en nuestro proyecto, utilizando cualquier entorno de desarrollo, y utilizando frameworks como con ExtJs que hemos venido trabajando en nuestros codelabs.. y por supuesto que con otros frameworks también se puede llegar a lo mismo, pero la facilidad que pueda uilizar un mismo framework para diferentes entornos: PHP+MySQL, Java+MySQL, GAE-Python (Google AppEngine), e incluso con el "modernísimo" node-js/V8, que es Javascript pero por el lado del servidor, pues eso aún solo lo he comprobado con ExtJs.. aunando a lo anterior la posibilidad de integrarnos también a desarrollos para móviles utilizando Sencha Touch..

...volviendo al tema, finalmente ahora veremos como instalar el proyecto sdSimple en nuestro servidor local Tomcat, utilizando el IDE Netbeans para facilitarnos el trabajo, y poder tener al proyecto en un entorno "profesional" de desarrollo listo para que lo empecemos a revisar ..y empezar a planificar y realizar nuestras propias modificaciones y mejoras.... .por supuesto, que si han revisado nuestra entrada anterior ya deben tener una idea de como realizar todo el proceso, pero en esa oportunidad "cargamos" un proyecto que no estaba ligado al mundo Java (nuestros codelabs Integración Google 1ra y 2da parte), pero en esta oportunidad si vamos a utilizar códigos java y la base de datos MySQL que debemos haber instalado en los inicios de este proyecto Integración Google junto con Appserv (ó el entorno HTTP Apache, PHP y MySQL que hayamos elegido (WAMP ó LAMP), así que ahora solo quedan algunas cosas propias de dicho entorno que debemos considerar antes de proceder con la instalación.

 el caso es que el entorno de desarrollo Tomcat-Java-Netbeans no viene anexado a una base de datos en particular, así que podemos conectar a cualquier base de datos ya sea "local" o "remota" , es decir, disponible en nuestro equipo, en nuestra intranet o en la "nube" (además que desde el comienzo se menciono que el entorno de desarrollo AppServ no era sino la unión de tres grandes "sistemas" que nos facilitaba el proceso de configuración y enlace entre ellos, el servidor HTTP Apache, la base de datos mySQL y el lenguaje de programación PHP; pues ahora vamos a comunicarnos y mostrar a la base de datos MySQL sin utilizar HTTP Apache ni PHP  ...usando ahora Apache Tomcat y Java a través del entorno de desarrollo de Netbeans.

Si no tenemos instalado "Appserv" podemos proceder a instalar unicamente MySQL (si es posible), pero si no queremos trabajar directamente en el editor de comandos de MySQL, y trabajar con un entorno "gráfico" para el manejo de la base de datos como phpmyAdmin, pues necesitaremos también instalarlo por separado (también es posible), pero si queremos facilitarnos las cosas ..y probar todos nuestros "codelabs" anteriores, mejor procéda a la instalación de Appserv (u otro "servidor" similar), cuyos conceptos describimos en nuestro post empezando desde cero....


Material de Apoyo
( do click on blue icons to download )

myProject.rar (24,1Mb), que son las fuentes del proyecto SdSimple modificadas para corregirle unos defectos no críticos - la selección de tipo de "tema" por ejemplo - y para darle algunas prestaciones adicionales que a nuestro entender pueden ser importantes para el uso de SdSimple, como permitir que el IVA acepte decimales ( muchas gracias a 'Nash Bridges' de Argentina, amigo de esta comunidad ), y por supuesto, también hemos actualizado el framework ExtJs empleado a su versión Ext-3.4.0, la última compatible de sencha.com al código empleado en el proyecto SdSimple. Pueden revisar nuestra entrada el Potencial de ExtJs para mayores detalles al respecto.

leeme.txt, archivo readme elaborado por el desarrollador, que detalla el proceso de instalación original sugerido para el proyecto sdSimple ( para referencia ).

Cabe asimismo reiterar que estas "mejoras" efectuadas al proyecto sdSimple son mínimas y no definitivas ( a modo de demostración de las modificaciones que se quieran implementar ), y desde esta comunidad valoramos el esfuerzo y mérito de Pedro Peña García, desarrollador del proyecto, por haber realizado su diseño y programación, y para declararlo bajo licenciamiento GPL, hecho que apreciamos y reconocemos, y que nos permite ahora ponerlos a su alcance, que lo podamos instalar en nuestros propios servidores,  y que así realmente podamos observar con el debido detalle y en funcionamiento, un modelo "cloud computing" para la gestión administrativa de negocios PYME, y por supuesto, para que lo puedan considerar y/o emplear en sus proyectos y desarrollos personales bajo la plataforma Apache Tomcat + Java(JSP) + MySQL


NOTA : el empaquetado del proyecto es de 24.6Mb, y ha resultado algo pesado por la actualización a ExtJs-3.4.0 y por que hemos dejado en el proyecto todas las librerías necesarias para que el proyecto SdSimple pueda instalarse y funcionar sin mayores problemas ...es lo que esperamos, y lo que ha sido uno de los principales "problemas" de proyecto, por cuanto, instalar un proyecto Java tiene sus cosas... y ahora, solo queda empezar a detallar los pasos necesarios para su instalación en nuestro servidor local, lo que como hemos indicado y podrán intuir, es un proceso bastante similar a lo planteado para correr nuestros proyectos Integración Google 1ra y 2da sobre Apache Tomcat utilizando Netbeans, descrito en nuestro Codelab anterior de introducción al manejo básico del entorno de desarrollo Java(JSP)... a los que solo falta agregar algunas consideraciones propias de manejo del IDE Netbeans y de la base de datos MySQL.


Pasos para ejecutar la instalación.
( proceso resumido )


Paso 1
Crear la base de datos mySQL del proyecto

..desde nuestro servidor Appserv u otro similar, crear utilizando phpMyAdmin la base de datos myproject ( se crea vacía por supuesto), y cargar con la utilidad de importación, las tablas necesarias desde el archivo sdsimple.sql proporcionado y disponible en la carpeta descargada del proyecto. Solo la tabla "empresa" debe tener registrada la información de nuestra empresa de prueba, así como los datos usuario y password para acceder al sistema; "passer" y "passer" respectivamente por defecto, pero podemos modificarlos a nuestro criterio.. asimismo, podemos verificar el año de ejercicio y otros datos generales (solo los datos resaltados son críticos y necesarios para los efectos del caso).

NOTA IMPORTANTE :

Antes de iniciarse la importacion del archivo *.sql proporcionado, debe revisarse con detalle el caso de las vistas utilizadas; en este caso, el proyecto original sdsimple utiliza vistas con "Create View", y a las que ha agregado la opción: SQL SECURITY DEFINER que hace referencia al usuario con que nos conectamos a MySQL - root u otro que estemos utilizando - El caso es que, debemos cerciorarnos que el proceso de creación de las vistas sea efectuado correctamente sino tendremos probemas para trabajar las opciones de presupuestos, ventas, compras, cobros, pagos y movimientos bancarios.. puede tambien obviarse la opción de seguridad planteada eliminando la sentencia DEFINER=`admin`@`%` SQL SECURITY DEFINER en cada creación de vista.





Paso 2
Cargar nuestro proyecto al Netbeans

... un paso similar al realizado al "cargar" nuestros proyectos Integracion Google 1ra y 2da parte...recuerde que en este caso nuestro proyecto se denominará myproject, y debe indicar correctamente la ubicación de nuestra carpeta "web" y las otras solicitadas.. una vez cargado nuestro proyecto debemos ingresar las "propiedades" de nuestro proyecto e indicar que el formato de nuestra fuente Java será JDK5 ó superior; y asimismo que utilizaremos el servidor Tomcat para lanzar nuestro proyecto...


NOTA IMPORTANTE :

las fuentes proporcionadas del proyecto sdsimple son casi las mismas de las originales del proyecto pero adecuados para trabajar con la version 3.4.0 de ExtJS, pero los "jar" proporcionados solo permiten el correcto funcionamiento del proyecto sobre un servidor Tomcat 5.x y utilizando JDK5.. pero el proyecto puede facilmente actualizarse para que trabaje con Tomcat versiones 6.x y 7.x (incluso con JDK7 de Java); para ello, debe revisarse la Guia de Migración Tomcat, y que para nuestro caso significa que debemos grabar el archivo commons-logging-api.jar, de la librería Apache Commons Logging en la carpeta WEB-INF/lib de nuestro proyecto, dado que este servicio ya no es soportado directamente en los servidores Tomcat 6.x y 7.x (entre otros cambios que conviene revisar..).







Paso 3
Configuración del "Pool de Conexiones"

Paso muy importante que requiere una explicación del porque del proceso, y es el que nos permitirá finalmente ingresar al sistema y poder utilizarlo (caso contrario, solo podremos acceder a la pantalla de acceso y se nos denegará el acceso).. la configuración se realiza sobre el archivo "context.xml" que pueden ubicar en la carpeta "configuration files" del proyecto cargado ( ó dentro de la carpeta META-INF de "web" ); y allí deben verificar los datos de conexión a la base de datos MySQL que hemos creado en el primer paso (usuario y password principalmente, el contexto es Datasource por defecto por lo que no debemos cambiarlo excepto si llegásemos a instalar el proyecto en un servicio de hosting externo, en que generalmente se nos proporciona un nombre de contexto personalizado (o modifiquemos nosotros el contexto).



Paso 4
Configuración del Log del proyecto...

Paso importante para monitorear el funcionamiento "interno" del sistema a través de los mensajes de servidor Tomcat, especialmente si no llegásemos a realizar una instalación exitosa del proyecto y allí podremos detectar y corregir los principales errores de nuestra instalación ( observe que en nuestro caso configuramos la salida de nuestro log en la carpeta "Logs" de nuestro servidor Tomcat indicando la ruta completa; y por supuesto que podemos grabarla donde querramos, pero es importante revisar, con el editor de nuestra preferencia, los "mensajes" que arroja nuestro proyecto durante su carga y funcionamiento )



Paso 5
disfrutemos de nuestra instalación, y por supuesto...

que podemos hacer con SdSimple ?


si ya llegamos a ingresar al proyecto... aparte de la satisfacción de haber culminado el proceso ( observe que hay un historial bastante grande de casos de instalaciones no exitosas que pueden revisar en el mismo blog de la misma página oficial del proyecto SdSimple, que incluso ahora ya no esta activo ); pues aún quedan varios puntos pendientes y muy interesantes por revisar, como por ejemplo:

  • El método de acceso al sistema..
  • El modelo de conexion y trabajo con la base de datos MySQL (altas, bajas, modificaciones)
  • El método de impresión utilizado...
  • Manejo de servicios proporcionados como por mail.jar..
  • otros métodos utilizados...




..y ahora ..a planificar nuestras modificaciones y mejoras...

:/)


Saludos
@Mlaynes





septiembre 22, 2011

Using the Back-End Java+MySQL : Getting Started


Recuerde que..
Este blog esta desarrollado en idioma español pero utilizando Google Traductor puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a Integracion Google.

y empecemos ahora con el Back-End Java+MySQL, y su manejo no es por supuesto igual al de los servidores HTTP Apache que hemos venido utilizando.. y nuestra idea es presentar del entorno de desarrollo Web de Java de una manera practica, pues al tratarse de un lenguaje de programación orientado a objetos bastante especializado tanto para aplicaciones de escritorio, en sistemas de servidor (con las especificaciones Servlets y JSP, los que son de uso muy difundido), e incluso como aplicaciones "applets" incrustadas en código HTML.. estamos entonces frente a un lenguaje muy potente no solo orientado a aplicaciones Web.. pero es también bastante polémico respecto a la comunidad opensource, pues desde Abril del 2009, Oracle adquirió Sun Microsystems, lo que ocasionó el temor de las posibles y probables variaciones del licenciamiento GNU/GPL de Java, las cuales desde la versión 6 del lenguaje, ya se encuentran bajo el completo control de Oracle.. aunque Oracle aún mantiene el licenciamiento GNU/GPL de sus productos (incluído JDK 7 y del llamado OpenJDK).

Trabajar con el entorno Java para desarrollo Web, además de un servidor HTTP convencional, requiere que dispongamos de un contenedor y compilador de servlets y páginas JSP (ó servidores de aplicaciones tipo JBoss), y uno de los servidores más utilizados es el servidor Apache Tomcat, que es un servidor Web con soporte a objetos servlets y JSP, que ha sido desarrollado por supuesto en Java e incluye el compilador Jasper, que compila JSPs convirtiéndolas en servlets... vale decir, hablar de Tomcat es hablar de un contenedor de servlets que denominan catalina.

1er paso:
Instalar Nuestro Servidor Tomcat
(Nota : recomendamos lea primero completamente los dos primeros pasos y luego recien proceda a realizar las instalaciones que correspondan)


lo primero que debemos de tener en cuenta es que un servidor Apache Tomcat o jakarta Tomcat (como también suelen llamarlo), no es lo mismo que nuestro servidor HTTP Apache que hemos venido trabajando.. Tomcat es también un servidor Web y al instalarlo al igual que tenemos una carpeta "www", con Tomcat tendremos una carpeta "ROOT" contenido dentro de otra denominada "webapps" donde podremos poner nuestros archivos con extensión "jsp", los que serán interpretados y lanzados a nuestro navegador de preferencia (o por defecto).. pero para nosotros desarrolladores como ya debemos tener instalado un servidor HTTP Apache en el puerto 80, pues la instalación de Apache Tomcat la tendremos que hacer sobre otro puerto para evitar conflictos (uno recomendable puede ser 8080, 8090, etc. o realmente el que queramos pero que no sea utilizada por alguna otra opción o servicio web, proxy, etc; incluyendo por supuesto los puertos que utilizaremos con nuestro launcher de Google AppEngine (GAE).

Instalar Tomcat es realmente como instalar Apache con Appserv u otro similar (Wamp, Xamp, etc); pero es imprescindible indicar que primero debe haberse instalado el JDK de Java, para ello puede resultar conveniente revisar primero esta tabla requerimientos de JDK dependiendo de nuestra version Tomcat:

http://tomcat.apache.org/whichversion.html,

y como siempre, podemos elegir y trabajar con las ultimas versiones, las que como pueden ver ya son bastante estables: Otra cosa que debemos de tener en cuenta es que al instalar, Tomcat, a diferencia de HTTP Apache, el servicio no se carga en automático, excepto lo hayamos configurado expresamente para ello, por eso, concluída la instalación del servidor el primer paso imprescindible seleccionar en "Todos los programas", la opción Apache Tomcat, configurar Tomcat, y arrancar el servidor; y configurarlo en "automatico" si deseamos que siempre se cargue al inciar nuestro sistema operativo.

Para instalar Tomcat sobre window puede tener algunas peculiaridades (como tambien las tiene sobre Linux y Unix, pues varias cosas se tienen que ingresar comandos de consola, especialmente para dar atrbutos a nuestras carpetas y desempaquetar los archivos tar requeridos),..pero realmente trabajar sobre Linux tiene sus ventajas respecto a la perfomance de nuestro servidor Web, realmente es más rapido, lo que es conveniente si lo vamos a utilizar Tomcat en un ambiente de producción; pero si vamos a hacer nuestras pruebas, y siendo a este nivel indiferente que trabajemos sobre Linux o Windows, entonces les paso un enlace de como hacer la instalación sobre Window7, que como es característico Microsoft siempre pone algunas restricciones de "seguridad" que debemos de tomar en cuenta.

http://profesor.antonio.com.mx/?p=129

Solo basta reiterar que no utilicemos para la instalación el puerto 80 que probablemente la estemos utilizando para nuestro servidor HTTP Apache, ni tampoco del 20 al 25 /FTP y otros), ni 1433 no 3306 (de SqlServer y MySQL respectivamente); podemos utilizar  puertos mayores a 8000 por poner un ejemplo, ó de 5 digitos que tambien puede hacerse, tamién pueden utilizar un scaner de puertos on-line si tienen dudas que algunos puertos puedan estan siendo utilizados, es decir, si tienen equipos o servicios como proxys instalados en su equipo que requieran conexiones a puertos; ó mejor aún, hacer un monitoreo de los puertos en uso y así seleccionar puertos que no estén siendo utilizados (en Windows podemos utilizar CurrPorts v2.02 el cual es bastante práctico y eficiente, y solo requiere ser desempaquetado para ejecutarlo)... asimismo, es conveniente tener presente que tanto el JDK de Java como nuestro Tomcat esten instalados sobre una carpeta raiz de alguna de nuestras unidades de disco, pues hay varias cosas del mundo Java que pueden configurarse directamente sobre archivos específicos (server.xml, context.xml, user.xml, entre otros), y es necesario que estos sean fácilmente identificables y accesibles...

Vale también indicar que un servidor Tomcat es en varios aspectos mucho mas flexible y configurable que un servidor Apache HTTP, en el sentido por ejemplo que no necesariamente un "proyecto" deba estar grabado en la carpeta ROOT (equivalente a nuestra carpeta "www" que hemos venido trabajando); e inclusive es factible configurar a Tomcat para que directamente llamando a http://localhost/myproject por ejemplo (y este sea un proyecto JSP-Java, este corra automáticamente sin indicar el puerto de escucha al que ha sido direccionado nuestro servidor Tomcat... esto por supuesto es muy útil y necesario si nuestro servidor Web es un servidor de producción (pueden revisar el siguiente link al respecto), pero como no es nuestro caso no ahondaremos sobre las diferentes opciones de configuración que puede brindarnos un servidor Tomcat, que realmente son interesantes pero basta por el momento que sepamos que, aún trabajando con un servidor Apache HTTP y un servidor Tomcat en forma simultanea, es posible que, dentro de un ambiente intranet tengan acceso a nuestra aplicación ingresando directamente la IP de nuestro servidor y el nombre de nuestra aplicación: por ejemplo 192.1681.100/myproject; (o también el nombre de nuestro dominio interno configurado); y en el caso de un ambiente internet, indicando nuestro dominio y la aplicación, como por ejemplo: www.mydominio.com/myproject; no importando en ningún caso las indicaciones respecto al puerto que utilicemos y donde se encuentre grabada la carpeta que contiene a nuestro proyecto.

2do. paso:
Instalar Netbeans y trabajar con Apache Tomcat.



Cabe mencionar también que cuando instale por primera vez Netbeans (que es un IDE bastante eficiente para realizar nuestros desarrollos sean estos Java, PHP, Phyton, C++ o Groovy, etc.), este solo incluía un servidor de aplicaciones llamado Glassfish (similar al Tomcat), y que luego había que indicarle que trabajase también con Tomcat; pero observo como una agradable sorpresa que ahora Netbeans 7 incluye como servidores tanto a Glassfish 3.x como Tomcat 7.0.x; y que incluso es posible instalar todo el paquete (Netbeans, los servidores Glassfish y Tomcat y el JDK de Java en un unico paquete, como cuando instalamos Appserv o Xamp -pero con el adicional de tener un IDE completamente integrado y listo para su uso en nuestros proyectos... estas son ventajas del desarrollo opensource y de la vigencia y actividad de esta plataforma que podemos disfrutar ahora.. como siempre, mi única recomendación al respecto es que hagamos toda la instalación en una carpeta directamente en la raíz de una de las unidades de disco de nuestro ordenador (para facilitar la identificación y ubicación de los componentes del servidor).

Download Netbeans : http://netbeans.org/downloads/
(elegir la opcion JavaEE ó All, o sigamos este enlace para descargar el JDK de Java junto con el IDE NetBeans en un solo paquete.


pero antes la aclaración a una pregunta importante... Porque utilizar un IDE como Netbeans, Eclipse u otro asociado al mundo Java? ..y porque Netbeans en particular? ...no pretendo dar una explicación de las ventajas de trabajar con un IDE en paticular porque eso creo que depende bastante de la pericia y experiencia del programador con uno u otro entorno de desarrollo... pero trabajar en Java con un IDE especializado es particularmente util porque nos facilita herramientas para la configuración, manipulación, modificación, mejora y/o adición de nuevas opciones a nuestros proyectos (especialmente si son proyectos "grandes")... y la idea de nuestros "codelabs" es que dispongamos de ellos para que lo adaptemos y mejoremos de acuerdo a nuestras necesidades... pues planteado así, Netbeans nos permite "cargar" directamente las "fuentes" de cualquier proyecto JavaWeb como un "proyecto Netbeans", y luego utilizando las pantallas de edición de sus componentes, se nos facilitará su revisión, depuración y adecuación; pero sobre todo, para ejecutar el proyecto (y lanzarlo a nuestro navegador por defecto), sencillamente debemos seleccionar nuestro proyecto e indicar la opción Run y listo.. si todo esta correcto el proyecto se lanzara a nuestro navegador... y si nuestro servidor fuera de producción internamente el IDE hace las configuraciones necesarias y nuestro proyecto podrá ser accesible directamente desde el navegador de preferencia de los "usuarios" que accesen a nuestro proyecto , ya sea a nivel intranet o internet... y eso si es para tomar en cuenta..

3er. paso:
Hablemos sobre Java y como trabaja...


Como ya les indique anteriormente, trabajar con código Java tiene una curva de aprendizaje mas compleja que utilizar HTML, CSS, Javascript, PHP, etc. (y bastante similar a otros lenguajes "compilados" como Phyton, esto por supuesto si queremos llegar a dominar todas sus posibilidades), pero no perdamos animos por ello, solo miremos a este entorno de desarrollo como un "paquete" asociado al mundo de desarrollo Web que podemos incluso integrar a nuestros proyectos, y poco a poco, y con la experiencia que ya debemos haber desarrollado al haber investigado y hacer uso de HTML, CSS, Javascript, PHP, las API de Google, de Facebook, de Twitter, etc.. pues mas rápido de lo pudiera pensarse se lograrán despejarán nuestras dudas e incomprensiones.. debiendo tener presente primordialmente que, como en el caso de PHP, para tener acceso a los comandos e instrucciones de dicho lenguaje utilizabamos las etiquetas del tipo : "<?php -my-codePHP- ?>", pues ahora con Java, en nuestros archivos JSP, para hacer referencia a nuestros codigos y variables utilizamos la etiqueta <% --my-codeJava-- %> ..y con esta rápida introducción creo ya estamos listos para empezar nuestras investigaciones respecto a este entorno "profesional" de desarrollo.

Nuestro Hello World en Java?

<html>
<body>
<h1><% out.println("Hola mundo"); %></h1>
<p>This is my first test</p>
</body>
</html>

..observan mucha diferencia a nuestro Hello World de nuestro servidor HTTP Apache? ..pues realmente no (excepto que hemos colocado nuestra "Hola Mundo" dentro de las etiquetas <% %> que indica que lo contenido es un código Java, y el servidor "compilará" esa instrucción, lo ejecuta y mostrará en nuestro navegador) .. solo basta grabar este código en un archivo tipo texto con el nombre prueba.jsp, y ejecutarlo en nuestro servidor Tomcat, una vez lo tengamos instalado y puesto en servicio por supuesto, digitando en la barra de direcciones de nuestro navegador de preferencia : http://localhost:8090/prueba.jsp, (nótese que indicamos el puerto con que hemos configurado a nuestro Tomcat al realizar nuestra instalación; y tambien por supuesto, debe resultarnos claro que ya todo lo que manejamos con HTML, CSS, e incluso con Javascript, también lo podremos usar en el mundo Java.. algo similar es con el "mundo Phyton",..y también con el mundo "Microsoft" (que plantea el uso de otro tipo de servidores -el IIS- y otro lenguaje por el back-end -ASP.Net en este caso- y que detallo por cuanto hemos tomado conocimiento del lanzamiento de WebMatrix 2.0 beta, un entorno de desarrollo que junta diversas herramientas opensource y de Microsoft para hacer desarrollos Web que involucra las herramientas mencionadas, y otras todas integradas con HTML, CSS, Javascript e incluso PHP, lo que le permite el manejo e instalación de varios proyectos sociales tambien opensource muy conocidos como Wordpress, Drupal, Joomla, etc.. incluye su propio editor y "lanzador" de aplicaciones (de una manera similar al "launcher" de Appengine), así que tenemos otro entorno de desarrollo por revisar...

Otro de los temas que tocaremos mas adelante es que también podemos utilizar PHP en entornos Java (y mantener el mismo acceso a los servicios sociales y otros desarrollos opensource como los indicados pero ahora desde el entorno Java, con el uso de Netbeans IDE y de servidores como Tomcat ó Glassfish.. y volviendo a nuestro tema, vale destacar que por supuesto esto es solo el principio, pero con este sencillo ejercicio "Hola Mundo" creo que podemos llegar a tener una idea real de como funciona Java en nuestros desarrollos Web, el resto es hacer nuestras pruebas e investigaciones personales, y para ello les presento este link de un curso bastante completo e interesante de Java EE hecho por Abraham Otero, del portal Javahispano.org; el cual además de mostrarnos todo lo básico de desarrollo Web (como es el manejo de HTML y CSS), pues nos detalla todos los secretos de Java de manera bastante práctica, y no dudo que comprensible para todos los interesados... de hecho, no solo detalla los "secretos" de Java sino que nos explica y muestra porque resulta recomendable trabajar con el IDE Netbeans para facilitar nuestros desarrollos en esta plataforma -y las que soporte Netbeans-, utiliza videos bastante apropiados, y esta en español... tal vez el único "inconveniente" es que los videos estan colgados en Parleys.com (que es una plataforma e-learning free asociada a Adobe), pero para optimizar el uso de esta plataforma basta con que instalemos "Parleys Desktop" (que instala un SDK y baja los videos a nuestro ordenador, y agiliza la presentación y calidad de ejecución de los mismos), para ello revise el "Home" de la pantalla de Parleys cuando accedamos a los enlaces de video indicados; lo que le permitirá también revisar con mas detalle y dar una mirada a otros videos y cursos de Javahispano.org, y tambien de otros expositores disponibles en esta plataforma

Curso Basico de JavaEE : http://www.javahispano.org/articulos/JavaEE.pdf
ó mejor aún, revisar el Tutorial JavaEE de JavaHispano completo.
(language = spanish)

4to. paso
Instalando nuestro primer proyecto JavaWeb

...empecemos con armar nuestro primer proyecto Web con Netbeans... es realmente sencillo...

si ya hemos instalado nuestro servidor Tomcat y Netbeans con cualquiera de las formas antes indicadas, solo basta que elijamos la opción File, New Project y en la pantalla de indicación de proyectos nuevos verifiquemos que esten seleccionados Java Web y Web Application, y luego elijamos Next (hay unos ejemplos alli que podremos revisar también); luego la pantalla nos solicitará el nombre y la ubicación de nuestro proyecto (por defecto una carpeta de Mis Documentos en Windows), podemos indicarle un nombre apropiado como "myHello" así como cualquier carpeta, lo más adecuado a nuestros intereses... el resto de opciones de esta pantalla las podemos dejar como están...

Luego pasamos a la configuración de nuestro servidor, y allí indicamos que utilizaremos Tomcat (si hubiésemos instalado Glassfish aparecerá esa opción por defecto); la versión de JavaEE indicada la dejamos por defecto, y podemos cambiar el Context Path a uno adecuado ("myHello" en este caso para referirnos al nombre de nuestro proyecto), teniendo presente que ese nombre es que corresponde al que utilizaremos como dirección en nuestros navegadores.. y con toda esta información nuestro proyecto "vacío" será creado..  Netbeans creará nuestro proyecto con todas las carpetas MVC requeridas para un proyecto Java Web, y asimismo observaremos al archivo index.jsp creado por defecto que solo tiene en HTML el mensaje "Hello World"...

Revisemos con detalle alguna de las carpetas creadas por el Netbeans, especalmente los archivos contenidos en WEB-INF (web.xml), y META-INF (context.xml); que han sido creadas con lo indicado al "armar" nuestro proyecto y que vamos a tener que utilizar y manipular cuando carguemos cualquier proyecto que tengamos sus fuentes.. y listo.. seleccionemos nuestro proyecto, botón derecho del mouse e indiquemos Run.. Netbeans procederá a construir y lanzar nuestro proyecto a nuestro navegador de preferencia y allí debe aparecer nuestro Hello World...


Instalando nuestros proyectos Integracion Google 1ra y 2da parte en Netbeans:

Aun cuando nuestros proyectos Integración Google 1ra. y 2da. parte son desarrollados exclusivamente con HTML y Javascript (recuerde que usamos ExtJs que es un framework de Javascript), puede entonces cargarse estos trabajos como proyectos del Netbeans pero acondicionando su presentación para que respete la distribución de archivos convencional de un proyecto "Java Web"... y las condiciones son faciles de implementar, y se resumen en este caso en crear una carpeta "web" que contenga todo nuestro proyecto ( no estamos utilizando ningún código Java que efectúe alguna operación por el lado del servidor en este caso), y asimismo que dentro de esta carpeta pondremos nuestra versión "liviana" del framework (carpeta Ext-3.4.0 en este caso); y además 02 carpetas denominadas META-INF y WEB-INF, quienes alojarán a los archivos "context.xml" y "web.xml" respectivamente (y en donde se indicará el nombre de nuestro "context-path" y archivo de arranque del proyecto, que en este caso es index.html)...

Material de Apoyo : 
( do click on blue icons to download )

IntGoogle-01.rar, que nos muestra Visualizaciones Google sobre ExtJs (la versión Ext-3.4.0 en este caso) correpondiente a dicho codelab, ahora adecuados a un formato "Java Web" para poder cargarlos como un proyecto de Netbeans. Puede revisar nuestra entrada Integracion Google 1ra parte para mayores detalles.

IntGoogle-02.rar, que nos muestra Visualizaciones Google y ExtJs de nuestro documento "Spreadsheet Productos": correspondiente a dicho codelab (adjuntamos también nuestro modelo de hoja de calculo en formato xls para que puedan realizar pruebas con un documento propio, cargando este archivo a Google Docs)... Puede revisar nuestro codelab Integracion Google 2da. parte para mayores detalles.


Integracion Google Parte No.1 corriendo sobre Netbeans-Tomcat :



Integracion Google Parte No.2 corriendo sobre Netbeans-Tomcat :


NOTA IMPORTANTE :

Resulta que el sistema de autorización "AuthSub for JavaScript" de Google ya no se encuentra disponible (pueden revisar el siguiente enlace), por lo que nuestro botón "Login" de nuestro codelab no permite el acceso a nuestro ejercicio; asimismo, la documentación de Google nos recomienda que utilicemos ahora "OAuth 2.0 for client-side applications", vale decir, tendremos que utilizar Google API Javascript Client para poder acceder a nuestras aplicaciones (u otra API cliente según la plataforma back-end que utilicemos, tal como PHP, Java, .NET, entre otros), pero en nuestro caso, como solo estamos trabajando aplicaciones por el lado del cliente, tendremos que recurrir a la librería cliente para Javascript indicada.

Por lo que, mientras adecuamos nuestro código, resulta conveniente que NO CONSIDEREN el proceso de acceso a la aplicación de la siguiente manera:

function activando(auth) {
  var c = Ext.getCmp('center');
  //google.accounts.user.login('http://www.google.com/m8/feeds/');
  auth = true;
  c.enable();
  c.update('');
  if (auth) {
    vistree.enable();
  };
};

within from : MenuGVisualization_01.js / MenuGVisualization_02.js where appropiate!


TRABAJANDO CON OAUTH 2.0 :

por supuesto, a la brevedad actualizaremos todos nuestros códigos para que trabajen con el protocolo OAuth20, y les presentamos en esta oportunidad el código y su demo de nuestro codelab que hemos cargado a la plataforma GAE (Google App Engine), pero que usted también puede probar en su servidor local de pruebas utilizando el SDK para Java de Google App Engine..

 ..now you can test our IntGoogle01-Oauth demo  (New!) .
the demo may prompt popup window (you must enable it)

IntGoogle02-OAuth20.rar ( 3.14Mb ), Este código corresponde a nuestro codelab pero adecuado al protocolo OAuth version 2.0, utilizando la "Google API Javascript Client", la cual en esta versión, incluso nos permite acceder directamente al email de nuestros usuarios.

 ..now you can test our IntGoogle02-Oauth demo  (New!) .
the demo may prompt popup window (you must enable it)

IntGoogle02-OAuth20.rar ( 3.14Mb ), Este código corresponde a nuestro codelab pero adecuado al protocolo OAuth version 2.0, utilizando la "Google API Javascript Client", la cual en esta versión, incluso nos permite acceder directamente al email de nuestros usuarios.


Es importante indicar que la documentación de Google nos indica que ahora debemos trabajar con OAuth 2.0 que se esta convirtiendo en el estándar de autenticación y autorización para acceder a nuestras cuentas y poder utilizar todas las API de Google, por ello hemos adecuado nuestro codelab a dicho estándar debiéndose tener en cuenta lo siguiente:

  • Crear un nuevo proyecto en el Google API Console, con el nombre mas adecuado que queramos
  • Crear una "OAuth 2.0 Client ID" en la opción API Access de la consola.. allí podremos indicar el nombre de nuestra aplicación y la URL de un logo que la represente ..a continuación debemos indicar el tipo de nuestra aplicación ("web application" en nuestro caso), y la URL de nuestra aplicación (acepta http://localhost ó http://localhost:8080 para trabajar con nuestro servidor local de pruebas, debiendo verificar que se elija correctamente el protocolo "http ó https" y la ruta completa de acceso a nuestra aplicación para que todo funcione correctamente); por lo que al crear nuestra API Access se nos indicará la carpeta "Redirect URI" donde se realizará el proceso de autenticación y autorización OAuth 2.0 solicitado (si no ha sido creada debemos editar la configuración y registrar manualmente la carpeta donde se realizará el proceso, puede ser cualquiera dentro de "www" o crear la carpeta "oauth2callback" indicada)..
  • ..y finalmente, en la misma "Google API Console" debemos seleccionar a la opción "Services" y activar la "Google+ API" (debe estar "ON" y de color verde), lográndose con ello finalmente crear nuestra "API key" en forma automática.
  • y todo ya está listo! ..ahora al volver a la opción "API Access" de nuestra aplicación, ya tendremos disponible nuestro "Client ID" y la "API Key" (dentro de "Simple Access API"), estos datos son las que debemos utilizar y reemplazar en el archivo "index.html" de nuestra aplicación para que todo pueda funcionar correctamente.

    Conviene también revisar las diferentes opciones que nos presenta la "Google API Console" pues nos puede ser necesarias como crear, modificar, renombrar, eliminar proyectos principalmente.

  • ..y ahora a probar nuestra aplicación IntGoogle01-Oauth20 e IntGoogle02-Oauth20 como JavaWeb projects corriendo sobre un servidor Tomcat !
  • y una ultima indicación.. Como estamos trabajando con la Google Maps API v2, tenemos que activar el servicio "Google Maps API v2" en la API consola, y registrar nuestra API Key al importar la API en nuestro proyecto antes de subirlo a un servicio de hosting con un dominio personalizado y así puedan funcionar los mapas de nuestro proyecto sin mayores inconvenientes (aunque la Google Maps API v2 solo estará activa hasta Marzo 2013, por lo que debemos programar nuestras actualizacion a la API v.3)..por supuesto, al trabajar con nuestro servidor local "localhost" no se presentan problemas.. el asunto es, como indicamos, al cargar nuestros proyectos a un servicio de hosting externo cualquiera.. como sobre la plataforma GAE (Google App Engine), que es donde esta corriendo nuestra demo)


Pasos para realizar el Codelab..

Descargados estos proyectos en la carpeta de proyectos de Netbeans (en Mis Documentos en caso de Windows, u en otra crapeta que creamos conveniente), hay que cargar estos proyectos a Netbeans; para ello, debemos seleccionar la opción File, New Project; y en ella debemos seleccionar Java Web y Web Application with Existing Sources; luego al seleccionar Next, se nos indicará que ingresemos la carpeta que contiene nuestro proyecto (Int-Google01 por ejemplo), y al seleccionarla, Netbeans nos pondrá como nombre de nuestro proyecto y su ubicación las de nuestra fuente que estemos cargando, pero que podemos cambiar si estimamos necesario (no en este caso); luego indicando Next nuevamente, Netbeans nos pedirá los datos de configuración del proyecto, el servidor a utilizar (Tomcat en este caso), la versión de JavaEE (que dejaremos la indicaba pues no estamos utilizando Java en este caso); y nuestro "Context-Path", que tendrá el nombre del proyecto que estemos cargando...y al indicar Next nuevamente, ahora Netbeans nos solicitará la configuración de nuestro "codigo fuente", vale decir, la ubicación de nuestra carpeta web que debe aparecer ya predeterminada (sino debemos ubicarla y seleccionarla), la ruta de nuestra carpeta WEB-INF, que tambien debería aparecer ya predeterminada, sino habra que realizar el mismo proceso indicado.. y listo; en este caso, al ser nuestro proyecto exclusivamente un proyecto "web" (y que no contiene nada de código Java), no es necesario indicar librerías complementarias ni otros datos, luego entonces al indicar "finish", Netbeans creará nuestro proyecto con una estructura similar al de nuestro primer proyecto... luego solo basta seleccionar al proyecto, hacer click derecho con el mouse y seleccionar Run, y Netbeans construirá y lanzará nuestro proyecto a nuestro navegador de preferencia... Debemos hacer lo mismo con nuestro proyecto Int-Google02, y con esto veremos corriendo nuestros ejercicios  (si han seguido todos los pasos de nuestro proyecto),  hasta en 03 plataformas distintas: sobre un servidor HTTP Apache, sobre AppEngine como proyecto Python, y ahora sobre un servidor Apache Tomcat como proyecto JavaWeb; y con lo que podemos sacar como una clara conclusión que dentro del mundo Web no hay problemas de compatibilidad si trabajamos con sus elementos básicos: refiriéndonos a HTML, CSS y Javascript, y de manera simultanea, ahora ya tenemos mas claro como cargar proyectos a Netbeans con "códigos existentes".. que es el caso del proyecto sdsimple que detallamos en nuestro siguiente codelab ó cualquier otro proyecto JavaWeb..

Nota Importante: No realizamos lo mismo con nuestro proyecto Integración Google 3ra. parte, que describe un modelo CRUD de una tabla utilizando como Back-End PHP y la base de datos MySQL. En este caso no existe ningún problema respecto a trabajar y manejar la base de datos MySQL - y cualquier otra, como PostgresSQL, SQL Server, Oracle, Acces, etc.- el problema esta por el lado del lenguaje que utilizamos para "comunicarnos" con ella, que en este caso es PHP; pues nuestro servidor de servlets Tomcat no viene preparado para trabajar con PHP, pero vale mencionar que si es posible hacer que nuestro entorno Java reconozca PHP, pero hay que trabajar con un "paquete" complementario a nuestro proyecto para así ocurra ( y eso escapa los alcances del presente codelab ), pero es bueno tenerlo en cuenta si se nos presenta el caso de proyectos que involucren códigos java, y soluciones y códigos PHP... pues ya habrán podido darse cuenta, en el mundo Web todo se puede configurar, interconectar y utilizarse en forma conjunta de alguna u otra manera..

Asimismo cabe destacar que, usualmente los proyectos "Java Web" se inician con un archivo "index.jsp" (y que por supuesto, probablemente debe y puede contener códigos y variables java; pero en este caso, como hemos indicado, no estamos tocando nada de ese entorno por el lado del back-end, y en el caso de nuestro codelab Integracion Google 2da. parte, pues nuestro "back-end" es una hoja de cálculo de Google Docs que es externa a nuestro entorno de Desarrollo, y nos estamos conectando a ella utilizando únicamente código javascript (el API Ajax Javascript de Google para ser mas exactos, cuya biblioteca resumen de ejercicios para muestra podemos consultar en el llamado Google Palyground); y es así como también podemos trabajar en nuestros proyectos personales... conectando nuestros aplicativos a bases de datos externas grabadas en la nube (internet), sean propias o de terceros que nos proporcionen un API de conexión y enlace, o también conectandonos a otros equipos en forma remota, para lo que debemos tener nuestro correspondiente usuario y password de acceso con los derechos necesarios, utilizando internet por supuesto...

Saludos
@Mlaynes