Páginas: 1 2 3 4 >>

11.03.10

Permalink 20:25:11, por Luis Email , 68 palabras   Spanish (ES)
Categorías: Sin categorías

Enlazar APACHE, PHP con MYSQL en Windows

Si tienes instalado el APACHE , PHP por un lado, y el MYSQL por otro y no te has instalado el WAMP ni el XAMP seguramente no te funcionará el enlace entre ellos.

Por motivos creo que políticos el PHP trae deshabilitado el enlace con MYSQL.

Para habilitarlo hay que editar el fichero php.ini y descomentar la línea:

extension=php_mysql.dll

Con esto ya funciona

06.03.10

Permalink 19:06:53, por Luis Email , 1045 palabras   Spanish (ES)
Categorías: Sin categorías

Una forma de usar HSQLDB

Es muy habitual que en proyectos de prueba y formación utilicemos la base de datos HSQLDB. Esta base de datos tiene múltiples modos de funcionamiento.
Modo Servidor

El más habitual consiste en que por un lado tenemos arrancada la base de datos, y por otro lado, nuestra aplicación se conecta a ella con una URL de la forma "jdbc:hsqldb:hsql://localhost/patatin". Esta forma de operar tiene ventajas e iconvenientes:

1. Ventaja: Al estar en modo servidor permite que podamos arrancar múltiples aplicaciones tirando de ella. Sin ir más lejos, podemos ejecutar nuestra aplicación y a la vez podemos ejecutar el RunManager , es decir la utilidad que nos ofrece hsqldb para consultar la estructura, ejecutar sentencias SQL interactivas, etc. Incluso de esta forma podemos usar plugins de Eclipse para manipular directamente la base de datos.

2. Inconveniente. ES un rollo tener que ejecutar aparte la base de datos y tener arrancado ese proceso. No sé porqué, pero es un rollo. Me da mucha pereza tener que acordarme de arrancar el maldito proceso de la base de datos. Hombre, esto se podría solucionar si supiéramos arrancar la base de datos en modo servidor como si fuera un servicio de Windows, pero de momento no sabemos. (o hagamos como que no sabemos).

Modo In-Process

Entonces surge la primera alternativa (La buena la dejo para el final :). Usar el modo que hsqldb llama "inprocess". Este modo implica que no es necesario arrancar el servidor de base de datos aparte. En este caso nuestra URL de conexión debe tener la forma "jdbc:hsqldb:file:path" donde "path" puede ser una ruta absoluta o relativa pero en definitiva una ruta de nuestro sistema de archivos. Por poner un ejemplo, podría ser "jdbc:hsqldb:file:c:/datos/patatin".

Esta forma de conexión tiene ventajas e inconvenientes (no podía ser de otra manera).

1. Ventaja: Evidentemente la ventaja es que no necesitamos arrancar ese engorroso servidor que siempre se nos olvida y que además nos da muchos problemas si queremos publicar la aplicación dentro de un Tomcat que tenemos arrancado como servicio de Windows. (Ojo, todo este en el mundo académico).

2. Inconveniente. Al arrancar una base de datos de este modo estamos bloqueándola de forma que solamente la aplicación que la arrancó puede utilizarla. Eso es una pena (por no decir otra cosa), ya que nos impide ejecutar utilidades como por ejemplo el runManager.

Modo Servidor auto-arrancado
Por fin llega la alternativa que más me gusta y que es el verdadero motivo de este artículo. Se trata de que arranquemos nosotros mismos desde nuestra aplicación, por código, el servidor de HSQLDB con lo cual obtenemos las ventajas de los modos vistos anteriormente y ninguno de sus inconvenientes. Primero , explicaré cómo hacerlo exactamente.

Sea una aplicación Web cualquiera. Entonces crearemos una clase en nuestra aplicación que se ejecutará al arrancar la aplicación en el servidor (Es decir, que implementará el ServletContextListener). Al hacerlo, arrancaremos la base de datos sobre la marcha. Este es el código exactamente:


package miaplicacion.infraestructura;
public class DatabaseStarter implements ServletContextListener {

private Server server;

@Override
public void contextDestroyed(ServletContextEvent arg0) {
server.shutdown();

}

@Override
public void contextInitialized(ServletContextEvent sce) {
server=new Server();
server.setDatabaseName(0, "patatin"); // EL nombre con el que queremos publicarla
String dbpath=sce.getServletContext().getInitParameter("dbpath");
if(dbpath==null) {
dbpath="c:/datos/patatin";
}
server.setDatabasePath(0, dbpath);
server.start();
}
}

Como vemos , es sencillísimo. De hecho este código permite parametrizar dónde queremos tener la base de datos mediante un parámetro del web.xml ("dbpath").

Para que esta clase se ejecute junto al arranque de nuestra aplicación debemos tocar el web.xml y añadir lo siguiente:


