sábado, 15 de diciembre de 2007

Sobre Java

Con Java he solucionado un problemita q tenia, y solo con programar una aplicacion utilizando el objeto java.util.Timer timer = new java.util.Timer();
Les explico aqui
Sucedia que los usuarios suben archivos de texto comprimidos diariamente a un servidor web, y este archivo debe descomprimirse, leerse y trasladarse a una tabla en un servidor de base de datos, entonces desarrolle una aplicacion que se autoejecute cada 5 minutos, descomprima y lea el archivo linea a linea validandose y sea traslado a la base de datos.
La aplicacion esta instalada en el servidor web y hace su trabajo de manera independiente.

LOS REPORTES EN JAVA

Bueno les comento que en mi trabajo utilizo JBuilder para desarrollar aplicaciones Java y la integracion con Jasper Report para ejecutar reportes, y una de las herramientas que uso para diseñar los reportes es iReport.
Para la conexion a la base de datos MySql es necesario contar con el Driver JDBC y listo.

Aqui las librerias para cargar un reporte jasper en JBuilder
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.jasperPrint;
import net.sf.jasperreports.engine.jasperReport;

JasperViewer jv = null; // Variable global para ese objeto

CLASE PARA LLAMAR UN REPORTE

void cargar_reporte(String archivo_reporte) {
try {
JasperReport jasperReport = JasperManager.loadReport(archivo_reporte);
Map parameters = new HashMap();
parameters.put("periodo", parametro1);

parameters.put("usuario", parametro2);
JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parameters, database1.getJdbcConnection());
this.hide();
jv = new JasperViewer(jasperPrint, false);
jv.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
jv.dispose();
jv = null;
}
});
jv.setVisible(true);
}
catch (JRException e2) {
JOptionPane.showMessageDialog(this, "Error : " + e2, "Error", JOptionPane.ERROR_MESSAGE); }
catch (Exception e3) {
JOptionPane.showMessageDialog(this, "Error : " + e3, "Error", JOptionPane.ERROR_MESSAGE);
} }


Aqui la descripcion del objeto database y su coneccion a la base de datos Mysql


database1.setConnection(new com.borland.dx.sql.dataset.ConnectionDescriptor("jdbc:mysql://localhost:3306/basededatos?", "usuario", "password", false, "com.mysql.jdbc.Driver"));

Sobre Linux

Estuve indagando algunos comandos interesantes, que para mi son bastante utiles, y aun mas los utilizo en mi trabajo.
Aqui algunos ejemplos utiles:

I.- Crontab : Es una aplicacion cuya finalidad es ejecutar un programa a determinada hora en muchos casos se usa para backups o monitoreo de un sistema, el cron es una aplicacion muy valiosa ya que con ella automatizamos muchas cosas, personalmente en mi caso lo uso para hacer backup de mis bases de datos.

  • Aqui un ejemplo, (Sistema Operativo fedora), supongamos q necesitaria comprimir mi base de datos "ejemplo" de mysql todos los dias a las 11 de la noche.
  • En la raiz creamos una carpeta "backup"
    Crear un archivo sh que contenga lo siguiente y guardarlo en la carpeta:
    cd /backup
    tar -zcvpf ./ejemplo.tar.gz /var/lib/mysql/ejemplo
  • Ahora este archivo sera llamado desde el crontab
    Utilizando la consola y accediendo como root ejecutar desde la raiz ejecutar:
    vi /etc/crontab
    agrego la siguiente linea:
    00 23 * * * root sh /backup/backup.sh
    Listo, eso es todo ahora dejemos al crontab que se encargara de hacer la tarea por nosotros.

A partir de esto se puede hacer algo mas aun.

En el caso que no deseo que la copia backup se quede en mi servidor sino sea copiado a otra pc, que e incluso sea quemado en un cd de manera programable.

Nota: Toda esta configuracion se hace en servidor de backup.

Aqui les comento como lo hago:

  • Servidor BD... : IP 192.168.1.50
  • Servidor Backup : IP 192.168.1.60

Primeramente instalar en el servidor Backup el :

  • mkisofs
  • cdrecord

Los servicios que deban activarse son :

  • nfs
  • netfs

1.- Crear una carpeta donde sera el destino de los archivos copiados:

/usr/local/backup

2.- Editar el archivo /etc/exports y agregar lo sgte:

/usr/local/backup 192.168.1.50(rw)

3.- Editar el archivo /etc/hosts y agregar lo siguiente:

/192.168.1.50 dbmanager.dominio.edu.pe

4.- Editar el archivo /etc/hosts.allow y agregar lo siguiente:

  • portmap:192.168.1.50
  • lockd:192.168.1.50
  • mountd:192.168.1.50
  • rquotad:192.168.1.50
  • statd:192.168.1.50

5.- ditar el archivo host.deny y agregar lo siguiente:

  • portmap:ALL
  • lockd:ALL
  • rquotad:ALL
  • statd:ALL

AHORA CREO UN ARCHIVO .sh DONDE PROGRAMARE LO SIGUIENTE:

El archivo se llamara quemar.sh y lo ubicare en la misma carpeta del backup este contendra lo siguiente:

# Esta linea creara un archivo .ISO

mkisofs -o /urs/local/backup/ejemplo.iso -x /usr/local/backup/ejemplo.tar.gz -J -R -A -V -v /usr/local/backup/ejemplo.tar.gz

# Esta linea quemara el archivo en un CD-ROM

cdrecord -V eject speed=32 dev=0,0,0 /usr/local/backup/ejemplo.iso

Listo eso es todo, ahora solo queda programarlo en el crontab

