JScrollBar y JTextArea SWING, scroll arriba, después de agregar un texto setear el Scroll al principio.
Un pequeño Dato Java, hay un problemita que ocurre cuando estamos trabajando con Swing, específicamente con el JScrollBar y JTextArea. Supongamos que a este JTextArea al presionar un botón le seteamos un texto grande el cual hace que por default el scroll baje y para visualizar el contenido desde el principio tenemos que subir el scroll, bueno ese comportamiento no es el adecuado ya que es fastidioso tener que mover el scroll hacia arriba para visualizar el contenido.
Para solucionar ese problema y que el scroll del JTextArea siempre este arriba solo tenemos que setear esto:
JTextArea.setCaretPosition(0);
Pequeños datos que pueden ahorrarte un montón de tiempo. Suerte!!
Siguiendo un poco con la temática de la Collection framework, este es un topic muy interesante, como ya sabemos hay varias interfaces en este framework, el HashSet es una de las implementaciones de la
SetForma parte de la Collection framework y básicamente lo que quiere decir es que en un Set solo puede existir un objeto, no pueden haber objetos repetidos.
interface. Para crear un HashSet solo tenemos que hacerlo de esta manera:
// Un HashSet simple de String
HashSet<String> hashSet = new HashSet<String>();
Simple no, bueno detrás de ese código, si vamos un poco más allá podemos ver que el código de ese constructor es así:
public HashSet() {
map = new HashMap<>();
}
//Donde "map" esta declarado asi
HashMap<E,Object> map;
Aquí ya vemos que algo está un poco extraño, sorpresa, como es que un HashSet que implementa la interface Set en su implementación tiene un HashMap que implementa la interface Map?? Bueno algo muy sencillo, como les venía diciendo al principio del articulo un HashSet no permite objetos repetidos y los ingenieros de Java para asegurarse de que no pudiéramos ingresar objetos repetidos decidió utilizar un HashMap internamente el cual tampoco permite objetos repetidos, por que lo hicieron así?? Porque pueden, es algo confuso, pero funciona muy bien y reutilizan el código.
Una vez creado el HashSet, vamos a comentar un poco sus métodos mas importantes, supongamos que queremos agregar un conjuntos de personas al HashSet, lo hacemos así:
Si corremos el ejemplo veremos la salida en la consola:
HashSet= [Pedro, Pepe, Luis]
Si analizamos el método add(), vemos que este es su código:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
// Donde "PRESENT" es
Object PRESENT = new Object();
Este método devuelve un boolean, si el objeto se agrega al HashSet devuelve true si no false, como ya sabemos, internamente esto funciona como un HashMap, cuando agregamos un objeto en un HashMap si ese objeto ya está agregado devuelve el valor anterior de esa key pero si el objeto no está y se agrega al HashMap devuelve null, entonces lo que hace el método add() es evaluar que devuelve y así se sabe si agrega o no el objeto. Podemos utilizar el boolean que devuelve el método para ejecutar algún código, por ejemplo:
boolean b = hashSet.add("Luis");
if(b){
// Se agrego correctamente
// code
}else{
// Ya esta en el HashSet
// code
}
Como ya "Luis" está en el HashSet el metodo add() devuelve false y podríamos hacer algo en ese caso.
Si necesitamos eliminar un objeto del HashSet lo hacemos así:
hashSet.remove("Luis");
// Codigo del metodo remove()
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
La misma teoría del método add().
Como obtener un objeto del HashSet? Si estás acostumbrado a utilizar ArrayList, HashMap, Arrays puedes asumir que también se puede obtener un determinado objeto de un HashSet y no es así, el HashSet no posee un método para obtener un determinado objeto. Según mi punto de vista esto no es que este mal porque puedes resolverlo de varias maneras, en realidad no es necesario un metodo get(), de la manera más sencilla desde mi punto de vista sería así:
if(hashSet.contains("Pepe")){
// Se supone que si esta el objeto y podriamos sustituir el metodo get()
// code
}
Preguntando si un determinado objeto está en el HashSet podríamos sustituir el método get() ya que asumiríamos que el objeto si esta. También podemos iterar el HashSet de esta manera:
for (Iterator<String> iterator = hashSet.iterator(); iterator.hasNext();) {
String nombre = iterator.next();
if (nombre.equals("Pedro")){
// code
}
}
Esta manera también es válida pero gasta más recursos en comparación con el método contains(). Otra manera puede ser pasando el HashSet a un ArrayList:
ArrayList<String> arrayList = new ArrayList<String>(hashSet);
String nombre = arrayList.get(2);
También es válida pero sigo quedándome con la primera opción.
Caracteristicas del HashSet:
Solo almacena objetos.
No permite objetos duplicados.
Solo permite un objeto null
Implementa la Set interface.
No garantiza ningún tipo de orden al insertar los objetos.
Es un wrapper de HashMap.
Ese es básicamente el funcionamiento del HashSet, tienes que ver dependiendo de la necesidad que componente utilizar, ya eso queda de tu parte pero te recomiendo que utilices HashSet si no quieres almacenar objetos repetidos, si eso no importa deberías utilizar HashMap ya que el HashSet es solo un
wrapperUna clase wrapper es una clase que encapsula tipos de datos, de modo que esos tipos de datos pueden utilizarte para crear instancias en otra clase que necesita los mismos, en este caso HashSet utiliza internamente HashMap.
de HashMap. Recuerda comentar si necesitas que agregue algo más a esta entrada o si tienes alguna duda.
Seguimos con preguntas de entrevistas, hay que recordar que la oportunidad que estás buscando puede que sea la entrevista que tienes mañana, lo que quiere decir que probablemente estas preparándote y quieres que todo salga bien, pero una pregunta tan sencilla como esta puede dejarte de lado si no sabes responderla con la seguridad de que sabes que lo que dices es cierto.
Estas dos estructuras de datos son muy similares, pero también tienen algunas diferencias muy notables, haciendo una breve introducción, los dos son estructuras de datos muy usados en el Collection framework.
Pregunta fija para una entrevista, a veces trabajamos con HashMap pero no sabemos en realidad el concepto del mismo y menos como funciona internamente. Un HashMap es la implementación de la interface Map, esta interface es un tipo de
CollectionUna Collection es una interface que agrupa un conjunto de elementos.
que almacena datos asociando una
llave a un valorMap<key, value>. key= la llave. value= String, Integer, Boolean...
, esta interface sirve para muchas cosas y tiene ciertas caracteristicas que la definen, por ejemplo, no permite key duplicados, cada key tiene que estar asociado a un valor como máximo, si agregas un key que ya existe sobrescribe el valor del key anterior, solo permite Object types lo que quiere decir que no puedes poner un valor primitivo...
Volviendo al tema casi siempre se utiliza el HashMap como implementación del Map pero tiene sus cosas, por ejemplo, no garantiza que los elementos que vamos agregando estén ordenados, no deberíamos usarla en aplicaciones multithread porque no es synchronized, pero como todo en el mundo de Java, esto se puede lograr con unas líneas de código.
El HashMap funciona con el
principio del hashingEl principio se basa en asignar una ubicación para cierta key, dependiendo de una key determinada se le asigna un id único, en este caso se utiliza el método hashCode() el cual heredan todos los objetos en Java, algo importante de resaltar es que un objeto solo retornara un id, lo que quiere decir que si invocamos el hashcode con otro objeto idéntico devolverá el mismo id.
, como ya explique trabaja asignando una ubicación a una key con el método hashCode() de Java.
Comenzando desde el principio, así podemos crear un HashMap:
// Un HashMap simple de llave String y valor Integer.
HashMap<String, Integer> hashMapEdad = new HashMap<String, Integer>();
El constructor del HashMap que invocamos automáticamente le asigna
Algo que se ve muy bien en las aplicaciones de escritorio en Java, son los titulos con un color de fondo gradiente (JLabel Gradient Background), para hacerlo solo hay que sobreescribir el metodo void paintComponent(Graphics g) de la clase JComponent, recuerda que esta es la clase base para los componentes SWING.
Para lograr un color de fondo gradiente horizontal:
Que mejor manera de controlar la fecha que un usuario ingresa que con un calendario en donde con un simple clic ya obtengamos Año, Mes y Día, en Java Swing no trae por defecto un componente que facilite este comportamiento, así que por eso hay que descargar una librería externa llamada JCalendar, dicha librería tiene varias funcionalidades, podemos elegir desde un calendario la fecha completa, la fecha de hoy, elegir una fecha maxima o minima para seleccionar, elegir solo un día, año o mes... En fin en este Tutorial de JCalendar vamos hacer varios ejemplos con las funcionalidades que ofrece utilizando el IDE JBoss Developer Studio o eclipse.
Vaciar DefaultTableModel de un JTable. Quitar datos de un DefaultTableModel.
Cuando tenemos un JTable que utiliza DefaultTableModel muchas veces es necesario vaciar el JTable, en este caso hay que eliminar dato por dato del DefaultTableModel recorriéndolo de esta manera:
int numDatos = defaultTableModel.getRowCount();
for (int i = 0; i < numDatos; i++) {
defaultTableModel.removeRow(0);
}
Primero obtenemos el numero de datos que contiene el DefaultTableModel y después recorremos los datos con un bucle for para ir borrando el primer dato encontrado.
HyperSQL (HSQLDB) es una base de datos relacional, es hecha 100% en Java y corre en la maquina virtual de Java (JVM), hay muchas características que hacen de HSQLDB una base de datos atractiva para los desarrolladores, podemos usarla sin la necesidad de un servidor, para hacer pruebas en memoria utilizando la memoria RAM, es de código abierto, con solo importar el JAR a tu proyecto puedes comenzar a trabajar, bien sea para pruebas o para hacer funcionar tu aplicación en un ambiente de producción, claro que también trae su Database Manager en SWING para hacerle consultas a nuestras tablas por fuera de nuestra aplicación.
En este Tutorial vamos a centrarnos en el funcionamiento de HSQLDB desde Java. Lo que necesitamos es un IDE, en este caso yo utilizo JBoss Developer Studio o lo que es lo mismo eclipse y la última versión de HSQLDB que en este momento es la 2.3.3.
Enviar correos desde Java es necesario en la mayoría de los sistemas, ya sea para utilizar la funcionalidad para notificar algún suceso, enviar alguna información, enviar correos masivos con promociones a tus clientes, enviar reportes adjuntos a quien sea necesario, puedes utilizar esto para hacer grandes cosas, en este Tutorial para enviar correos con JavaMail vamos hacer varios ejemplos básicos y así tu podrás utilizar la funcionalidad para el propósito que necesites. Para llevar a cabo este tutorial necesitas tener una cuenta de Gmail, desde la cual vamos a enviar los correos.
Diferencia entre override vs overload, como implementarlos.
Cuando estamos comenzando a programar en Java tendemos a confundirnos con muchos conceptos ya que algunos son muy parecidos, en este caso vamos hacer una breve explicación para ver cuáles son las diferencias entre override y overload, estos conceptos son súper importantes en la programación orientada a objetos, se utilizan mucho y son una buena práctica de programación.
Para comenzar vamos hablar acerca de sus conceptos, cuando nos referimos a override en Java, estamos hablando de la sobrescritura de un método, para sobrescribir un método en Java tenemos que tener una ClaseHija que herede mínimo un método de una ClasePadre, la necesidad de sobrescribir un método se presenta ya que el hecho de que una ClaseHija herede de una ClasePadre no quiere decir que tienen que hacer lo mismo, para entender mejor, el hecho de que un padre tenga la responsabilidad de trabajar en una empresa no quiere decir que el hijo tenga que trabajar en la misma empresa.
Para aplicar esto en Java necesitamos hacerlo así:
ClasePadre
public class ClasePadre {
public String quienSoy() {
return "Soy la clase padre";
}
}
ClaseHija
public class ClaseHija extends ClasePadre {
@Override
public String quienSoy() {
return "Soy la clase hija";
}
Como vemos la ClaseHija tiene el mismo método que la ClasePadre con la anotación @Override, lo que nos indica que es un método que no puede cambiar al de la ClasePadre, ni más ni menos parámetros, ya que solo lo estamos sobrescribiendo.
Ahora bien, cuando hablamos de overload en Java, nos referimos a sobrecargar un método, esto lo aplicamos en los constructores de las clases ya que hay veces que necesitamos más de un constructor, y al momento de implementarlo lo que hacemos es ponerle el mismo nombre que los demás pero con distintos parámetros, también es una buena práctica de programación utilizarlo para métodos que en realidad hacen lo mismo, por ejemplo:
Tenemos un método que busca clientes en nuestra base de datos, ese método solo busca clientes por sexo pero necesitamos otro método que aparte de buscar clientes por sexo también sea por edad, y en si los métodos lo que hacen es buscar clientes, así que le ponemos el mismo nombre pero con distintos parámetros, para implementarlo solo necesitamos este bloque de código:
Constructores:
public class Persona {
public String quienSoy() {
return "Soy una persona";
}
public String quienSoy(String nombre) {
return "Soy " + nombre;
}
public String quienSoy(String nombre, String apellido) {
return "Soy " + nombre + " " + apellido;
}
}
Metodos:
public void buscarCliente(String Sexo) {
// Implementacion
}
public void buscarCliente(String Sexo, int edad) {
// Implementacion
}
public void buscarCliente(String Sexo, int edad, String empresa) {
// Implementacion
}
Como vemos estamos sobrecargando el constructor de la clase Persona, todo esto es muy fácil, poco a poco ve integrándolo en tus aplicaciones, no hay lugar para confusiones ya que los dos conceptos overload y override se aplican de distintas formas y no olvides la mayor diferencia entre los dos conceptos es que no hacen lo mismo, uno sobrescribe un metodo y el otro sobrecarga un metodo, este tema está muy ligado al Polimorfismo en Java, otro de los grandes pilares de la programación orientada a objetos. Si te ayudo la entrada no olvides compartir el conocimiento aprendido y si tienes alguna sugerencia puedes comentar, suerte!!
Polimorfismo Java, que es el polimorfismo y sus tipos.
El Polimorfismo es uno de los conceptos generales que van de la mano con la programación orientada a objetos OOP, en si el polimorfismo en Java se refiere a las distintas formas que puede tener una variable, objeto o método creado.
Hay dos tipos establecidos de polimorfismo:
El polimorfismo en tiempo de ejecución (runtime) o dinámico, que lo podemos implementar con la sobre escritura (overriding) de métodos.
El polimorfismo en tiempo de compilación (compile time) o estático, que lo podemos implementar en la sobrecarga (overloading) de métodos
Hay una confusión entre algunas programadores a la hora de aceptar que la sobrecarga de métodos también es un Polimorfismo, básicamente si nos fijamos en el concepto se podría afirmar que si, ya que el mismo método puede tomar distintas formas dependiendo de los parámetros recibidos, como ya aclaramos un poco lo que es la teoría vamos aplicar los dos tipos de Polimorfismo en la práctica.
Polimorfismo en tiempo de ejecución (runtime), es el más usado y se podría implementar con dos clases hijas que hereden de una clase padre. Este es el diagrama de clases del ejemplo:
Como hacer un reporte pdf desde Java con iText 5.5.6. Ejemplo iText.
iText pdf es una librería muy potente y fácil de usar para generar reportes desde Java , si lo que necesitas es hacer un reporte rápido, sencillo y sin muchas complicaciones esta es la librería para ti, solo la descargamos y la agregamos al proyecto, hay que recordar que la construcción del reporte pdf va ser enteramente en el código fuente Java a diferencia de Jasper Reports que utiliza archivos externos y después los invocamos desde el código. En este tutorial de iText vamos a generar un reporte pdf que tendrá algunas párrafos, listas, tablas y celdas para mostrar un poco las funcionalidades que podemos conseguir con la misma.
Vamos hacer una breve reseña de una cámara y sus características, este es el resultado que queremos conseguir:
ZapfDingbatsList symbol list, todos los símbolos que puedes crear con esta lista.
Si estas utilizando lowagie iText para crear un PDF y necesitas crear una lista con un símbolo en especial pero no sabes cómo hacerlo, o no tienes idea de cuáles son los símbolos que puedes usar, en este Dato Java te traigo la lista de símbolos disponibles en ZapfDingbatsList, recuerda que para crear una lista en lowagie iText necesitas este bloque de codigo:
com.lowagie.text.List list = (com.lowagie.text.List) new ZapfDingbatsList(51);
list.add(new ListItem("Item 1"));
list.add(new ListItem("Item 2"));
list.add(new ListItem("Item 3"));
list.add(new ListItem("Item 4"));
document.add(list);
En el constructor de la lista ZapfDingbatsList pasamos el numero del símbolo que queremos utilizar, ese código anterior muestra este resultado en un PDF:
ZapfDingbatsList ejemplo
Y aquí te dejo los códigos de los símbolos que puedes utilizar en lowagie iText con una lista de tipo ZapfDingbatsList.
ZapfDingbatsList lista de símbolos
Si te sirvió de algo recuerda compartir y si tienes una duda coméntala. Suerte!!
Múltiples partialTriggers en adf. Varios partialTriggers en inputText/outputText.
Múltiples o varios partialTriggers en un solo tag inputText/outputText de adf.
A veces queremos que dependiendo de un evento en particular, ya sea presionar un botón, ingresar un valor en un input o seleccionar un radio button en la interfaz de usuario se refresque un determinado componente o con el atributo partialTriggers, en este Dato Java explico cómo hacer para que un componente se refresque con varios eventos, por ejemplo, 2 input refrescan el mismo componente sin actualizar toda la pagina.
Como se ve en el código anterior es algo fácil, pero si no sabes, esta duda te puede quitar tiempo valioso, solo tenemos que poner en el atributo partialTriggers la cantidad de id's que refrescan ese componente y así podemos refrescar nuestro componente adf con varios partialTriggers.
CallableStatement con parámetros IN/OUT desde java.
Como ejecutar una consulta a Oracle PL/SQL con un parámetro IN/OUT desde CallableStatement Java.
Cuando trabajamos en Java con una base de datos Oracle PL/SQL sabemos que siempre en el DAO hacemos la llamada a un Strored Procedure y dependiendo de sus parámetros pasamos el valor correcto. Suponiendo que el Stored Procedure sea declarado en Oracle de esta manera:
PROCEDURE SP_BUSCAR_USUARIO(NUMERO_DOCUMENTO IN NUMBER,
CODIGO_MENSAJE OUT NUMBER,
MENSAJE OUT VARCHAR2);
Ya sabemos que este SP tiene parámetros de entrada (IN) y de salida (OUT), para ejecutar este SP desde Java tenemos que hacer esto:
Como vemos anteriormente cuando un SP recibe parámetros de entrada (IN) en Java nosotros seteamos el parámetro en el CallableStatement, y si el SP recibe parámetros de salida (OUT) nosotros en Java registramos el tipo de parámetro de salida en el CallableStatement y después procedemos a insertarlo en una variable. Ahora lo que puede enredarnos es como hacer cuando un SP recibe un parámetro de entrada y salida (IN OUT), es sencillo eso lo hacemos así, suponiendo que esta sea la declaración del SP:
PROCEDURE SP_BUSCAR_USUARIO(NUMERO_DOCUMENTO IN NUMBER,
CODIGO_MENSAJE IN OUT NUMBER,
MENSAJE OUT VARCHAR2);
Para que eso funcione primero tenemos que setear en el parámetro de entrada en el CallableStatement y después registrar el tipo de parámetro de salida en el mismo índice. Suerte, espero te sirva este Dato Java.
Tutorial de Aplicación Java Swing, ejemplo de una aplicación Swing con varias ventanas.
Cuando estaba comenzando a programar en Java Swing después de ver tantos artículos y "tutoriales" locos de la web muchas veces no encontraba lo que en realidad estaba buscando, quería saber como hacer una aplicación Swing con varias ventanas, actualizando la misma ventana, después con un poco más de experiencia comencé con los tutoriales de Java Sun los cuales recomiendo con los ojos cerrados, todo lo que tenga que ver con Java podrás encontrarlo ahí. Casi siempre comenzamos a practicar con los componentes de Swing, o con el famoso y comercial "Hola Mundo", bueno en esta entrada vamos a hacer un mini tutorial en el cual vamos a crear una aplicación Java Swing simple y sencilla con más de una ventana, la idea es ver el funcionamiento de una aplicación con más de una ventana y distintos componentes. Como es algo sencillo y mi estilo en Swing es sin utilizar ningún GUI Builder (tipo WindowBuilder), ni ningún plugin parecido, vamos hacerlo todo manual. Bueno manos al teclado, haremos una ventana simple imitando una ventana de login y si el usuario y la clave son correctos nos lleva a otra ventana de inicio, esta fácil...
Como instalar WindowBuilder en eclipse/JBoss Developer Studio.
Instalación del plugin WindowBuilder en eclipse/JBoss Developer Studio..
Cuando necesitamos hacer una interfaz grafica nos ponemos creativos primero en nuestra mente, a veces agarramos un papel y lapiz y comenzamos a dibujar como sería nuestra interfaz, también por cosas de rapidez es necesario utilizar algún programa que con solo arrastrar los componentes a una ventana podamos construir la interfaz y mejor aún si nos va creando el codigo de una vez, aquí es donde entra en el juego el plugin para eclipse o JBoss Developer Studio que lleva por nombre WindowBuilder, personalmente si tengo tiempo y estoy en la capacidad prefiero crear la interfaz manualmente (siento que así aprendo un poco más). Si descargamos eclipse/JBoss Developer Studio en cualquier version reciente ya viene el plugin incluido pero hay veces en las que ya tenemos una version que no tiene ese plugin y necesitamos agregarlo a nuestro developer de esta manera:
Diferencias entre throw y throws, como utilizar estas palabras reservadas.
Hablando de excepciones en Java a veces caemos en la confusión con las palabras reservadas throw y throws ya que son muy similares, voy a dar unos breves ejemplos de cómo se utilizan y para qué sirven. Las excepciones en Java son básicamente los problemas o fallas que puede tener nuestra aplicación al momento de ejecutarla o en su ejecución, estas excepciones tenemos que manejarlas en los respectivos bloques de try - catch. La palabra reservada throw nos sirve para lanzar una excepción en cualquier bloque de código de nuestra aplicación, si te preguntas cual es la utilidad de esto te pongo el siguiente caso:
Supongamos que hacemos un método en el cual validamos ciertos datos, si hay un dato que según nuestros cálculos excede de un determinado valor podemos lanzar una excepción, ya sea creada por nosotros mismos o cualquiera del tipo java.lang.throwable, por ejemplo:
public void pruebaThrow() throws Exception {
Exception exception = new Exception();
int a = 98;
int b = 101;
if (a > 100 || b > 100) {
throw exception;
}
}
Como vemos en la línea número 07 lanzamos la excepción! OjO, ya sabemos que estas cosas hay que validarlas y no lanzar excepción de una vez, solo pongo esto de ejemplo para entender su funcionalidad...
Al hacer eso notaremos que la aplicación se detiene por la excepción.
La palabra reservada throws funciona para indicarnos que un método lanza una excepción de un tipo especifico o general, se puede utilizar si la excepción se va manejar con un try - catch o no. Así se utiliza:
public static void prueba() throws SQLException {
// Manejamos la excepcion de tipo SQL
}
public static void prueba() throws NullPointerException {
// Manejamos la excepcion de tipo NULL
}
public static void prueba() throws DataFormatException {
// Manejamos la excepcion de tipo DataFormat
}
Si te fijas en el primer ejemplo de throw ya utilizamos la palabra reservada throws para especificar que ese metodo lanzaba una excepción. No hay mas nada que explicar por ahora...
Tutorial de Jaspersoft iReport 5.6.0 utilizando Oracle PL-SQL y ejecutando el Reporte desde aplicación Java web con Primefaces. Parte 2.
Ya que en la 1era parte del Tutorial creamos todo lo que tiene que ver con el Jaspersoft iReport y la parte de Oracle PL/SQL en esta 2da parte vamos a crear la aplicación en Java para ejecutar el reporte, como dije anteriormente al momento de compilar el reporte en el Jaspersoft iReport se crean dos archivos en el directorio que hemos elegido, uno con la extensión .jasper y otro con la extensión .jrxml, el que nosotros vamos a ejecutar es el .jasper ya que el otro sirve para que puedas modificarlo en directamente en el iReport, la aplicación que ejecute dicho archivo será web y la vamos a crear con el framework para JSF que se llama Primefaces, hace un tiempo ya hemos hecho un tutorial para crear una aplicación desde 0 con Primefaces obteniendo como resultado una página con un menú, este es el Tutorial, vamos a seguir con ese mismo ejemplo (puedes descargar el proyecto de ese tutorial desde aquí). Para no hacer tan larga esta estrada ya que la misma está centrada en la ejecución del reporte desde una aplicación Java web utilizando Primefaces, vamos a crear en el menú un nuevo ítem, en ese nuevo ítem vamos a ejecutar el reporte que creamos con iReport, así que vamos hacer unas modificaciones pequeñas en el proyecto para llevar a cabo la ejecución del reporte.
Ahora tenemos que crear nuestro managed bean que se encargara de hacer la lógica y mostrar nuestro reporte, primero crearemos un paquete llamado "beansDatoJava" y dentro del mismo crearemos el managed bean llamado "DatoJavaReporteBean" con un método que se llame ejecutarReportePDF el cual vamos a implementar más adelante.
Tutorial de Jaspersoft iReport 5.6.0 utilizando Oracle PL-SQL y ejecutando el Reporte desde aplicación Java web con Primefaces. Parte 1.
Para este Tutorial vamos a utilizar Jaspersoft iReport Designer v5.6.0, Oracle PL-SQL para la base de datos y obviamente Java para ejecutar nuestro reporte en formato PDF, dicho reporte lo vamos a ejecutar desde una aplicación web con Primefaces, vamos a explicar cómo funciona este asunto primero. Jaspersoft iReport es un diseñador para JasperReports, como sabemos JasperReports es una librería escrita totalmente en Java con la cual podemos crear informes de diferentes tipos, puedes crear/construir un archivo y exportarlo, puedes exportar archivos en varios formatos como por ejemplo: excel, word, xml, pdf, etc. En este Tutorial nos vamos a centrar en la creación de un archivo en .pdf. Por que deberías usar Jaspersoft iReport?? Primero si eres un programador Java te comento que está hecho 100% en código Java, es de fácil manejo, no tienes que instalar nada, solo se descarga y comienzas a usarlo, aparte de eso es poderoso y fácil de usar, posee múltiples funciones para agregar cuadros de texto, párrafos, separadores, imágenes, sub-reportes, tablas, etc, todo lo que puedas imaginar que lleva un informe en PDF con iReport puedes hacerlo y aparte de eso puedes hacer tu conexión a la base de datos con JDBC y hacerle consultas a la misma ya sea con sql o llamando a un Stored Procedure y los registros que retorne puedes mostrarlos en el reporte, ya quedaron atrás esas librerías en las que uno redactaba todo el contenido del informe dentro del mismo código Java.
Imagina que haces un reporte con esa librería utilitaria en código Java y quieras cambiar una pequeña parte del informe después que el sistema ya paso a producción, bueno tampoco es que es muy difícil, buscar de nuevo dentro del código la parte que quieres editar, hacer el cambio, las pruebas y después coordinar otro pase a producción, un poco fastidioso no?? En fin con iReport solo buscas el archivo que exportaste y lo editas directamente ahí sin tener que tocar tu código Java lo que es una mejor practica de programación.