Web – Ejecutar apache en modo autónomo

Al desarrollar una aplicación web necesitamos ir viendo como funciona desde nuestro navegador. La forma más sencilla que he encontrado hasta ahora es abrir una terminal, ir a la carpeta del proyecto y ejecutar el siguiente comando

python -m SimpleHTTPServer

Si necesitas algo más avanzado que eso, por ejemplo, Apache con PHP. También puedes ejecutarlo desde la línea de comandos. Lo primero que tienes que hacer es instalarlo.

sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install libapache2-mod-php5
sudo service apache2 restart

Una vez instalado, crea el archivo ~/bin/pache con el siguiente contenido

    #!/bin/bash
    /usr/sbin/apache2 -DFOREGROUND -d . -f .htaccess -C"PidFile `mktemp`" -C"Listen 8000" -C"Include /etc/apache2/mods-enabled/*.load" -C"Include /etc/apache2/mods-enabled/*.conf" -C"ErrorLog /dev/stdout" -C"DocumentRoot ." -e debug

Hazlo ejecutable

chmod a+x ~/bin/pache

Ve a la carpeta de tu proyecto y ejecuta el comando

cd ~/Projects/demo
pache

En mi caso utilicé initializr para no comenzar el proyecto desde cero. Si te aparece el siguiente mensaje de error o alguno otro parecido

Syntax error on line 86 of ./.htaccess: Invalid command ‘CommandName’, perhaps misspelled or defined by a module not included in the server configuration

tienes que activar algún módulo. En el script que creamos intentamos cargar todos los módulos que estén configurados en tu instalación local (/etc/apache2/mods-enabled). También podrías especificarlos en el archivo .htaccess y la directiva LoadModule Fuentes: http://www.howtogeek.com/howto/ubuntu/installing-php5-and-apache-on-ubuntu/ http://stackoverflow.com/questions/13695391/start-an-apache-server-in-any-directory-from-command-line http://systembash.com/content/apache-2-4-upgrade-and-the-invalid-command-order-error/ http://www.senin.org/2006/11/07/invalid-command-order-perhaps-misspelled-or-defined-by-a-module-not-included-in-the-server-configuration/ http://stackoverflow.com/questions/933959/apache-is-incorrectly-converting-jsp-pages-to-text-plain

Anuncios

Java XML Serialization vs .NET XML Serialization

Estoy haciendo un programa que genera reportes a partir de un archivo XML. La idea es que cuando se quiera un nuevo reporte o modificar alguno existente solo se tenga que cambiar la definicion del reporte en un archivo XML y no tener que modificar el codigo. Las clases que utilizo son las siguientes:

Esto lo hice en C# de forma sencilla mediante el uso de la clase System.Xml.Serialization.XmlSerializer y sus métodos Serialize y Deserialize. Esta clase me generó un XML como el siguiente:

<?xml version=”1.0″ encoding=”utf-8″?>
<Reporte xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xmlns:xsd=”http://www.w3.org/2001/XMLSchema”&gt;
<Nombre>Reporte de Prueba</Nombre>
<Consultas>
<Consulta>
<Nombre>Consulta 0</Nombre>
<SQL>SELECT * FROM CONSULTA_0</SQL>
</Consulta>
<Consulta>
<Nombre>Consulta 1</Nombre>
<SQL>SELECT * FROM CONSULTA_1</SQL>
</Consulta>
</Consultas>
</Reporte>

a mi parecer esta bastante limpio y se entiende lo suficiente para que una persona lo pueda modificar en cualquier editor de texto.
Luego quise hacer lo mismo en java y encontre que lo podia hacer mediante la clase java.beans.XMLEncoder y java.beans.XMLDecoder, y asi fue. El problema es que me genera XML como el siguiente:

<?xml version=”1.0″ encoding=”UTF-8″?>
<java version=”1.5.0_06″ class=”java.beans.XMLDecoder”>
<object class=”tsj.estadisticas.Reporte”>
<void property=”consultas”>
<void method=”add”>
<object class=”tsj.estadisticas.Consulta”>
<void property=”nombre”>
<string>Consulta 0</string>
</void>
<void property=”sql”>
<string>SELECT * FROM CONSULTA_0</string>
</void>
</object>
</void>
<void method=”add”>
<object class=”tsj.estadisticas.Consulta”>
<void property=”nombre”>
<string>Consulta 1</string>
</void>
<void property=”sql”>
<string>SELECT * FROM CONSULTA_1</string>
</void>
</object>
</void>
<void method=”add”>
<object class=”tsj.estadisticas.Consulta”>
<void property=”nombre”>
<string>Consulta 2</string>
</void>
<void property=”sql”>
<string>SELECT * FROM CONSULTA_2</string>
</void>
</object>
</void>
</void>
<void property=”nombre”>
<string>Nuevo Reporte</string>
</void>
</object>
</java>

Y pues no me gustó para nada, así que busqué otras alternativas.
Buscando en google encontré las 3 opciones que me parecieron mejores: JAXB, Simple y JiBX. Escogí Simple por simple… 😀 jeje … que es lo mismo a fácil de aprender, fácil de usar y eficiente, además de que en escencia es similar a la serializacion de C#.
Simple me produjo el siguiente XML:

<reporte>
<nombre>Nuevo Reporte</nombre>
<consultas class=”java.util.ArrayList”>
<consulta>
<nombre>Consulta 0</nombre>
<sql>SELECT * FROM CONSULTA_0</sql>
</consulta>
<consulta>
<nombre>Consulta 1</nombre>
<sql>SELECT * FROM CONSULTA_1</sql>
</consulta>
<consulta>
<nombre>Consulta 2</nombre>
<sql>SELECT * FROM CONSULTA_2</sql>
</consulta>
</consultas>
</reporte>

que es el mismo que en C# excepto por algunas líneas del encabezado.
El único problema que tuve para poder utilizar Simple fue por no haber leído el siguiente texto en la sección de descarga:

For Java 6 the framework has no external
dependancies and is completely self contained. For Java 5 two external JAR files are required,
the StAX API and the StAX implementation, both are provided with the download.

Como la version de java que utilizo es la 1.5, necesitaba tambien agregar las librerias indicadas. Estas librerias se encuentran en la carpeta “lib” donde hayas descomprimido Simple.
Si no las agregas te genera el siguiente error:

Exception in thread “main” java.lang.NoClassDefFoundError: javax/xml/stream/XMLInputFactory