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

Integracion de Liquibase con Spring y JPA

¿Qué es Liquibase?

Liquibase, es una libreria opensource para gestionar los cambios en base de datos. En la etapa de desarrollo de un sistema casi como norma debe versionarse el código fuente, pero no había un mecanismo para llevar un control de los cambios en la estructura de la base de datos y de esta necesidad nace liquibase.

En un equipo de desarrollo es habitual que cada miembro realice procedimientos almacenados, vistas o cambios en las estructuras de las tablas en función de las funciones que este desarrollando y al momento de integrar todo se vuelve un quilombo. Con liquibase los cambios se realizan a través de un archivo de cambios el cual se sincroniza con los demás miembros del equipo, de esta forma los cambios no se hacen directamente a la base de datos sino desde la aplicación al momento de su ejecución.

Desarrollare un pequeño ejemplo de como implementar esta libreria con Spring y JPA, del lado de la base de datos utilizare PostgreSQL. Supondremos que ya tenemos creado nuestro acceso a datos y procedemos a configurar el contexto de spring.


Ahora se debe configurar el archivo donde se declaran los cambios en la base de datos.

Cuando ejecutemos la aplicación liquibase intentara primeramente hacer efectivos los cambios configurados en db-changelog.xml

En el caso de JPA, es de tener en cuenta que siempre hay que actualizar manualmente los Entity class, ya que no es parte de las funciones de liquibase.

Adjunto código fuente para efectos de estudio.

Comentarios (1)opiniones, ¿cual es la tuya?

Habilitar Tomcat y Glassfish para conexion a bases de datos

En muchas ocasiones me he visto en la necesidad de configurar mi Tomcat o Glassfish para que mis aplicaciones se peguen a su respectiva base de datos, aun cuando en las librerías de los respectivos proyectos incluya el driver jdbc necesario.

La forma de configurar Tomcat y Glassfish es muy simple solamente es necesario incluir en la carpeta "lib" que esta dentro de la ruta de instalación de cualquier de los dos servidores el respectivo JAR.


Para Tomcat y Glassfish:

$HOME_PATH/lib

Donde $HOME_PATH es la ruta de instalación de Tomcat.

En mi debian el instalador de Netbeans deja el $HOME_PATH de Tomcat y Glassfish en la siguiente ubicación:

/usr/local/apache-tomcat-6.0.18
/usr/local/glassfish-v2ur2

Para windows como tengo ratos de no instalarlo Tomcat no recuerdo donde lo dej el instalador por defecto pero al igual que en GNU/Linux al obtener el archivo descomprimible lo podemos ubicar en el lugar que queramos el $HOME_PATH.

En el caso de sistemas GNU/Linux ó Unix no es necesario copiar fisicamete el archivo pues también se puede utilizar un enlace simbólico.

# ln -s /ruta/del/driver/jdbc_driver.jar $HOME_PATH/lib

Como también en mis aplicaciones el DAO Oracle TopLink para JPA en el caso de Glassfish no es necesario por que ya esta incluido pero para Tomcat no así que es necesario descargar los respectivos JAR de Oracle TopLink para poder usar persistencia de datos.

Luego de eso reiniciamos los servicios.

Dejare los links para poder descargar los respectivos driver jdbc para los diferentes gestores de bases de datos mas populares.

JDBC Driver para MySQL
JDBC Driver para Oracle
JDBC Driver para PostgreSQL
JDBC Driver para Apache Derby
JDBC Driver para SQL Server / Sybase puede usarse el driver libre o el propietario.

Comentarios (0)

Campos autoincrementables

Siempre me ha llamado la atención de como se declaran los famosos campos auto incrementables en las distintas bases de datos por lo menos en las que he usado, y ahora mas ya que he estado usando intensamente JPA.



Acá pondré un resumen de como se declaran:

MySQL

campo [(longitud)] [not null] auto_increment primary key

Es necesario definir un campo autoincrementable de llave primaria en MySQL ya que este asi lo requiere de lo contrario no se puede declarar este tipo de campo.
Ejemplo:

create table prueba (
id int not null auto_increment primary key
)


PostgreSQL

campo serial [not null]

En PostgreSQL por el contrario que MySQL no requiere que un campo de tipo serial sea una llave primaria ejemplo:

create table prueba (
id serial not null
)

SQL Server / Sybase

En el caso de SQL Server / Sybase es mucho mas simple solo basta utilizar esta sintaxis:


campo int identity [(inicio,incremento)]

Ejemplo:

create table prueba (
id int identity
)

O sino si queremos que comience desde 3 y su incremento sea de dos en dos lo declaramos asi:

