web 2.0
Mostrando entradas con la etiqueta JAVA. Mostrar todas las entradas
Mostrando entradas con la etiqueta JAVA. Mostrar todas las entradas

miércoles, 14 de marzo de 2012

JPA con NetBeans y Beans Binding API

Les dejo el primer video de una serie de tutoriales básicos de JPA con NetBeans.

En este primer video solo se describe el ejemplo que se va a realizar, así como una simple y sencilla interfaz gráfica. En el segundo video, se explicara como crear la Unidad de Persistencia y mostraremos los datos en un JTable. Finalmente en el tercer video explicaremos el uso del Beans Binding API para crear de forma muy rápida una interfaz funcional conectada a la BD.

Tutorial en español JPA 2.0

Les comparto este tutorial en español sobre JPA 2.0

http://www.davidmarco.es/blog/entrada.php?id=144

La página tiene algunos otros tutoriales como de EJB y algunas traducciones de Hibernate. Altamente recomendable darse una vuelta por la web anterior.

Saludos!!

domingo, 29 de enero de 2012

Objective-C para desarrolladores Java: Parte 1

Como desarrollador Java y claro que no con mucha experiencia en lenguaje C, es importante comenzar conociendo algunas diferencias entre ambos lenguajes. Aprendí cuestiones básicas de lenguaje C desde la preparatoria, pero claro que sin tener ninguna práctica en la Universidad, olvide lo que aprendí, sin embargo no es muy complicado recordar aquellas cuestiones básicas.

En este sencillo tutorial, vamos ver algunos conceptos básicos de Objective-C que hereda del lenguaje C con el fin de perfilarnos más adelante a comenzar con el desarrollo de aplicaciones en MAC OS X y iPhone utilizando Xcode.

Aunque Objective C es más utilizado en el mundo Mac y este ejercicio se desarrolló en una MacBook, es posible hacerlo en Windows, bajar el compilador y cualquier editor, aunque claro esta, no es tarea de este tutorial explicar su instalación. A continuación paso a listar las herramientas utilizadas para este ejercicio.

NOTA: No es intensión de este tutorial, explicar las diferencias entre lenguaje C puro y Objective C.

HERRAMIENTAS.

  • MacBook Pro - OS X Lion
  • CodeRunner - Puedes utilizar cualquier otro editor de texto.

 

CONCEPTOS BÁSICOS

Al igual que en Java, en Objective C se acostumbra al uso de Interfaces y Clases. Vamos a crear una interfaz llamada Arithmetic

 

NewImage

Figura 1.

  • En Java, la super clase cósmica de la cual deriva toda la jerarquía de clases de la biblioteca de Java, es llamada Object. Pues bien, en Objective C, NSObject es el similar a la clase Object. Aunque en Objective C no es requisito que una clase derive de NSObject. En Java si una clase no especifica extender a otra clase, internamente deriva de Object.
  • Mientras en Java la herencia de especifica mediante la palabra "extends", en Objective C se indica mediante el símbolo dos puntos (:).
  • En Java, el cuerpo de una interfaz o de una clase esta definida por la apertura y cierre de llaves {….}, en Objective C se delimita por @interface y @end.
  • En Objective C las variables de instancia de declaran seguido de la definición de la interfaz y encerradas entre llaves, tal y como se muestra en la imagen. operador1 y operador2 son estas variables.
  • En Java podemos definir Fmétodos de instancia y métodos de clase. Recordando que los métodos de instancia son aquellos que podemos invocar creando una instancia del objeto, mientras que los métodos de clase son aquellos que podemos invocar sin tener una instancia de un objeto, como por ejemplo, los métodos de la clase Math son un ejemplo claro de los métodos de clase… Math.pow(…..). En java, los métodos que en su definición agregan la palabra static, se consideran métodos de clase.

 

NewImage

