11.13.2013

WebService Java y JPA

Para todos no es una novedad que netbeans nos provea de herramientas para automatizacion de tareas tan tediosas como el mapedo de datos desde una Base de Datos, para eso se creo JPA con las muy conocidas EntityClasses, las cuales permiten tener un objeto de JAVA que representa una tabla, es decir:


create table sampe (
   idTabla int not null,
   someText varhcar(50),
   someDate timestamp
);

lo que en JAVA representaria, esto aun no es JPA:

public class Sample{

private int idTabla;
private String someText;
private Date someDate;

}

Para que la clase sea totalmente compatible con JPA se utiliza la notacion JAXB, pero bueno para eso no es la entrada si quieren leer un poco mas de JPA pueden echarle una revisada a este documento de oracle:
http://docs.oracle.com/javaee/6/tutorial/doc/bnbpz.html


Bueno, lo cierto es que para trabajar con WebServices es necesario tambien tener una notacion para que el contenedor de aplicaciones o servidor o como lo quieran llamar pueda interpretar lo que tiene este, algo como:


@WebService(serviceName = "GestorSample")
public class GestorSample {

/***El metodo del webservices***/
@WebMethod(operationName = "impSample")
    public String impLicencia(@WebParam(name = "sampleOBJ") Sample sample) throws Exception {
        System.out.println(sample);
}
}
Listo, ese seria el mejor ejemplo con el WebService, pero si nos damos cuenta esa seria la clase que se crearia apartir de JPA, la cual ya tendra una notacion JABX por lo cual al momento de generar el descriptor XML del WebServices generara un error y lo mas probable es, que el objeto llamando sample no llegue, llegara un null lo cual pondra en tela de juicio nuestra creacion del webServices. Dado esto no lei mucho, pero supuse lo siguiente si el objeto que esta como parametro del webservices tiene ya una notacion JABX sera que tiene problema con la notacion de JABX del webservices y si que realmente tienen un conflicto puesto que las notaciones llegan a confundir la generacion del WebServices y genera inconsistencias imperceptibles, pero bueno eso me paso y lo unico para hacer es crear una clase con los atributos iguales a los del JPA y para que sea de reconocimiento ponerle algo como ClassNoJPA para no confundirse con las clases reales de persistencia.


Listo, los dejo con eso que les rinda!!

11.12.2013

Postgres Triggers

Bueno, he estado probando como es que postgres maneja los famosos triggers alias disparadores para los del idioma español jejejeje, entonces esto empieza asi:


 Para poder trabajar con los disparadores de postgres se supone se puede hacer directamente una operacion de insert, update o delete, pero nunca lo pude hacer asi que decidi seguir bien el manual de postgres y lo pude conseguir.

Me base en los articulos mencionados, para lo que voy a hacer.


Primero se necesita crear una tabla, en mi caso queria crear una tabla con XML, como lo que ya habia mostrado en mi anterior entrada, pero ahora con el sabor de tener una especie de auditoria sobre la tabla creada propiamente desde la BD y asi no molestar con eso desde el programa, iniciemos:


CREATE TABLE IF NOT EXISTS xml_data
(
  i_id_xml int not null,
  c_tabla_xml text not null,
  c_modificado_xml text not null,
  d_modificado_xml date not null,
  xml_data xml not null,
  PRIMARY KEY (i_id_xml, c_tabla_xml)
);
Listo, ahora la tabla de auditoria que casi no puedo sacar, no sabia que campos poner jejeje, pero creo que con la que cree es mas que suficiente:


CREATE TABLE IF NOT EXISTS auditor_xml_data
(
  i_id_auditor bigserial not null,
  d_cambio_auditoria date not null default NOW(),
  i_id_xml int not null,
  c_tabla_xml text not null,
  c_modificado_xml text not null,
  d_modificado_xml date not null,
  xml_data xml not null,
  PRIMARY KEY (i_id_auditor)
);
Listo, ya tengo mi tabla normal y mi tabla de auditoria con la cual, espero poder hacer algo algun dia, para la creacion del trigger, es necesario crear primero una funcion que se retorne de tipo trigger, algo un poco extraño cuando lo lei, y cuando lo  implemente pero funciona que es lo importante jejejeje:

CREATE OR REPLACE FUNCTION auditoriaXML() RETURNS TRIGGER AS $emp_audit$
  DECLARE
  BEGIN
  IF (TG_OP = 'DELETE') THEN
     insert into auditor_xml_data (i_id_xml, c_tabla_xml, c_modificado_xml, d_modificado_xml, xml_data) values (OLD.*);
  ELSIF (TG_OP = 'UPDATE') THEN
     insert into auditor_xml_data (i_id_xml, c_tabla_xml, c_modificado_xml, d_modificado_xml, xml_data) values (OLD.*);
     END IF;
  RETURN NULL;
  END;