Edito el archivo /etc/crontab y agrego lo siguiente:

10 23 * * * root sh /usr/local/backup/quemar.sh

Utilizando los servicios nfs y netfs, el servidor de base de datos podra copiar el archivo al servidor de backup.

jajjajaja ... ahora solo me falta conseguir un equipo que pueda soportar una cantidad de cd para que se carge y descarge de manera automatica.............., y entonces no tendria que quitar y cargar el cd a la bandeja del computador........ ;-)

SERVIDOR WEB APACHE

Muchas veces instalar un servidor web Apache, PHP y Mysql de manera independiente es complicado, pero existen paquetes que traen esos tres componentes integrados como por ejemplo el XAMPP (xampp-linux......) solo basta con descargarlo y descomprimirlo.

Personalmente recomiendo colocar este paquete dentro de la carpeta /opt

Ahora para hechar andar el servidor pues es muy simple:

1. ingrese a la carpeta /opt/xampp a travez de la consola

y con tres instrucciones basicas podra controlarlo:

primero : lampp start (para arrancar el servicio lampp- esto permitira levantar los servicos de Apache, Php, mysql, ftp)

segundo : lampp stop (detiene el servicio, esto es bueno cuando kiere manejar la base de datos como archivo, o hacer algunos cambios en la configuracion)

tercero : lampp restart (restaura, reinicia los servicios del xampp)

DESVENTAJA:

Cada vez que se inicia el Sistema Operativo tiene q arrancarse el servicio xampp.

SOLUCION

Lo agregaremos como un demonio linux para que arranque de manera automatica.

En la consola estando como root: y desde /opt/lampp

cp lampp /etc/init.d/

chkconfig lampp on

Y listo ahora desde q arranca el S.O. el servicio Lampp arrancara por defecto.

USO DEL PUTTY

Peronalmente me gusta usar el Putty para conectarme remotamente, hacia otras pc Linux, por que linux te da mucha ventaja en este asunto, y les comento que el comando wget es muy util cuando se trata de descargar archivos y/o trasladarlos de una servidor a otro asi como el scp "copia segura" que tambien te permite hacer lo mismo.

Para aquellos fanaticos de Windows descargen el programales recomiendo winSCP es muy facil y te permite acceder a pc linux de manera remota y tiene una interfaz grafica interesante.

para mas informacion lea aqui

INSTALAR MySql - Apache - PhP en Debian Searge

Para la instalacion de estos paquetes se recomienda ingresar como root.

MySql

  • apt-get install mysql-server mysql-client

Apache

  • apt-get install apache-common apache

PHP 5.0

  • apt-get install php5 libapache-mod-php5 php5-mysql
  • apt-get install php5-gd
  • apt-get install phpmyadmin

Editar el archivo php.ini y quitar el punto y coma (;) a

  • extension=mysql.so
  • extension=gd.so

Ahora arrancar el servicio apache

etc/init.d/apache restart

Listo eso es todo.... , para asegurarnos que se ha instalado el apache probas http://localhost/

  • apt-get install mozilla-firefox (para instalar el navegador mozila)

jueves, 13 de diciembre de 2007

Sobre MySql

Actualmente trabajo con un servidor de base de datos MySql Vr. 5, desarrollando aplicaciones web y de escritorio, y debo mencionar la gran facilidad que tiene el lenguaje SQL para manipular los datos.

Aqui algunos ejemplos practicos que me ayudan a hacer mas sencillo mi trabajo.

1.- Imaginemos el resultado de :

Select campo1,campo2 from tabla1 where campo1 = "criterio";

ahora haga lo mismo pero agrege esto:

set @i:=0;
Select @i:=@i+1 as numero, campo1,campo2 from tabla1 where campo1 = "criterio" ;


II.- Aqui otro ejemplo del lenguaje SQL:
Hacer una actualizacion de datos desde una tabla hacia otra por medio de una relacion "INNER JOIN , LEFT JOIN, RIGHT JOIN".

update tabla_actualizar left join alumnos ON tabla_actualizar.alumno_id=alumnos.alumno_id set tabla_actualizar.n_boletas=boleta

Esto reemplazaria a escribir una rutina para leer el dato y despues actualizarlo, me refiero a toda la tabla.


III.- Algo mas complejo, actualizar datos desde una base de datos a otra.


UPDATE movimientos.datospes LEFT JOIN maestros.datosper ON movimientos.datosper.persona_id = maestros.datosper.persona_id SET movimientos.datosper.direccion = maestros.datosper.direccion WHERE (movimientos.datosper.direccion is null OR movimientos.datosper.direccion ='')and (movimientos.datosper.tipo_trabajador='ADMINISTRATIVO' OR movimientos.datosper.tipo_trabajador ='DOCENTE')

MIGRACION DE UNA BASE DE DATOS MYSQL WINDOWS A LINUX

Bueno para este caso existe dos posiblidades :

Primero: Es crear un backup de la base de datos mysql de windows y restaurarlo en Linux, pero a veces sucede problemas al recuperar el archivo .sql generado por el backup.

Segundo : Copiar toda la carpeta de la base de datos que esta en windows y pegarlo dentro de la carpeta var/lib/mysql ; eso no es todo hay q darle permisos y asignarle usuario porque de lo contrario no se podra escribir registros en la base de datos.

Ingresando por consola en linux escribir :

[root@] chmod -R 777 /var/lib/mysql/nombredebasedatos (lectura, escritura, ejecucion)

[root@] chown -R mysql:mysql /var/lib/mysql/nombredebasedatos (le asignamos como usuario mysql)

Listo eso es todo.