Figura 2.

  • En Objective C, un método de instancia se declara con el símbolo menos (-) y los métodos de clase (como el método pow en Java) se declaran con el símbolo más (+) [figura 1].
  • El tipo de dato de retorno de un método siempre se especifica entre paréntesis, en este caso, es (void) [figura 1].
  • Como se observa en la figura 1, después del nombre del método, se escribe el caracter dos puntos (:) para posteriormente indicar el tipo de dato del parámetro que es encerrado dentro de paréntesis. En este caso, tenemos dos parámetros llamados op1 y op2. Ámbos son de tipo (NSInteger).

En la segunda parte vamos a realizar la implementación de la interfaz y veremos como compilar, enlazar y ejecutar este ejercicio desde la línea de comandos para que en la tercer parte podamos desarrollar una sencilla interfaz gráfica mediante Xcode + Interface Builder que utilice esta clase Arithmetic.

 

III. Paso de parámetros en Java: Por Valor

Explicábamos en la segunda parte de este artículo que lo que realmente se pasa es una copia de la referencia. La explicación gráfica del ejemplo anterior de lo que sucede en memoria es la siguiente.

image

 

 

 

 

 

 

 

 

 

 

Recordemos que en nuestra primera entrega explicamos lo que es una “referencia de objeto” y decíamos que una referencia de objeto apunta al Objeto.

Entonces cuando creamos al objeto “ascari”, este es solo una referencia a un objeto Empleado. Cuando invocamos al método triplicarSueldo y le pasamos como parámetro al objeto ascari, no le estamos pasando la dirección de memoria de “ascari”. Lo que sucede es que se hace una copia de la referencia “ascari” y esta copia se pone en “x”.

Lo anterior es la piedra de tropiezo para muchos, y es lo que les causa confusión. El hecho de que Java maneje el concepto de “referencia de objeto” es lo que hace pensar que Java hace un paso de parámetros por referencia, es decir, que se le pasa la dirección de memoria. Sin embargo, una referencia de objeto es un apuntador a un Objeto ubicado en algún otro lugar de memoria.

Como lo comentábamos, cuando “ascari” es pasado al método triplicarSueldo, no quiere decir que a “x” le sea asignada la dirección de memoria de “ascari”. Como lo ilustra la figura de arriba, se hace una copia de la referencia! Por lo tanto existen dos referencias que apuntan a un objeto Empleado.

Técnicamente esta mal dicho si decimos “modificar x” ó “modificar ascari” ya que en ningún momento estamos modificando a “x” o “ascari” ya que estas son solo referencias a un objeto Empleado, lo que realmente se modifica es el objeto Empleado.

Ahora como seguramente muchos pensaran que todo lo anterior es absurdo, hay que realizar un último ejemplo para demostrar de forma contundente que los objetos no son pasados por valor.

Tercer Ejemplo.

Hagamos un método llamado intercambiar que reciba dos objetos Empleado y que intente intercambiar a los empleados.

image

image

Si Java hiciera un paso de parámetros por “referencia” el resultado de este ejemplo es que “a” terminaría refiriéndose a Beto y “b” terminaría refiriéndose a Ascari, sin embargo no es así. ¿Qué esta pasando internamente en memoria? ¿Por qué en el ejemplo anterior si existe un cambio en la variable que hace la llamada y  en este no?

Si el paso de parámetros Si el paso de parámetros fuera por referencia, ocurriría algo como esto.

image

Si Java hiciera un paso de parámetros por referencia, entonces “x” obtendría la dirección de memoria de “a” y “y” obtendría la dirección de memoria de “b”. Entonces cuando en el método “intercambiar” intentemos hacer que “x” apunte al Empleado Benito y que “b” apunte al Empleado “Ascari”, por ende “a” también apuntaría a “Benito” y “b” apuntaría a “Ascari”. (Figura de abajo).

image

Sin embargo, podemos comprobar que lo anterior no funciona. a sigue refiriéndose a Ascari y b a Benito. Por lo tanto, Java no acepta un paso de parámetros por referencia sino por copia o valor, pero lo que se copia es la referencia del objeto.