$emp_audit$ LANGUAGE plpgsql;
Bueno, ya con eso se da paso al famoso trigger:

create trigger tr_xml_data after update or delete
on xml_data
FOR EACH ROW
EXECUTE PROCEDURE auditoriaXML();

Explicacion:

create trigger: normal es la parte de poder crear el objeto sobre la BD
tr_xml_data : el nombre del trigger
after update or delete: despues de actualizar o eliminar
on xml_data : sobre la tabla xml_data que creamos anteriormente
for each row: En este caso, pense en dejarlo solo con for each statement que era el por defecto, pero pasa lo siguiente: Cuando se hace con el statement no se tiene acceso a la variable OLD que es quien contiene la informacion del row antes de ser cambiada, asi que me toco con esa.
execute procedure auditoriaXML(): Listo con eso le decimos que debe ejecutar la funcion creada de auditoriaXML();

Hice varias pruebas y todo salio bien, lo unico que me preocupa de esto es cuando la tabla xml_data tenga muchos registros, dado que el trigger hace una lectura de la tabla que hayan cambiado y posterior a eso le ejecuta la funcion. Pero para lo que necesito esta bien.


Listo, los dejo con esa inquietud suerte!!


Documentacion:
http://www.postgresql.org/docs/9.1/static/sql-createtrigger.html
http://www.postgresql.org/docs/current/interactive/plpgsql-trigger.html

Probando las menciones

Probando lo nuevo de plus!! +Vovin Therion

jajaja ya lo puedo joder desde aca!!

11.06.2013

Postgres-XML y JAVA

Estoy probando esta BD para un proyecto que me encuentro realizando, he leido la documentacion de postgres y es en algunos casos incompleta, pero nada que otro ya hubiese tenido que hacer asi que como crear una columna de tipo XML en postgres ahi si es easy dado que solo se coloca como datatype el XML y listo, algo como:

Mi tabla de ejemplo:

CREATE TABLE xml_data ( c_tabla text, c_modificado text, d_modificado date, xml xml )

Como se puede verificar en el script, la columna XML se llama xml, algo creativo pero bueno eso no es lo importante.


>Ahora para la insercion de datos es necesario utilizar una utilidad de postgres llamada XMLPARSE la cual permite realizar el parseo de un documento o de una cadena, para el ejemplo se utilizara una cadena y asi realizar la insercion:

insert into xml_data values ('Departamento', 'Insercion', current_timestamp, XMLPARSE (CONTENT '<departamento><id>05</id><nmDepto>Antioquia</nmDepto></departamento>'));

Por que no le pongo los titulos a donde va la informacion, por pereza, ademas que  la informacion como se envia completa no es necesario agregar los nombres de las columnas donde va la informacion.

Explico el insert:
c_tabla = Departamento
c_modificado = Insercion
d_modificado = current_timestamp (La hora actual de la base de datos)
xml = <departamento><id>05</id><nmDepto>Antioquia</nmDepto></departamento> (Como objeto propio de postgres)


El XML queda de la siguiente forma:
<?xml version="1.0" encoding="UTF-8"?>
<Departamento>
    <id>05</id>
    <nmDepto>Antioquia</nmDepto>
</Departamento>


Asi que con esto ya se tiene una base de datos de tipo noSQL para trabajar y almacenar mucha informacion de cualquier cosa que deseemos guardar.

Ahora la parte que falta la de JAVA, como me traigo esa informacion, es sencillo dado que este objeto XML es devuelto como un Jdbc4SQLXML, esto en otras palabras es que ya es un objeto que podemos leer desde JAVA al momento de tener un resultSet, se puede reflejar en las siguientes lineas:

//Verificando que es un XML de postgres
if (resultSet.getMetaData().getColumnTypeName(i).indexOf("xml") >= 0
                        || resultSet.getMetaData().getColumnType(i) == 209) {
                    //xml 2009  postgres
                    columnXML = i;
                }


