Etiqueta: postgreSQL

Tips: Configurar PostgreSQL en Glassfish 3

12 dic 2010

Instalación del driver
Descargamos el driver JDBC desde http://jdbc.postgresql.org y lo copiaremos al directorio glassfish/lib o si preferimos utilizarlo unicamente en uno de los dominios lo copiaremos en glassfish/domains/domain1/lib/ext

Configuración del Datasource

Una vez reiniciado el servidor, accedemos a la consola de administración y seleccionamos crear un nuevo pool de conexiones (Resources/JDBC/Connection Pools), indicando el nombre del pool y el tipo de conexión.

Configuramos los parámetros de conexión a la base de datos.

Para terminar comprobamos que la conexión a la base de datos puede realizarse intentando un ping.

Configuración del recurso

Una vez tengamos creado el pool de conexiones y hayamos comprobado que la configuración es correcta, definimos un recurso datasource que podrá ser consumido por nuestras aplicaciones mediante JNDI.

Uso del datasource

Para ello solo tendremos que indicar en nuestro persistence.xml el nombre JDNI de recurso, en este caso jdbc/default.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="default" transaction-type="JTA">
        <jta-data-source>jdbc/default</jta-data-source>
    </persistence-unit>
</persistence>

Configuración de un entorno completo de programación en 5 minutos

26 feb 2007

Os dejo una pequeña guía para la instalación de un entorno de desarrollo completo en Linux(Ubuntu 6.10).

Instalación de Postgres

  • Instalamos el servicio
    sudo apt-get install postgresql-8.1
  • Cambiamos el password por defecto del usuario postgres
    sudo su postgres -c “psql template1″
    ALTER USER postgres WITH PASSWORD ‘postgres’;
  • Instalamos un cliente gráfico
    sudo apt-get install pgadmin3

Con esto ya estamos listos para utilizar postgresql.

Instalación de java
sudo apt-get install sun-java6-jdk

Instalación de Eclipse
sudo apt-get install eclipse

Una vez instalado, es recomendable configurarlo para que utilice mas memoria.
sudo gedit /usr/bin/eclipse
Modificamos la variable VMARGS para amentar la memoria
VMARGS=”-Xms740m -Xmx1256m -XX:MaxPermSize=128M”

Instalación de los plugins WebTools, Subeclipse y Maven para Eclipse
Ejecutamos eclipse (menu Applications/Programming/Eclipse)

Desde el menu “Help/Software Updates/Find and Install” seleccionamos “Search for new features to install” y de los muchos sitios de actualización desponibles, seleccionamos “Callipsto Discovery Site” y añadimos los siguientes sites:

http://subclipse.tigris.org/update_1.2.x ( Para la integración con Subversión)
http://m2eclipse.codehaus.org/ (Para la integración con Maven, yo prefiero la consola, pero es cuestión de gustos)

pulsamos Finish. Una vez hecho esto, seleccionamos los componentes WebTools, Subversion , Maven y listo.

Instalación de Tomcat

sudo apt-get install tomcat5.5

Instalación de Maven

Para su instalación en primer lugar necesitamos descargarlo de http://maven.apache.org ( y seguimos las instrucciones de instalación). Una vez descargado procedemos a configurar las variables de entorno.

En Linux/Mac:
sudo gedit /etc/profile
#Variables MAVEN
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
export M2_HOME=/home/borrego/java/maven
export PATH=$M2_HOME/bin:$PATH

Instalación de netbeans
Si optamos por la última versión de NetBeans, la instalación es trivial ya que se basa en Java Web Start.
Abrimos la página http://nbi.netbeans.org/m11/download.html y pulsamos en Lauch.

Con un poco de suerte y si la conexión a internet es rápida, en 5 minutos tendremos el sistema preparado.

Triggers PostgreSQL

12 feb 2007

Me pidieron hace unos días una solución a inserciones en Base de datos, de tal manera que algunos valores que cumplieran ciertas características, se vieran modificados justo antes de almacenarse. Concretamente se trata de hacer que determinados campos de cada tabla se insertaran automáticamente en mayúsculas, teniendo ya toda la lógica de acceso e inserciones en la BD creada.

La solución es bien sencilla. Todos pensamos en un trigger, pero … ¿en postgreSQL?. Sí no hay ningún problema.

Imaginemos que tenemos una tabla PERSONA que tiene entre otros los campos NOMBRE, APELLIDOS, FECHA DE NACIMIENTO y queremos simplemente cambiar el nombre y apellidos de la persona a mayúsculas antes de cada inserción. Pues lo único que tendriamos que crearnos es un TRIGGER que se ejecute antes de cada ÍNSERT o UPDATE y que ejecute una función que cambie a mayúsculas los campos requeridos, es decir:

CREATE OR REPLACE FUNCTION UPPER_PERSONA() RETURNS trigger AS '
BEGIN
NEW.nombre := upper(NEW.nombre);
NEW.apellidos := upper(NEW.apellidos);
RETURN new;
END
' LANGUAGE plpgsql;

CREATE TRIGGER persona BEFORE INSERT or UPDATE
ON persona FOR EACH ROW
EXECUTE PROCEDURE UPPER_PERSONA(nombre, apellido);

Cuando Hibernate ataca a Postgres…

07 feb 2007

Quizas este post te ayude si estas buscando una solucion para alguna de las siguientes cuestiones:

  • Pasarle comillas a la BBDD atraves de Hibernate
  • Usar palabras reservadas del gestor de BBDD como nombre de columna o tabla en JPA.
  • Tienes una org.postgresql.util.PSQLException
  • Tienes una excepcion: column notation applied to type name, which is not a composite type

Recientemente jugando con JPA contra Postgres nos hemos encontrado con un problema de los que le pueden volver loco a uno. La excepcion que teniamos era:



 org.postgresql.util.PSQLException: ERROR: .user_id column notation applied to type name, which is not a composite type

Es el tipo de mensaje de error que despista y te puede hacer dar vueltas durante horas (o dias) buscando el problema donde no es.
Nosotros estabamos convencidos de que habia algo erroneo en nuestras annotations de las columnas

@Column(name="user_id")

Pero lo que ya nos hacia tirarnos de los pelos era que nos pasaba lo mismo ya hiciesemos la query consultando user_id o email.



 org.postgresql.util.PSQLException: ERROR: .email column notation applied to type name, which is not a composite type

En general nos ocurria con cualesquiera columnas de nuestra tabla user.

Al final dimos con lo que estaba ocurriendo… el problema estaba en la annotation

@Table(name="user")

Os vais a reir… Resulta que user es una palabra reservada de Postgres, como tambien lo es id y algunas otras. Asi que si llamamos user a nuestra tabla, en la annotation necesitamos usar comillas para que el motor de BBDD no se haga un lio.

Y la forma de pasarle a Hibernate las comillas viene explicada aqui:
http://www.hibernate.org/hib_docs/reference/en/html/mapping.html#mapping-quotedidentifiers

O sea, que usando la tilde invertida -`- Hibernate nos la traduce a las comillas adecuadas del dialecto adecuado.

Basicamente, nuestro problema se arreglo haciendo:

@Table(name="`user`")