create table prueba (
id int identity(3,2)
)

Apache Derby

campo int [not null] generated always as identity [(start with [cantidad], increment by [cantidad])]

Derby es el gestor de base de datos de Apache, que viene incluido en el JDK 1.6, y lo podemos usar a traves de Netbeans, dos ejemplos de declaracion serian:

create table prueba (
id int not null generated always as identity
)

En el ejemplo anterior el campo id se generara como campo auto incrementable, con los valores por defecto que comienza a contar desde uno y su incremento es de uno en uno.

Ahora veamos este otro:

create table prueba (
id int not null generated always as identity (start with 5, increment by 2)
)

En la declaracion anterior estoy creando un campo de tipo autoincrementable que comience en cinco y su incremento sera de dos en dos.

Oracle

En el caso de Oracle es un poco mas trabajoso ya que no existe un tipo auto incrementable. Lo que se debe de hacer es primero crear un campo de tipo Number, luego crear una secuencia y por ultimo crear un trigger que realizara el autoincremento cada vez se haga un insert.

Ejemplo de todo esto seria:

create table prueba (
id number not null primary key,
descripcion varchar2(20)
)

Ya creada la tabla ahora crearemos una secuencia que comience desde uno y que se incremento en uno tambien.

create sequence seq_id_prueba
start with 1
increment by 1
nomaxvalue;

Hecha la secuencia debemos crear el trigger para que se utilice la secuencia para cada insert que le hagamos a la tabla.

create trigger trig_id_prueba
before insert on prueba
for each row
begin
select seq_id_prueba.nexval into :new.id from dual;

end;

Ahora cada vez que hagamos un insert podremos hacerlo asi:

insert into prueba(descripcion) values('Una fila');

Espero que les sirva este pequeno resumen ya que me costo un webo terminarlo aun cuando se ve sencillo ya que lo empece desde el domingo y hasta el dia de hoy logre terminarlo.

Comentarios (3)

Conectando OpenOffice.org con PostgreSQL y MySQL

Muchas veces he querido tener alguna herramienta para poder ver el diagrama Entidad-Relacion de una base de datos y con OpenOffice.org Base he encontrado esa solución.

En cuanto a MySQL existe un pequeño problema pues en cuanto a la integridad referencial no esta muy bien implementada así que la función de vista E-R en OpenOffice.org Base no esta habilitada para esta base de datos. Pero de igual forma se pueden usar sus otras buenas características como lo son los asistentes para generación de vistas, formularios y tablas que es muy buena.

Para usar OpenOffice.org siempre recomiendo el jdk versión 6.0 para la suite. Se debe de agregar los respectivos JAR para PostgreSQL y MySQL.

Para PostgreSQL se puede descargar el driver JDBC en su respectiva sección, al igual como para MySQL.

Ya teniendo los respectivos archivos JAR para cada base de datos lo primero es abrir ya sea Writer o Calc e ir al menú Opciones de este.


Ya estando en las Opciones buscamos la sección "Java" elegimos el JRE de nuestra elección, damos aceptar, cerramos el OpenOffice.org y lo volvemos a abrir para ir de nuevo a opciones y luego la sección java.


Pero esta vez elegiremos de nuevo el JRE que habíamos seleccionado con anterioridad y damos clic en el botón "Class Path".


Aparecerá otra ventana de dialogo donde debemos elegir los JAR que necesitamos haciendo clic en el botón "Agregar archivo", luego de esto cerramos OpenOffice.org y usamos el asistente de conexión del OpenOffice.org Base.

Comentarios (0)

Abriendole las piernas al MySQL, para administrar en remoto

Cuando necesitamos trabajar en equipo es necesario centralizar ciertas cosas, así como el gestor de base de datos para que todos podamos trabajar con la misma información.


Entonces requiere configurarlo para los mismos fines, ya había explicado antes como hacerlo con instalar y configurar PostgreSQL, ahora sera el caso con MySQL 5 también para Debian, y lo haré a la forma simple con el MySQL Administrator que se puede descargar en dev.mysql.com o también desde el mismo repositorio de debian.

Antes que nada necesitamos instalar el MySQL Server, el MySQL Query para realizar consultas SQL y el MySQL Administrator como herramientas administrativa gráfica.

# apt-get install mysql-server-5.0 mysql-admin mysql-query-browser

Para dar acceso en remoto debemos editar un archivo de configuración llamado my.cnf

# nano /etc/mysql/my.cnf

Hay que buscar la linea que diga

bind-address = 127.0.0.1

Y se comenta poniendo el simbolo "#" al principio de esta que debe quedar asi

# bind-address = 127.0.0.1