//Almacenando el valor de la columna
if (columnXML==i){
                        InputStream is = resultSet.getBinaryStream(i);
                        java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
                        String dataXML = s.hasNext() ? s.next() : "";

                        _data.add(dataXML);
                    }else{


Con eso, ya desde JAVA se esta leyendo el XML almacenado en la base de datos.

Bueno, espero el post les sirva tanto como a mi.

Suerte

8.09.2012

Problemas objetos blob

<p>Al momento de traer objetos de tipo blob o clob de oracle hacia java es importante cerrar este objeto con un clob.free() o clob.close() para q oracle cierre los recursos y los libere y no salga un error ora-04030 gracias al equipo de compañeros por esa tesuer

7.27.2012

Cerrar cursores en iracle desde java

Hola nos hemos encontrado con los cursores y oracle

El problema radica al momento de cerrar los cursores del oracle y no se hace mediante el close del statement se hace mediante el commit de la conexión se les deja ese apunte

2.01.2012

MOC con short cuts

Bueno, hace mucho no hago entradas, esta es la primera del año y quiero contarles que gracias a mi amigo hecky, he podido cuadrar los short-cuts para el mocp, entonces ahora lo siguiente:
Para iniciar MOC, en modo servidor hice un script:

/******************** Start Script ***********************\
mocp -S #Iniciar mocp en modo servidor
mocp -o shuffle #-o de on, encendiendo el aleatorio
mocp -p #Iniciando la reproducción
/******************** End Script ***********************\ Listo, hasta este punto todo es conocido, solo hemos iniciado el servidor de mocp; ahora configuramos las teclas de Linux, en mi caso un Ubuntu.
System->Preference->KeyBoard Shortcuts
No paramos en la última de la pantalla, ahi aparecera un Grupo de Custom Shortcuts, de no aparecer es normal, todos los shortcuts estan creados con el sistema, es tiempo de crear los nuestros.
En la parte inferior seleccionamos Add, aparecerá una pantalla de Custom Shortcut:

Name: Nombre del short cut, para el principal de iniciar la reproduccion y pausarla: start-stop mocp
Command: Comando a ejecutar, comando de mocp para parar e iniciar la reproducción: mocp -G
Y asi, de esta manera miramos mocp -h, para los otros comandos de siguiente y anterior
mocp -f: Siguiente canción
mocp -r: Anterior canción
Y listo, ha quedado mocp, desde nuestros shortcuts del teclado, si quieren las notificaciones acerca de la canción que se esta reproduciendo, se pueden instalar el paquete de notify-send, y listo, pueden poner como en mi caso:
/******************** Start Script ***********************\
#prvMocp.sh
mocp -r
notify-send "Curretn " "`mocp -i`" -t 2000
/******************** End Script ***********************\ Bueno, suerte

11.28.2011

street view

http://maps.google.com/maps?source=embed&layer=c&cbll=42.36396,13.368008&cbp=13,320.72,,0,-29.96&ie=UTF8&panoid=K0Hv_pLb98MJa2Cd_QcH2w&ll=42.363907,13.367907&spn=0,359.997589&z=19 Imagen extraña en street view

10.02.2011

Conversion de MOV

Si deseas hacer conversiones de MOV a MPEG con el codec de Linux for i in `ls -1 |grep -i .mov`; do ffmpeg -i $i -target ntsc-vcd $i.mpeg; done Saludos

8.28.2011

Skype en Slak de 64

Hola si has instalado slackware de 64 bits posiblemente no tienes compatibilidad para ejecutar skype es por eso que creé este post.....


Leyendo la página de : http://roberto.nivel6.com/worthkunst/?p=19#comment-60

Encontre lo siguiente, esto aplica para versión 13.37

He descargado la compatibilidad de 32 bits de la siguiente manera:

wget -r http://mirror.inode.at/data/bluewhite64/bluewhite64-13.0/extra/ia32-emulation/

luego de eso ingresan a la carpeta:
cd mirror.inode.at/data/bluewhite64/bluewhite64-13.0/extra/ia32-emulation/

Y ahi ya se encuentran los instaldores para slack los .txz

se hacen del rooty ejecuntan:
installpkg *txz

Y listo a disfrutar de skype, ya sea el paquete static o el txz compilado de slackbuilds.org


Suerte!!!

xrand avanzado Terminal

Hola, si tienes linux y quieres usar una pantalla extendida esto es lo que debes hacer:

#Todos estos comandos son como root, o en su defecto con sudo:
xrandr -q

Deben tener una salida similar a esta:

xrandr -q
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 353mm x 198mm
1366x768 60.0*+
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
VGA1 connected 1360x768+0+0 (normal left inverted right x axis y axis) 700mm x 392mm
1360x768 59.8*+
1280x768 59.9
1024x768 60.0
800x600 60.3
640x480 60.0
720x400 70.1


Luego de esto se debe identificar la salida principal para el caso de los portátiles es LVDS1 y el escritorio que quiero extender es hacia el lado derecho por lo cual ejecuto el siguiente comando para configurarlo:

#Se debe apagar la salida alterna
xrandr --output VGA1 --off
#Se pone el tamaño de la pantalla principal
xrandr --size LVDS1 1366x768
#Ahora se prende la pantalla extendida
xrandr --output VGA1 --auto
#Listo, por defecto sale como --same-as LVDS1, pero si se quiere cambiar es asi
xrandr --output LVDS1 --left-of VGA1
#Listo el LVDS1 queda como principal y el VGA1 queda a la derecha


Suerte

8.25.2011

Escritorio Remoto Linux


Hola si necesitas hacer escritorio remoto de linux, hacia otro linux esto es lo más importante

ssh user@host -X
#El -X es para exportar la sesión X
#Seguido hay que levantar el escritorio desde nuestro terminal con
xset s activate
#Listo, por el momento no funciona bien en xfce pero con gnome y kde al pelo

Suerte.....

8.21.2011

Abrir imagenes DICOM en linux

Llevo un rato leyendo y instalando cosas para ver qué sirve sobre xfce para la lectura de imagenes DICOM o imágenes de resonancias y cosas médicas, he encontrado esto en los repositorios

aeskulap

A mi juicio me parece una herramienta buena, obviamente no soy médico (Algún día lo seré) pero bueno, ahi les dejo la entrada por si alguna vez se encuentran con este tipo de imágenes...

Un poco mas de stream y descarga

Hola, si no son tan apasionados a las descargas como por consola, esto puede ser una buena opción....


http://ihatehate.wordpress.com/2009/03/30/how-to-download-save-streaming-video-from-the-internet-using-linux/


Interesado en stream y descarga

Descarga de Stream


http://all-streaming-media.com/record-video-stream/all-streaming-video-recording-software.htm



clave rar|zip|7zip|.....

Estaba revisando mi carpeta de descargas y encontre un archivo el cual no me sé la contraseña, revisando un poco encontre este blog:

http://www.debianadmin.com/howto-crack-rar-7z-and-zip-files-in-linux.html

El cual habla de lo que me sucedio y lo etoy probando igual debe funcionar, los pasos son los siguientes:

wget http://superb-east.dl.sourceforge.net/sourceforge/rarcrack/rarcrack-0.2.tar.bz2
wget http://kent.dl.sourceforge.net/sourceforge/rarcrack/rarcrack-0.2.tar.bz2
wget http://nchc.dl.sourceforge.net/sourceforge/rarcrack/rarcrack-0.2.tar.bz2

tar -xjf rarcrack-0.2.tar.bz2

cd rarcrack-0.2

como root:
make
make install


Si en este proceso falla, es por la libreria de xml, para solucionarlo: apt-get install libxml++2.6-dev

se prueba nuevamente: make, make install

y funciona, ahora para el uso del comando :

rarcrack --type rar --threads 4 nombredelrar.rar

y listo........, si crees que la clave contiene ñ o caracteres especiales debes parar el comando con Ctrl+C y luego en el xml que generó añadir estas opciones......

8.20.2011

juego linux

Si buscas juegos en linux, esta puede ser una buena opción:






Para unir las partes y montar la iso

Para unir las partes lo haremos con el comando 'cat', el qual iremos donde tenemos todas las partes descargadas y aplicaremos el siguiente comando:

$ cat prey_linux.iso.* > prey_linux.iso

Una vez unidas las partes, ya tendremos la ISO y la podremos montar con el comando 'mount', donde lo haremos comoroot:

$ mount -o loop prey_linux.iso /media/cdrom

En caso de no tener en '/media' una carpeta llamada 'cdrom' la crearemos nosotros como root de la siguiente manera:

$ mkdir /media/cdrom

Y luego ya podremos montarla.

Cuando este montada, ya podremos instalar el juego, accediendo al montado y ejecutando el instalador:

$ /media/cdrom
$ sh setup.sh

Recomiendo instalar el juego como usuario normal donde se instalara en '/home/tu_usuario/prey'.

Y Finalmente una vez instalado, desmontamos la ISO como root y ejecutamos el juego poniendo el 'CDKEY'

$ umount /media/cdrom

Y aleeeee, a disfrutaaaar con linuuuuxx !!


Todo ha sido una copia del link que esta al inicio......

Mapas mentales

Mapas mentales en internet...



Muy bueno, para que lo revisen, ahora construyo el software por medio de mapas mentales, es una buena práctica.