<listener>
<listener-class>miaplicacion.infraestructura.DatabaseStarter</listener-class>
</listener>

Si queremos establecer en el web.xml el sitio donde tener la base de datos basta con añadir el context-param así:


<context-param>
<param-name>dbpath
<param-value>c:/tmp/datos/patatin
</context-param>

Y finalmente, ¿ Qué URL ponemos para configurar nuestra conexión ? Pues podemos usar la típica de siempre, es decir, "jdbc:hsqldb:hsql://localhost/patatin".

Finalmente , veamos las ventajas e inconvenientes de este modo :

1. VENTAJA: No es necesario arrancar el famoso servidor de la base de datos que es un rollo.
2. VENTAJA: Nos permite ejecutar a la vez utilidades externas como runManager ya que tenemos un servidor ejecutándose y ofreciéndose mientras tengamos arrancada nuestra aplicación.
3. VENTAJA: Podemos cambiar la configuración en caliente. Es decir si una vez en producción preferimos no arrancar nosotros el proceso y volver al modo de servidor habitual basta con tocar el web.xml y quitar el Listener y rearrancar la aplicación.
4. VENTAJA: Supongamos que queremos desplegar la aplicación en un equipo diferente al nuestro pero compartiendo la misma base de datos. Basta enviar el War sin el Listener para que no intente él arrancar la base de datos y poner en la URL la IP de nuestro equipo en lugar de localhost.
4. INCONVENIENTE: Tarda algo más en arrancar la aplicación, ya que tiene que arrancar el servidor. Cuando estamos en desarrollo estamos arrancando y parando la aplicación ontínuamente.
5. INCONVENIENTE: Si tenemos varias aplicaciones corriendo en el mismo ordenador, sólo una puede arrancar el servidor por lo que se nos crea un conflicto. Si bien, este conflicto podríamos evitarlo utilizando puertos diferentes, como se verá a continuación

Cambiar el puerto
En teoría tendríamos un inconveniente con el sistema de arranque de la base de datos a la vez que la aplicación y es que al ocupar el puerto de comunicación que usa HSQLDB no podríamos arrancar en el mismo equipo dos instancias de la aplicación (Por poner un ejemplo, una para desarrollo y otra para producción). Esto se soluciona de forma muy sencilla estableciendo el puerto en el arranque y cambiando la url de acceso.

Por ejemplo:


// En el Listener
...
String dbport=sce.getServletContext().getInitParameter("dbport");
if(dbport==null) {
dbport="9001";
}
server.setPort(Integer.parseInt(dbport));

Supongamos que queremos usar el puerto 9002, entonces en la URL de conexión pondremos: jdbc:hsqldb:hsql://localhost:9002/patatin.

01.03.10

Permalink 09:33:33, por Luis Email , 43 palabras   Spanish (ES)
Categorías: Sin categorías

Modelos de dominio anémicos

Solo un segundín para anotar lo interesante que es el artículo sobre los modelos de dominio anémicos y complementarlo con este artículo que ha encontrado un compañero de trabajo:

http://www.joseluismartin.info/articles/logica_de_negocio.php

30.01.10

Permalink 02:38:47, por Luis Email , 78 palabras   Spanish (ES)
Categorías: Sin categorías

Arquitectura JSJ

Vínculo: http://miravalles.info/joomla/blog-informatica/135-arquitectura-jsj.html

Con motivo de la práctica de persistencia he tenido ocasión de experimentar con las arquitecturas y he dado con una que me ha gustado mucho, dentro de lo poco que me gusta la arquitectura de n-capas (esto lo negaré si alguien me lo pregunta).

Pos eso, que he dejado escrita una descripción de la arquitectura JSJ (JSF 2.0 + Spring + JPA) que se caracteriza por casi eliminar el XML, gracias a Dios.

Sigue este enlace Arquitectura JSJ

13.01.10

Permalink 16:23:05, por Luis Email , 146 palabras   Spanish (ES)
Categorías: Sin categorías

Metodologías Web, Yo me pregunto

Hemos estudiado el proceso unificado y su notación UML correspondiente en clase de Análisis y Diseño Orientado a Objetos. Muy bien.

Finalmente nos han pedido como trabajo individual un estudio sobre metodologías Web por la vía del autodescubrimiento: Una bonita palabra que significa "búscate la vida".

Me parece muy bien, pero yo me pregunto. ¿ Estamos en un máster de ingeniería web ? ¿ No sería más lógico que se hubieran dedicado las horas lectivas en explicarnos las metodologías web en vez de autodescubrirlas ? Para el autodescubrimiento no hace falta pagar una matrícula de 1500 €.

Quizás se deba a que esta asignatura es de nivelación. No comments.

Hubiera querido haber dicho esto en la encuesta de la asignatura, pero mira tú, resulta que la encuesta se ha cerrado el lunes, y ya no puedo rellenarla.

1 2 3 4 >>