Ahora veamos lo que en realidad esta pasando.

image

Observamos que existe una copia de las referencias a y b. Estas referencias son copiadas en x e y. Ahora “x” apunta a Ascari y “y” a Benito.

image

Pero inmediatamente en el método “intercambiar” se realiza el intercambio.

image

Ahora vemos como “x” apunta a “Benito” y “y” apunta a “Ascari”.. Sin embargo no perdamos el foco de que tanto “a” como “b” siguen apuntando al mismo objeto!!!!!!!!!

Lo anterior demuestra de forma contundente que Java NO realiza el paso de parámetros por referencia, sino por copia, pero lo que sucede es
que se hace una copia de las referencias de objeto.

Desafortunadamente autores de libros sostiene que Java realiza paso de parámetros por referencia para los objetos.

Algunos autores son:
● Francisco Javier Ceballos
● Agustín Froufre

Afortunadamente hay autores que con toda la autoridad desmienten lo anterior. Algunos de ellos son:

● Gary Cornell
Autor y coautor de más de una veintena de libros. Posee el
titulo de Doctor otorgado por la Brown University y ha sido
científico visitante en IBM.


● Deitel & Deitel
Toda una autoridad y sus libros son un clásico
en lo tocante a Java y C++.

Pero si todavía queremos más referencias para creer, existen libros de preparación para el EXÁMEN DE CERTIFICACIÓN “SUN CERTIFIED JAVA PROGRAMMER” tal es el caso del libro “SCJP Exam for J2SE 5” del Dr. PAUL SANGHERA, donde en la página 124 afirma lo siguiente.

“The key point to remember is that regardless of whether the passed variable is a primitive or a reference variable, it is always the copy of the variable, and not the original variable itself. Technically speaking, it is pass-by-value and not pass-by-reference within the same virtual machine.”

 

Más adelante, en la página 125 comenta lo siguiente.

“Recall that an object reference variable points to an object, and it is not the object itself. When you pass a reference variable in a method, you pass a copy of it and not the original reference variable.”

Ahora bien, para los necios, por si esto fuera poco, el mismo creador de Java, sostiene que Java solo utiliza el paso de parámetros por valor.

““There is exactly one parameter passing mode in Java – pass by value – and that helps keep things simple.”

 

Podemos dar por hecho que hemos desmentido una creencia errónea y a partir de ahora, no seremos engañados por muchas páginas de internet y de personas que dicen que Java acepta el paso de parámetros por valor y por referencia.

 

Saludos!!

II. Paso de parámetros en Java: Por Valor

Existe una creencia errónea muy difundida de que en Java el paso de parámetros se realiza de dos formas.

● Los tipos primitivos se pasan por valor.
● Los objetos se pasan por referencia.

 

Es necesario aclarar que en Java solo existe un único modo de paso de parámetros. Paso por valor. Y lo anterior, es independiente si se trata de un tipo primitivo o un objeto.

Primer Ejemplo.

Si tenemos el siguiente método.

image

Ahora creamos un objeto Empleado para triplicar el sueldo.

image Hasta aquí todos concordamos que no se altera el valor de porcentaje.

image

 

Definitivamente comprobamos que incluso aquellos que me acusan de ignorante por no tener idea de lo que hablo, tienen razón! Los tipos primitivos son pasados por valor. Ahora, veamos con un segundo ejemplo si tienen razón al decir que los objetos son pasados por referencia.

Segundo Ejemplo.

Tenemos una clase Empleado. El primer parámetro del constructor es el nombre, el segundo, tercero y cuarto es el día, mes y año respectivamente de su fecha de contrato en la empresa.

image

Observemos como al empleado en cuestión le asignamos como fecha de contrato el 11 de Junio del 2009.

Al imprimir la fecha de contrato podremos observar que dicha fecha fue alterada ya que obtenemos una fecha del 11 de Junio de 1999! Le hemos quitado 10 años de trabajo al empleado!

