Saludos de nuevo.
Ahora, voy a compartir una experiencia que tuve en mi trabajo de la cual, como todas las experiencias, fue muy enriquecedora. En mi trabajo no tengo la oportunidad de trabajar mucho en Java, debido a que allí utilizamos php como lenguaje para resolver un Sistema Administrativo para que se adapte a las necesidades de nuestro Instituto INZIT. Por lo tanto en mis ratos libres aprendo un poco más sobre Java, ya que me considero amante a este tecnología.
Hace poco teníamos una duda acerca de cómo debíamos imprimir un reporte, de hecho era como imprimir el cheque, por experiencia pasada sabíamos que un PDF no era buena idea ya que la impresora de matriz de punto que se utiliza para este fin no generaba buenas impresiones PDF en ninguna fuente y también por experiencias pasadas sabíamos que la solución para este tipo de impresora era un archivo HTML en pantalla o texto plano (txt).
Pero había una restricción más para nuestro requerimiento de sistema y era que el cheque debe imprimirse una vez, y por lo tanto debe asegurarse que el cheque sea impreso en la forma adecuada.
La primera investigación que hicimos fue que JavaScript tiene la funcion window.print() que imprime el contenido en la ventana y también document.print() que puedo adaptarlo a que me imprima una sección de la página (como un DIV de HTML, por ejemplo). Ahora bien, las restricciones que vimos es que no había manera de determinar si el usuario presionaba click en "Imprimir" o "Cancelar" y por lo tanto no garantizaba que se realizara la impresión y de ser así para el sistema puede que ya se había impreso o cambiado el estado del cheque (y de otras tablas relacionadas más) por más que el usuario haga click en cancelar.
Al no gustarnos esta solución fuimos buscando otras alternativas, de allí surgió la idea, ¿Podríamos utilizar un applet de Java? Bueno, la idea era buena, que tal si por java podríamos capturar si se manda a imprimir satisfactoriamente o no y de allí cambiar los todas las tablas y los estados de nuestra base de datos para garantizar de que en verdad se mandó a imprimir y por la impresora correcta.
Bueno, la duda surgió un viernes y se esperó el fin de semana. Al otro lunes ya teníamos la solución en verdad el Applet lo puede hacer, de hecho, puedo capturar un archivo HTML, cargarlo en un JEditorPane mostrar el cuadro de diálogo imprimir y verificar si el presionó sobre Imprimir o Cancelar.
Total empezamos a desarrollarlo y a cuadrarlo con las dimensiones de los distintos formatos de cheques que tiene la nuestra empresa. Y en tres días pudimos hacer que nuestra aplicación PHP generara un archivo HTML en disco duro servidor, conectar en Applet con este archivo a través de un URL, mostrarlo en el JEditorPane y mandarlo a imprimir cuadrando con las dimesiones de todos los cheques. Eureka estaba listo!.
Bueno, pero no todo fue color de rosa.
Si por una parte podíamos hacer que se visualizara el HTML en el JEditorPane, este editor de Java no soportaba las sentencias más recientes de CSS como posicionado absoluto, muy importante para darle una ubicación exacta y no relativa, por lo tanto, cuadrarlo dio mucho trabajo.
Pero después de tenerlo hecho se nos presentó una idea nueva, nuestro jefe por experiencia en desarrollo de Sistemas Administrativos dijo que si era posible imprimir más de una vez el cheque si éste a pesar que se mandó a imprimir en forma satisfactoria, en realidad se mandó a imprimir en otra impresora que no era la de matriz de punto, esto trajo una variable nueva a nuestro sistema, ya no era necesario detectar si se daba click en Imprimir en cancelar, después de todo los datos del cheque ya estaban generado y se podía imprimir de nuevo si así el usuario lo necesitaba, así lo que que hicimos fue que siempre se iba a imprimir el cheque por PHP y JavaScript, pero sólo se imprimía de nuevo el cheque con una autorización del Jefe del Departamento Administrativo.
Bueno total, me quedé con el código Java, con la clase Applet que permite capturar un archivo HTML, presentarlo en pantalla a través de un JEditorPane y poder imprimir, inclusive configurando desde códigos las configuración de impresión como márgenes y otros.
En el próximo post explicaré con detalle el código que pude desarrollar a ver si a cualquiera de ustedes les sirve. Por ahora, lo más importante que quiero compartir es que cuando se tenga una idea de software de cómo desarrollar cierta aplicación hay que ver y discutir todas las opciones, es decir, después de recaudar los requerimientos de sistema, ver qué se debe desarrollar: ver las ventajas, desventajas de cada opción y sobretodo no programar "linealmente" cómo fue solicitado, ya que de seguro vendrán cambios en la aplicación mas adelante, el reto, para nosotros los desarrolladores es detectar los elementos claves del sistema y desarrollar en base a esto y después que el usuario quiera un cambio, este no debe afectar al desarrollo normal del sistema, lo que significa que si la lógica del negocio no cambia, el cambio debe ser adaptable en poco tiempo, ya que los elementos raíces se mantienen.
No intento relatar una idea nueva, esta idea ya ha sido expuesta en varias metodologías de desarrollo de software, sólo intento compartir una experiencia que me sucedió y que todavía estoy procesando, creo que la programación va más allá de resolverle a un usuario, la programación es detectar la lógica del negocio, para que éste mismo sistema pueda funcionar en distintos ambientes, empresas, negocios y usuarios, por ello nuestra labor será trascendente cuando nuestro trabajo lo sea y pueda resolver y adecuarse a las distintas pruebas.
Espero que esta idea les sea de utilidad y empecemos a detectar que necesita el hombre de nuestros días y a partir de ellas crear ideas... ¡Hasta la próxima!
Para ver la segunda parte de este artículo haga click aquí:
Paréntesis. II Parte. Compartiendo Código Applet
viernes, 16 de abril de 2010
miércoles, 31 de marzo de 2010
Novedades en el paquete javax.swing de java SE 6
Hola a todos de nuevo, es un placer para mí estar aquí de nuevo compartiendo acerca de las novedades que trae java 6. Ahora le toca el turno al paquete javax.swing.
Observando las clases directamente de la página de Sun Microsystem, tanto del JAVA SE 5 como del JAVA SE 6, puede verse que en este último fueron agregadas las siguientes clases:
DefaultRowSorter
DefaultRowSorter.Model
DefaultRowSorter.Wrapper
GroupLayout
JList.DropLocation
JTable.DropLocation
JTree.DropLocation
LayoutStyle
RowFilter
RowFilter.Entry
RowSorter
RowSorter.SortKey
SwingWorker
Para este artículo se explicará los fundamentos básicos para realizar interfaces gráficas con GroupLayout. Sin mas que esperar, empecemos:
Este administrador de disposición trabaja con eje vertical y horizontal separadamente. Cuando se ha definido la colocación de los componentes en uno de los ejes ya está la mitad del problema resuelto, se pasa luego a definir la colocación del mismo componente en el otro eje, si, esto quiere decir que cada componente debe estar presente tanto en el eje vertical como en el horizontal de no ser así el GroupLayout lanza una exception.
Este administrador de esquema puede organizar los componentes o secciones en forma secuencial o paralela: Secuencial significa uno al lado para el eje horizontal y uno arriba del otro para el vertical.
El paralelo significa colocar en una misma línea (vertical u horizontal) los elementos que necesite. Tanto si utiliza Secuencial como Paralelo se pueden agregar a ellos tanto componentes como nuevos grupos.
Veamos un ejemplo para aclarar las dudas que se hayan ir podido planteando hasta ahora:
Supongamos que queremos crear la siguiente interfaz gráfica:

Espero explicarme con estas dos imágenes a continuación; primero veamos la distribución horizontal:

Las líneas oscuras (negras) superiores reflejan la distribución mas externa de ese panel, como puede verse existe una disposición secuencial, de izquierda a derecha, por lo tanto si creamos primero en GroupLayout myLayout, lo primero que debemos hacer es definir esta distribución, de la siguiente manera:
Luego, se va definiendo o agregando el código de las secciones mas internas, por ejemplo, la primera sección contiene una distribución paralela de dos componentes, primero codificamos la sección paralela:
Luego los componentes:
Como hemos dicho, cada sección puede contener tanto componentes como nuevos grupos, esto quiere decir que pueden haber grupos anidados, es decir, grupos dentro de otros grupos.
Un ejemplo de esto es cuando queremos colocar los JCheckBox. La sección horizontal media contiene un nuevo grupo, tal como lo muestra el código que sigue:
Pasemos ahora a definir nuestra distribución vertical:

En este caso puede verse también una distribución secuencial (de arriba hasta abajo) y en este caso un poco más sencillo debido a que cada sección contiene directamente los componentes, es decir, no hay subdivisiones o grupos anidados.
El código fuente final de el GroupLayoutExample queda de la siguiente manera:
Para crear la clase ejecutable (main), sería:
Bueno, esto es todo por ahora, espero haberme explicado en este artículo, si quieren un Tutorial completo (en inglés) sobre GroupLayout, busca en esta dirección:
How to Use GroupLayout
Donde hay inclusive otro ejemplo.
Hasta la próxima!
Observando las clases directamente de la página de Sun Microsystem, tanto del JAVA SE 5 como del JAVA SE 6, puede verse que en este último fueron agregadas las siguientes clases:
DefaultRowSorter
DefaultRowSorter.Model
DefaultRowSorter.Wrapper
GroupLayout
JList.DropLocation
JTable.DropLocation
JTree.DropLocation
LayoutStyle
RowFilter
RowFilter.Entry
RowSorter
RowSorter.SortKey
SwingWorker
Para este artículo se explicará los fundamentos básicos para realizar interfaces gráficas con GroupLayout. Sin mas que esperar, empecemos:
Este administrador de disposición trabaja con eje vertical y horizontal separadamente. Cuando se ha definido la colocación de los componentes en uno de los ejes ya está la mitad del problema resuelto, se pasa luego a definir la colocación del mismo componente en el otro eje, si, esto quiere decir que cada componente debe estar presente tanto en el eje vertical como en el horizontal de no ser así el GroupLayout lanza una exception.
Este administrador de esquema puede organizar los componentes o secciones en forma secuencial o paralela: Secuencial significa uno al lado para el eje horizontal y uno arriba del otro para el vertical.
El paralelo significa colocar en una misma línea (vertical u horizontal) los elementos que necesite. Tanto si utiliza Secuencial como Paralelo se pueden agregar a ellos tanto componentes como nuevos grupos.
Veamos un ejemplo para aclarar las dudas que se hayan ir podido planteando hasta ahora:
Supongamos que queremos crear la siguiente interfaz gráfica:

Espero explicarme con estas dos imágenes a continuación; primero veamos la distribución horizontal:

Las líneas oscuras (negras) superiores reflejan la distribución mas externa de ese panel, como puede verse existe una disposición secuencial, de izquierda a derecha, por lo tanto si creamos primero en GroupLayout myLayout, lo primero que debemos hacer es definir esta distribución, de la siguiente manera:
myLayout.setHorizontalGroup( myLayout.createSequentialGroup()); |
Luego, se va definiendo o agregando el código de las secciones mas internas, por ejemplo, la primera sección contiene una distribución paralela de dos componentes, primero codificamos la sección paralela:
myLayout.setHorizontalGroup( myLayout.createSequentialGroup() .addGroup( myLayout.createParallelGroup()) ); |
Luego los componentes:
myLayout.setHorizontalGroup( myLayout.createSequentialGroup() .addGroup( myLayout.createParallelGroup() .addComponent(lblNombre) .addComponent(lblEmail) ) ); |
Como hemos dicho, cada sección puede contener tanto componentes como nuevos grupos, esto quiere decir que pueden haber grupos anidados, es decir, grupos dentro de otros grupos.
Un ejemplo de esto es cuando queremos colocar los JCheckBox. La sección horizontal media contiene un nuevo grupo, tal como lo muestra el código que sigue:
.addGroup(myLayout.createParallelGroup() .addComponent(txtNombre) .addComponent(txtEmail) .addGroup(myLayout.createSequentialGroup() .addGroup(myLayout.createParallelGroup() .addComponent(chkActualizacion) //etc... mas adelante está el código completo esto es sólo para explicación ) ); |
Pasemos ahora a definir nuestra distribución vertical:

En este caso puede verse también una distribución secuencial (de arriba hasta abajo) y en este caso un poco más sencillo debido a que cada sección contiene directamente los componentes, es decir, no hay subdivisiones o grupos anidados.
El código fuente final de el GroupLayoutExample queda de la siguiente manera:
GeSHi © 2004-2007 Nigel McNie, 2007-2009 Benny Baumann, 2008-2009 Milian Wolff
- package ejemploblog;
- import javax.swing.*;
- public GroupLayoutExample(){
- GroupLayout myLayout = new GroupLayout(this);
- setLayout(myLayout);
- //Crear espacio entre componentes
- myLayout.setAutoCreateGaps(true);
- //Crear espacio entre componente contenedor
- myLayout.setAutoCreateContainerGaps(true);
- myLayout.setHorizontalGroup( myLayout.createSequentialGroup()
- .addGroup(myLayout.createParallelGroup()
- .addComponent(lblNombre)
- .addComponent(lblEmail)
- )
- .addGroup(myLayout.createParallelGroup()
- .addComponent(txtNombre)
- .addComponent(txtEmail)
- .addGroup(myLayout.createSequentialGroup()
- .addGroup(myLayout.createParallelGroup()
- .addComponent(chkActualizacion)
- .addComponent(chkComentarios)
- )
- .addGroup(myLayout.createParallelGroup()
- .addComponent(chkCodigo)
- .addComponent(chkInfo)
- )
- )
- )
- .addGroup(myLayout.createParallelGroup()
- .addComponent(btnAceptar)
- .addComponent(btnOmitir)
- )
- );
- myLayout.setVerticalGroup(myLayout.createSequentialGroup()
- .addGroup(myLayout.createParallelGroup()
- .addComponent(lblNombre)
- .addComponent(txtNombre)
- .addComponent(btnAceptar)
- )
- .addGroup(myLayout.createParallelGroup()
- .addComponent(lblEmail)
- .addComponent(txtEmail)
- .addComponent(btnOmitir)
- )
- .addGroup(myLayout.createParallelGroup()
- .addComponent(chkActualizacion)
- .addComponent(chkCodigo)
- )
- .addGroup(myLayout.createParallelGroup()
- .addComponent(chkComentarios)
- .addComponent(chkInfo)
- )
- );
- }
- }
Parsed in 0.176 seconds at 12.76 KB/s
Para crear la clase ejecutable (main), sería:
GeSHi © 2004-2007 Nigel McNie, 2007-2009 Benny Baumann, 2008-2009 Milian Wolff
- package ejemploblog;
- import java.awt.BorderLayout;
- import javax.swing.JFrame;
- public class Aplicacion {
- marco.pack();
- marco.setVisible(true);
- }
- }
Parsed in 0.109 seconds at 3.64 KB/s
Bueno, esto es todo por ahora, espero haberme explicado en este artículo, si quieren un Tutorial completo (en inglés) sobre GroupLayout, busca en esta dirección:
How to Use GroupLayout
Donde hay inclusive otro ejemplo.
Hasta la próxima!
viernes, 19 de marzo de 2010
Java 6. Derby, la base de datos incluida en jdk 6
Saludos compañeros y gracias por estar de nuevo aquí aprendiendo juntos un poco más sobre lo que es la tecnología Java en su última version de Java SE 6.
Ahora le toca el turno a Derby: Base de datos relacional y transaccional que viene incluido por defecto en el JDK 6.0, más específicamente lo puede encontrar en la ruta de java. En windows: C:\Archivos de Programa\Java\jdk1.6.0\db, o en general en la carpera db donde se encuentra la instalación de java SE 6.
Para hablar un poco de dónde viene Derby, esta se inicia como CloudSpace: una base de datos relacional creada por Informix, compañía que fue adquirida en 2001 por IBM. en 2004 IBM decide convertir a CloudSpace en software libre cambiando su nombre a Derby.
La página principal de Derby es: http://db.apache.org/derby/.
Las ventajas que promete Derby son sus mínimas necesidades de configuración y administración y el pequeño espacio que ocupa en disco. Otra ventaja es que Derby soporta el almacenamiento de una base de datos archivada en un archivo JAR, lo que lo hace fácil de incluirlo y distribuirlo en nuestra aplicación.
Visto esto, empecemos a ver cómo incluir esta base de datos en nuestra aplicación Java.
Objetando un poco: Aunque se dice que Derby viene incluido con el JDK 6.0, en las últimas instalaciones que he realizado no ha sido instalado por defecto, por lo tanto lo descargué directamente de db-derby-10.5.3.0-bin.zip.
Una vez descargado se descomprime en la carpeta que se desee (supongamos C:\derby). Ahora se agrega al PATH (variable de entorno) la ruta interna bin (es decir C:\derby\bin). En esta carpeta se encuentran dos archivos esenciales: ij.bat y startNetworkServer.bat. Abrimos una consola y ejecutamos primero el startNetworkServer.bat (en la ruta C:\derby\bin) con esto se levantará el servidor de base de datos Derby.
Una vez hecho esto hay que dirigirse en una consola nueva a la carpeta de nuestro proyecto (preferiblemente) para crear nuestra base de datos nueva.
Una vez ubicado en la ruta de nuestro proyecto java se escribe ij.bat, se iniciará la aplicación ij que es la herramienta para conectarse, crear y manipular base de datos Derby.
NOTA IMPORTANTE: La creación de una base de datos Derby agrega una carpeta con el nombre de la base de datos al sistema en la ruta donde fue ejecutada la aplicación ij, por ello es recomendable dirigirse a la carpeta donde se encuentra nuestro proyecto y ejecutar allí esta herramienta.
Ahora a la linea ij> se debe agregar algo como:
NOTA: No olvide colocar el punto y coma al final de cada sentencia derby, ya que esto indica que finaliza la misma, si no lo hace no se ejecuta la sentencia escrita.
Con esto se crea una base de datos Derby de nombre NombreBD en la ruta donde se ejecutó el ij.bat. Podemos ahora crear una tabla, insertar registros y seleccionarlos:
Por defecto la ejecución automática está activada (autocommit ON), se puede controlar escribiendo en ij> autocommit ON; o autocommit OFF;
Para salir de la herramienta ij se escribe exit;
Una vez visto esto veamos como podemos enlazar esta base de datos a nuestra aplicación.
Ahora le toca el turno a Derby: Base de datos relacional y transaccional que viene incluido por defecto en el JDK 6.0, más específicamente lo puede encontrar en la ruta de java. En windows: C:\Archivos de Programa\Java\jdk1.6.0\db, o en general en la carpera db donde se encuentra la instalación de java SE 6.
Para hablar un poco de dónde viene Derby, esta se inicia como CloudSpace: una base de datos relacional creada por Informix, compañía que fue adquirida en 2001 por IBM. en 2004 IBM decide convertir a CloudSpace en software libre cambiando su nombre a Derby.
La página principal de Derby es: http://db.apache.org/derby/.
Las ventajas que promete Derby son sus mínimas necesidades de configuración y administración y el pequeño espacio que ocupa en disco. Otra ventaja es que Derby soporta el almacenamiento de una base de datos archivada en un archivo JAR, lo que lo hace fácil de incluirlo y distribuirlo en nuestra aplicación.
Visto esto, empecemos a ver cómo incluir esta base de datos en nuestra aplicación Java.
Objetando un poco: Aunque se dice que Derby viene incluido con el JDK 6.0, en las últimas instalaciones que he realizado no ha sido instalado por defecto, por lo tanto lo descargué directamente de db-derby-10.5.3.0-bin.zip.
Una vez descargado se descomprime en la carpeta que se desee (supongamos C:\derby). Ahora se agrega al PATH (variable de entorno) la ruta interna bin (es decir C:\derby\bin). En esta carpeta se encuentran dos archivos esenciales: ij.bat y startNetworkServer.bat. Abrimos una consola y ejecutamos primero el startNetworkServer.bat (en la ruta C:\derby\bin) con esto se levantará el servidor de base de datos Derby.
Una vez hecho esto hay que dirigirse en una consola nueva a la carpeta de nuestro proyecto (preferiblemente) para crear nuestra base de datos nueva.
Una vez ubicado en la ruta de nuestro proyecto java se escribe ij.bat, se iniciará la aplicación ij que es la herramienta para conectarse, crear y manipular base de datos Derby.
NOTA IMPORTANTE: La creación de una base de datos Derby agrega una carpeta con el nombre de la base de datos al sistema en la ruta donde fue ejecutada la aplicación ij, por ello es recomendable dirigirse a la carpeta donde se encuentra nuestro proyecto y ejecutar allí esta herramienta.
C:\RutaProyecto\ij.bat Version ij 10.5 ij> |
Ahora a la linea ij> se debe agregar algo como:
ij> connect 'jdbc:derby:NombreBD;create=true'; |
NOTA: No olvide colocar el punto y coma al final de cada sentencia derby, ya que esto indica que finaliza la misma, si no lo hace no se ejecuta la sentencia escrita.
Con esto se crea una base de datos Derby de nombre NombreBD en la ruta donde se ejecutó el ij.bat. Podemos ahora crear una tabla, insertar registros y seleccionarlos:
ij> CREATE TABLE persona(id integer, nombre varchar(15), apellido varchar(15), edad integer); 0 filas insertadas/actualizadas/suprimidas ij>INSERT INTO persona VALUES(1, 'Rafael', 'Romero', 31),(2, 'Orlando', 'Gracia', 42),(3, 'Yessica', 'Alba', 35); 3 filas insertadas/actualizadas/suprimidas ij> SELECT * FROM persona; //Se muestran los datos ingresados 3 filas seleccionadas |
Por defecto la ejecución automática está activada (autocommit ON), se puede controlar escribiendo en ij> autocommit ON; o autocommit OFF;
Para salir de la herramienta ij se escribe exit;
Una vez visto esto veamos como podemos enlazar esta base de datos a nuestra aplicación.
- import java.sql.*;
- public class Derbiando {
- Derbiando dbDerby = new Derbiando();
- dbDerby.mostrarDatos();
- }
- public void mostrarDatos(){
- try{
- while(rs.next()){
- }
- rs.close();
- s.close();
- conn.close();
- e.printStackTrace();
- }
- }
- }
Salida Generada: id: 1 nombre: Rafael apellido: Romero edad: 31 id: 2 nombre: Orlando apellido: Gracia edad: 42 id: 3 nombre: Yessica apellido: Alba edad: 35 |
domingo, 28 de febrero de 2010
Java 6: Publicación de una clase como un Servicio Web
Para este propósito encontré un artículo que habla claramente y paso a paso como construir un Servicio Web, es decir, como publicar nuestra clase java para que esté disponible en la web y poder ser utilizada por clientes en forma remota.
Java 6.0 agregó el paquete javax.xml.ws junto a las anotaciones de javax.jws.
El artículo completamente en español y se deriva de la documentación Java, es decir no es lo mismo pero utiliza el mismo ejemplo de esta documentación.
Utilizamos lo que se llama JAX-WS que no es más que las siglas para Java API for XML Web Services. Este blog a que les hago referencia, detalla paso a paso como hacer una clase y marcarla como publicable, crear la clase publicadora, y como por consola realizar los pasos para publicar y utilizar la clase por un cliente.
El enlace es el blog de Willy Mejía (willyxoft) y el articulo es Servicios Web con JAX-WS sin contenedores Java EE.
Para un tutorial completo sobre Web Services de java visite The Java Web Services Tutorial. Espero haber ayudado. Además todavía hay mucho que investigar.
Por cierto todavía tengo una duda y es cómo importar una clase de Java en una clase que será publicada como servicio web. Las cosas se complican un poco más, pero lean el artículo, incluso allí en comentario está escrita mi duda.
Nos vemos
Java 6.0 agregó el paquete javax.xml.ws junto a las anotaciones de javax.jws.
El artículo completamente en español y se deriva de la documentación Java, es decir no es lo mismo pero utiliza el mismo ejemplo de esta documentación.
Utilizamos lo que se llama JAX-WS que no es más que las siglas para Java API for XML Web Services. Este blog a que les hago referencia, detalla paso a paso como hacer una clase y marcarla como publicable, crear la clase publicadora, y como por consola realizar los pasos para publicar y utilizar la clase por un cliente.
El enlace es el blog de Willy Mejía (willyxoft) y el articulo es Servicios Web con JAX-WS sin contenedores Java EE.
Para un tutorial completo sobre Web Services de java visite The Java Web Services Tutorial. Espero haber ayudado. Además todavía hay mucho que investigar.
Por cierto todavía tengo una duda y es cómo importar una clase de Java en una clase que será publicada como servicio web. Las cosas se complican un poco más, pero lean el artículo, incluso allí en comentario está escrita mi duda.
Nos vemos
sábado, 30 de enero de 2010
Java 6: Conexión con los lenguajes de Script.
Si desea ver una imagen en tamaño completo haga click en ella.
Con la versión más reciente de Java (J2SE 6) se hace posible combinar secciones de código Java con lenguajes de Script como JavaScript, PHP, Ruby y Phyton entre otros. Esto gracias al nuevo paquete javax.script.
En nuestros ejemplos ejecutaremos ejemplos sólo combinando hasta ahora JavaScript y Java.
Para comenzar lo más importante es saber que se debe crear una instancia de ScriptEngineManager que me permitirá retornar un objeto ScriptEngine especificando el lenguaje con el que haré la conexión veamos esto con código:

Como se puede ver, además de crear los objetos explicados anteriormente se utilizó el método eval de ScriptEngine para evaluar el código Script (lanza ScriptException), en este caso obtendríamos por consola, la frase: Hola Mundo, que se ha impreso desde código JavaScript combinado con Java.
Nota: También podríamos enlazar con JavaScript con el método getEngineByExtension de ScriptEngineManager de la siguiente manera: factory.getEngineByExtension(“js”);
Claro, este es el ejemplo más sencillo, veamos qué otras opciones tenemos.
Supongamos que tenemos un procedimiento que queremos invocar en varias ocasiones, no es necesario colocar todo el código de nuevo, podemos hacer una función JavaScript mediante el método eval y luego castear el objeto ScriptEngine en Invocable, para llamar a la función creada en el momento que lo deseemos.

Salide del Ejemplo:
Hola, como estas?
Saludando de nuevo...
Hola, como estas?
Se invocó la función dos veces.
También podemos acceder a objetos de java desde nuestro código Script, para ello se utilizan los objetos Binding que son un mapa (Map) de pares clave-valor con clave String y valores Object (Map

Salida del ejemplo anterior:
Ambiente Script...
Java
C++
Phyton
Ambiente Java...
Java
C++
Phyton
Ruby
Aunque también puedo pasarle parámetros reales en la invocación del método en invokeFunction() de la interface Invocable, veamos:

Salida del ejemplo anterior:
Primera Impresion...
Java
C++
Segunda Impresion...
Java
C++
Ruby
Para terminar también es bueno saber que puedo utilizar objetos y métodos de java dentro de los scripts, para ello debo importar el paquete que desee y utilizarlo dentro del script, veamos ejemplo:

Salida del ejemplo anterior, por consola un número aleatorio del 0 al 1.
Para descargar un ejemplo completo de Scripting Java 6 haga click Aquí
Hablemos de las novedades de Java 6
Saludos de nuevo, es un placer para mí encontrarnos de nuevo en este año para compartir nuevas experiencias y conocimientos en el caso de la tecnología Java.
Para empezar este año hablaremos sobre la nueva versión de Java 6 (J2SE 6) y algo de lo nuevo que ha incluido esta versión.
Para comenzar nombremos algunas de ellas:
• Conexión con lenguajes de Script como JavaScript, PHP, Ruby, Phyton, entre los que pude encontrar.
• Exportar una clase como un Servicio Web.
• Uso de Derby , herramienta que ofrece conectarse y manipular bases de datos Derby.
• Hablaremos sobre algunas novedades del paquete javax.swing.
En fin, todo en lo que esté a mi alcance posible, para conocer las buenas nuevas que trae esta versión que está disponible ya, y que hasta esta fecha permanece como la versión más reciente.
Espero que esta información sirva de provecho y aclare dudas con respecto a las novedades de java 6. Feliz viaje.
Para empezar este año hablaremos sobre la nueva versión de Java 6 (J2SE 6) y algo de lo nuevo que ha incluido esta versión.
Para comenzar nombremos algunas de ellas:
• Conexión con lenguajes de Script como JavaScript, PHP, Ruby, Phyton, entre los que pude encontrar.
• Exportar una clase como un Servicio Web.
• Uso de Derby , herramienta que ofrece conectarse y manipular bases de datos Derby.
• Hablaremos sobre algunas novedades del paquete javax.swing.
En fin, todo en lo que esté a mi alcance posible, para conocer las buenas nuevas que trae esta versión que está disponible ya, y que hasta esta fecha permanece como la versión más reciente.
Espero que esta información sirva de provecho y aclare dudas con respecto a las novedades de java 6. Feliz viaje.
jueves, 31 de diciembre de 2009
Feliz Año nuevo 2010
Al culminar este año les agradezco que hayan compartido con nosotros nuestro primer año en línea de "Acerca de Java".
Espero seguir compartiendo junto a ustedes siempre, esperando de sus comentarios y sugerencias para poder llevar un mejor servicio de estudio de la tecnología Java, con la bendición de Dios, la compañía de los ángeles y con todos ustedes lectores que son los principales protagonistas.
Para el año entrante 2010 espero sigamos adelante, haciendo uso de nuevas alternativas para compartir las técnicas de programación, también de innovaciones de esta tecnología, enlaces a otras páginas webs y blogs que puedan aclararnos las ideas y compartir el conocimiento que nos lleve a crecer como personas y a mejorar las condiciones de vida del ser humano.
Nos espera todavía mucho por recorrer, java es un lenguaje muy extenso y por eso hay tantos libros que lo abordan de distinta manera. Gracias a todos los que escriben por pasión al conocimiento, al libro de la WROX "Java JDK 6.0" (W. Clay Richardson y otros autores) de la cual he extraído algunas ideas para compartir, a DEITEL por su libro "Java, cómo programar" donde explican de forma clara, extensa y precisa la programación orientada a objetos en Java 1.4; por supuesto, también gracias al API de Java que es la guía de referencia de cualquier programador Java y por último a todos los blogs, foros y demás herramientas de internet que sirven para tener información de referencia y poder aclararla o extenderla. Es decir gracias a todos aquellos que directa o indirectamente aportan o hacen posible este servicio.
Y además, gracias de nuevo a ustedes por su compañía y apoyo.
¡Nos vemos en el 2010, Feliz Navidad y un 2010 lleno de amor y esperanza!
Les desea su servidor Kelvin Atencio a través de www.acercadejava.blogspot.com
Espero seguir compartiendo junto a ustedes siempre, esperando de sus comentarios y sugerencias para poder llevar un mejor servicio de estudio de la tecnología Java, con la bendición de Dios, la compañía de los ángeles y con todos ustedes lectores que son los principales protagonistas.
Para el año entrante 2010 espero sigamos adelante, haciendo uso de nuevas alternativas para compartir las técnicas de programación, también de innovaciones de esta tecnología, enlaces a otras páginas webs y blogs que puedan aclararnos las ideas y compartir el conocimiento que nos lleve a crecer como personas y a mejorar las condiciones de vida del ser humano.
Nos espera todavía mucho por recorrer, java es un lenguaje muy extenso y por eso hay tantos libros que lo abordan de distinta manera. Gracias a todos los que escriben por pasión al conocimiento, al libro de la WROX "Java JDK 6.0" (W. Clay Richardson y otros autores) de la cual he extraído algunas ideas para compartir, a DEITEL por su libro "Java, cómo programar" donde explican de forma clara, extensa y precisa la programación orientada a objetos en Java 1.4; por supuesto, también gracias al API de Java que es la guía de referencia de cualquier programador Java y por último a todos los blogs, foros y demás herramientas de internet que sirven para tener información de referencia y poder aclararla o extenderla. Es decir gracias a todos aquellos que directa o indirectamente aportan o hacen posible este servicio.
Y además, gracias de nuevo a ustedes por su compañía y apoyo.
¡Nos vemos en el 2010, Feliz Navidad y un 2010 lleno de amor y esperanza!
Les desea su servidor Kelvin Atencio a través de www.acercadejava.blogspot.com
Suscribirse a:
Entradas (Atom)
