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