Básicamente lo anterior no es un paso de parámetros, pero es un buen ejercicio de calentamiento para prepararnos con lo que sigue.

Tercer Ejemplo.

Entremos en materia pues y hagamos un método que reciba como parámetro un Objeto de tipo Empleado.

image

Ahora vamos a crear un objeto Empleado y pasarlo como parámetro al método triplicarSueldo.

image

Upss!!!!!!!!!! El sueldo del empleado ya no es el mismo!!!!!!!!!!!!!! oh nooooo, tenían razón!! Los parámetros en Java se pasan por referencia :( me equivoque! Bueno ni modo, cerrare el blog. Nos vemos……

……………………….

……………………….

Bueno soy malo para fingir pero hice mi mejor esfuerzo. La verdad es que pese a lo anterior, los objetos son pasados por valor, le guste a quien le guste así es y será por los siglos de los siglos. Lo que realmente sucede es que se pasa una copia de la referencia!

¿Copia de la referencia?… Pero que es eso? De que hablo?.. Bueno, esto se explicará en la tercera parte de este artículo.

Nos vemos a la próxima!!

I. Paso de parámetros en Java: Por Valor

Después de varios meses de no escribir en el Blog, he decidido responder a una serie de cuestionamientos sobre el tema de “Paso de parámetros en Java” donde desafortunadamente existe mucha confusión al respecto y por ende he recibido comentarios en donde dicen que yo no tengo idea de lo que hablo. Pero bueno, aclaremos ahora todo esto y veamos en donde esta el meollo del asunto o el asunto del meollo.

Ocupare material elaborado por mi en un curso que impartí sobre Java. Barreré como a la hojarasca!

 

Introducción

image

Variables primitivas.

Básicamente consisten en variables de alguno de los tipos primitivos.

Variables de Referencia.

También se les llama variables de objeto. Estas variables no son el objeto mismo, son solo una referencia al objeto. Imaginemos tener una variable de tipo Date.

private Date fechaLimite;

Al crear el objeto con el operador new, sucede algo como lo mostrado en la imagen de abajo.

image

fechaLimite no es el objeto en si, más bien es una referencia al objeto Date.

En Java, el valor de toda variable de objeto es una referencia de un objeto que reside en algún otro lugar. El valor proporcionado por el operador new también es una referencia.

La expresión new Date() crea un objeto del tipo Date, y su valor es una referencia del objeto recién creado. Esa referencia se almacena entonces en la variable fechaLimite. Las referencias de objeto son equivalentes a los punteros de C++, sin embargo, en Java no es posible manejar punteros y la administración de memoria es una tarea del Garbage Collector.

 

Existe Existe en la terminología de las Ciencias Computacionales para el paso de parámetros a los métodos.


● Paso por valor o copia. Significa que el método obtiene solamente el valor (una
copia) que proporciona quien hace la llamada.


● Paso por Referencia. Significa que el método recibe la ubicación de la variable
que proporciona quien hace la llamada.

 

Ahora si, una vez aclarado lo anterior, podemos comenzar a desmentir a esa falsa creencia que tienen algunos de mis lectores del blog y muchísima más gente conocedora de C++ pero no de Java y piensan que todo es igual en Java.

jueves, 19 de agosto de 2010

Introducción a los WebService I: Práctico y Fácil

Nivel: Intermedio
Se requieren conocimientos de programación. Este tutorial es meramente didáctico y se ha desarrollado a modo de ser entendible para usuarios sin experiencia en el tema, de tal modo que se pudieron omitir configuraciones.

INTRODUCCIÓN

¿Alguna vez se han preguntado de que manera los Sistemas de Banca en Línea por Internet pueden ofrecer a sus usuarios servicios tales como, recarga de tiempo aire, pago de tarjeta de crédito, pago de recibos de luz y agua, etc?

En primera instancia quizá esto sea poco importante, irrelevante, pero si nos detenemos y pensamos un poco en que las diferentes compañías como Telmex, CFE, Bancomer, Sky, Movistar, etc., tienen sus Sistemas desarrollados en diferentes plataformas (.NET y Java generalmente) ¿Como es que podrían comunicarse plataformas diferentes?


Pago de Servicios de la Banca en Línea de Banco Azteca.


¿Como podrían comunicarse dos personas que hablan un idioma diferente?...

La respuesta a esto son los WebService! Los WS publican unos descriptores XML llamados WSDL que definen una interfaz de comunicación para que otros WS Cliente puedan hacer uso de ellos e invocarlos. Para entender de mejor forma lo anterior, podemos imaginar a dos personas que hablan idiomas diferentes y sin embargo desean comunicarse entre si de forma efectiva, así que uno de ellos publica una interfaz que la otra persona pueda entender como por ejemplo una serie de dibujos (escritura pictográfica) o de movimientos (mimica) y a esta interfaz es a lo que llamamos el WSDL. De esta forma ambas personas aunque hablen un idioma diferente podrán comunicarse.

Mediante los WS, por ejemplo, la Banca en Línea de Banco Azteca puede ofrecer a sus clientes el pago de diversos servicios, pues sencillamente hace uso de los WS que otras compañías publican, crea un cliente para consumir esos WS y listo! tendremos a Sistemas desarrollados en diferentes plataformas comunicandose.

Existen diversos "tipos de WebService", dos de los más comunes son los:

  • Basados en el protocolo SOAP
  • Basados en Rest
En este tutorial dividido en 2 partes veremos los más clásicos, los que utilizan el protocolo SOAP.

HERRAMIENTAS UTILIZADAS



Nota --> La instalación de Tomcat es muy sencilla y funcional siguiendo este tutorial.

DESARROLLO

Para iniciar debemos desplegar el WAR de Axis en Tomcat e invocar la siguiente URL



Debemos validar que tenemos las librerías esenciales para el correcto funcionamiento de axis, para ello basta con dar click al botón de Validate.

Ahora mediante Eclipse vamos a crear un proyecto Java común y corriente y una clase llamada Saludo:


Posteriormente crearemos un archivo xml al que llamaremos services.xml en una carpeta a la que llamaremos META-INF y estará en la raíz del proyecto, de tal forma que debe lucir algo así:





Así pues, vamos ahora a exportar dicho archivo a un JAR que los WS conocen como AAR. En eclipse damos click derecho sobre el proyecto y damos click a export. Seleccionamos JAR File y escribimos un nombre poniendo la extensión ".aar".

Finalmente vamos a la consola de Administración de Axis. Nos pedira un Usuario y Password, así que tecleamos "admin" y "axis2" respectivamente. En la parte de Upload Service podremos subir el archivo que generamos.





Si todo sale bien, en Available Service tendremos el WS que hemos subido.



Si damos click sobre el nombre del WS, nos abrirá una página en blanco, pero si vemos su código fuente, veremos el famoso archivo WSDL que será el que utilizaremos en la segunda parte de este artículo para generar un cliente que consuma este WS.




En esencia, los WS son sencillos de implementar, aunque como toda tecnología, tienen sus puntos complicados.

Saludos!!

miércoles, 2 de junio de 2010

DB4O: Una Base de Datos Orientada a Objetos

DB4O es una Base de Datos Orientada a Objetos que cumple muy bien su función, persistir datos de aplicaciones de pequeña y mediana escala.

Los modelos Relacional y Orientado a Objetos son ciertamente incompatibles, en términos simples, al desarrollar una aplicación con Base de Datos no almacenamos objetos, si bien nos va, utilizando un patrón de diseño DAO podemos "abstraer" un poco la complejidad de la persistencia en la capa web y pasarla a una capa de persistencia para que sea otra persona quien la implemente, o mejor aún, de una forma más sofisticada emplear un Framework ORM como Hibernate. Pero en el peor de los casos, al trabajar con una BD Relacional utilizamos variables escalares y enviamos sus valores a la BD.

Sin entrar en polémica sobre la utilización o no utilización de SQL embebido código de un Lenguaje de alto nivel  o la utilización de un ORM, es bueno considerar a DB4O como una alternativa real y potente para muchos de los proyectos que podamos desarrollar.

Su utilización es tan fácil que para abrir una conexión basta hacer algo como:

ObjectContainer db = Db4o.openFile(DB4OFILENAME);

Y para persistir información basta con escribir:

db.store(usuario);
db.close();

Sin mapeos, ni XML, ni SQL, ni concatenación de variables a String que contiene SQL!! Basta con crear el objeto y emplear el método save.



Existe una versión de DB4O para Java y una más para C#, mismas que pueden descargarse de la página oficial.Para nuestro ejemplo en Java basta con agregar a nuestro entorno de programación (Eclipse, NetBeans, etc) el archivo db4o-7.4.88.12908-java5.jar.

Al descargar la librería de la página oficial, nos vendrá con una completa documentación, incluido un muy buen tutorial en ingles y español sobre su utilización.

Un sencillo y austero ejemplo en NetBeans se puede descargar de aquí



miércoles, 10 de marzo de 2010

Métodos de Ordenación de forma concurrente


En mi blog anterior, publique en el 2008 un artículo sobre la ordenación de un arreglo de números aleatorios mediante 3 métodos: QuickSort, Burbuja e Inserción. Pero estos métodos se ejecutaban de forma concurrente mediante Threads. En ese tiempo, no se la razón por la cual no subi el código fuente y mucha gente lo solicito en los comentarios de dicho artículo!
Pongo aquí el código fuente para su descarga!

sábado, 27 de febrero de 2010

Serializar objetos Java a XML



Mediante XStream podemos crear de manera extremadamente fácil un XML. En este ejemplo, aprenderemos la manera de hacerlo, para ello descarguemos la distribución binaria de la página oficial.-

HERRAMIENTAS

  • Equipo portatil Acer Aspire, Intel Celeron 1.86 Ghz, 1 GB RAM
  • Mandriva 2009, KDE 4
  • XStream 1.3.1
  • Eclipse 3.4.2-

DESARROLLO

Antes que nada, debemos agregar las librerias XStream a nuesro entorno de desarrollo, ya sea Eclipse, NetBeans o cualquier otro. En este enlace puedes ver como agregar librerias a eclipse. Las librerias que agregaremos para este ejemplo serán “xstream-1.3.1.jar”  y “xpp3_min-1.1.4c.jar”.
Posteriormente creamos un proyecto Dynamic Web. Creamos una clase Java llamada “Direccion” y posteriormente otra llamada “Persona” dentro del paquete “beans”.
package beans;

public class Direccion {

 private String calle;
 private String colonia;
 private String municipio;
 private String estado;
 private int cp;

}
package beans;

import java.util.ArrayList;

public class Persona {

private String nombre;
private String apaterno;
private String amaterno;
private ArrayList direccion;

}
Finalmente encapsulamos todos atributos en sus métodos setter y getter, seleccionando los atributos y dando click derecho sobre la selección para escoger la opción de “Source–Generate Getters and Setters”.
Ahora crearemos una clase llamada TestXML dentro del paquete test, y copiaremos el siguiente código:
public class TestXML {

public static void main(String args[])
{
Direccion direccion = new Direccion(
"Aqui la calle","Aqui la colonia","Aqui municipio",
"Aqui el estado", 12345);

Persona persona = new Persona(
"Ascari", "Romo", "Pedraza", direccion);

XStream stream = new XStream();
stream.alias("persona", Persona.class);

String xml = stream.toXML(persona);
System.out.print(xml);

}
Como ven es muy fácil, ahora más interesante será obtener los datos de un manejador de BD, crear el XML como ya se explico y enviarlo a la capa de presentación en Flex para su visualización.