Guardamos el archivo y reiniciamos el servicio de mysql

# /etc/init.d/mysql restart

Luego de esto ingresamos al mysql-admin para asignar contraseña al usuario root, dejamos como nombre Username root en el login y el Password en blanco, ya que no hay asignado ningun password.


Nos vamos a la opción User Administration y desde alli podemos cambiarle el password al usuario root y a la vez poder crear otro, para que los cambios tengan efecto basta con dar clic en el boton Apply Changes.


Ahora debemos crear otro usuario con el cual accederemos en remoto, esto se hace siempre en User Administration y se da clic en el boton New User, alli la creacion es intuitiva. En mi caso yo cree un usuario llamado debmysql y le asigne su respectivo password. Ahora bien hay que dar permisos a este usuario para poderse conectar en remoto, para ello se hace clic en el usuario creado en la parte inferior izquierda habiendo ya seleccionado previamente la opcion User Administration.


Ahora hay que asignarle esto esto se hace dando clic derecho en este usuario y seleccionar la opcion Add Host


Se selecciona Hostname o Ip y el simbolo "%" se usa para definir que sea cualquier numero en el rango de 0 a 255, también al finalizar esto ay que darle Apply Changes.

Y ya estamos listos para poder administrar nuestro servidor MySQL en forma remota en nuestra LAN.

Comentarios (5)

Instalando y configurando PostgreSQL en Debian GNU/Linux


He aquí que publico una pequeña guía para instalar PostgreSQL en Debian GNU/Linux, por que no lo explico para el sistema operativo de ventanas? pues por la razón de que es un desperdicio tener que explicar una ventana next, next, finish, y por que me da una weba de las brutales.

Antes que nada debemos tener bien configurado nuestro repositorio, yo utilizo los repositorios oficiales (incluyendo el de La Universidad de El Salvador, que tambien es oficial, lo pueden verificar en la lista de mirrors oficiales en www.debian.org)

deb http://debian.ues.edu.sv/debian etch main

Asumiendo que se ha agregado un repositorio oficial y el respectivo apt-get update, procedemos a instalar PostgreSQL yo en este momento tengo la versión 8.2 aunque la verdad no le veo diferencia significativa con respecto a la 8.1, si la hay y no la he notado me sabrán decir.

# apt-get install postgresql-8.2

Luego de instalado debemos crear un primer usuario para empezar a conectarnos con la base de datos, de preferencia es saludable es crear el nuevo usuario con el mismo nombre de tu cuenta del sistema, NO ROOT.

# su postgres
$ createuser dani

No hara la pregunta

¿Será el nuevo rol un superusuario? (s/n)

Por supuesto que la respuesta que debemos dar es si

Luego de esto debemos asignarle contraseña a nuestro nuevo súper usuario
$ psql postgres

y obtenemos un nuevo prompt
postgres=#

y escribimos

postgres=# alter user dani with password 'mi_nuevo_password';

Luego de esto salimos del cliente de postgres con \q

Ahora procedemos a configurar el acceso a desde otras maquinas a mi servidor de base de datos, para ello modificaremos los archivos postgresql.conf y pg_hba.conf

# nano /etc/postgresql/8.2/main/postgresql.conf

Buscamos la linea que esta comentada y que dice

# listen_addresses = 'localhost'

La descomentamos y cambiamos el valor de localhost por "*" que debe quedar así

listen_addresses = '*'

Guardamos y cerramos el archivo, después editamos el archivo pg_hba.conf para dar permisos de acceso a nuestro servidor de base de datos desde otras maquinas, yo lo configurare para que puedan accesar cualquier maquina de mi LAN.

# nano /etc/postgresql/8.2/main/pg_hba.conf

Nos vamos al final del archivo y debe de aparecer algo similar a esto

# TYPE DATABASE USER CIDR-ADDRESS METHOD
#"local" is for Unix domain socket connections only

local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust

Debemos cambiar donde diga trust a password, para tener acceso a las bases de datos a través de un password y agregar una linea al final del archivo para acceso de las maquinas de mi LAN

host all all 192.168.1.1/24 password

Al final todo debe quedar así

# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all password
# IPv4 local connections:
host all all 127.0.0.1/32 password
# IPv6 local connections:
host all all ::1/128 password
host all all 192.168.1.1/24 password

Guardamos el archivo y lo cerramos, por ultimo nos basta nada mas reiniciar el servidor de postgres

# /etc/init.d/postgresql-8.2 restart

Si queremos un cliente gráfico para postgres podemos instalar pgadmin3 o phppgadmin este ultimo es similar a phpmyadmin para MySQL

Me despido muy atentamente.

Comentarios (2)