domingo, 9 de mayo de 2021

Crear una aplicación con Java Swing y Jlink

Con Netbeans 12.3 y Maven es muy fácil crear una aplicación de Java que puede ser ejecutada sin necesidad del IDE. En muchas ocasiones no aprendemos esto en la academia y queremos saberlo para poder distribuir nuestras aplicaciones. Para mi ejemplo vamos a trabajar con Windows, pero pueden utilizar otro sistema operativo.

Realmente para hacer esto es muy simple. Lo primero que debemos hacer es un proyecto nuevo con Maven de tipo Java Application


En mi caso el proyecto se llama HelloSwing. Luego vamos a crear una clase Main. A continuación una clase de tipo JFrame. Lo que tenemos que hacer es llamar el JFrame en el main para ejecutar la ventana.

El siguiente paso es crear un module-info


En este modulo tenemos que agregar las siguientes líneas. La línea 8 es para poder utilizar JFrame (swing) y debemos exportar el modulo donde esta nuestra clase Main.

A partir de este momento se tienen que agregar algunos plugins de Maven para poder continuar con nuestro proyecto.

El primer plugin seria


Después de esto debemos agregar otro plugin para poder crear todo lo necesario que se requiere para correr nuestra aplicación.


El nombre de nuestra imagen es swing luego ocupamos agregar la línea 23 para que se crea el punto de inicio de nuestra app. Donde requerimos el nombre del ArtifactId.


El Artifact Id lo podemos encontrar en las propiedades de nuestro proyecto. Y debemos agregar el nombre con el paquete de la clase Main para que nos funcione. En mi caso es com.testing.helloswing.Main

En Netbeans debemos correr el Goal de jlink para que compile nuestra imagen y cree todo lo necesario. 



Cuando corremos esta tarea (jlink) tenemos que ir a buscar en la carpeta de target de Maven lo que se generó. En mi caso la carpeta que se llama Maven-jlink (puede que existan otras carpetas dentro). Se tiene que buscar un archivo llamado swing.bat. Si damos doble clic a esto nos ejecutara nuestra aplicación.

Ya de esta manera podemos correr nuestra aplicación sin necesidad del IDE.


Etiquetas: , , ,

jueves, 29 de abril de 2021

Desarrollar un Crawler simple con Java

 


Lo primero que vamos a hacer es crear un proyecto nuevo basado en Maven



Al proyecto le vamos a asignar el nombre de SimpleCrawler



Le tenemos que dar al botón de finalizar. Con esto listo vamos a necesitar una librería que la tenemos que agregar al proyecto usando Maven. La librería se llama jsoup.



Jsoup Url: https://jsoup.org/download

Con esto listo ya podemos hacer el código para escanear la página web.

package com.mycompany.simplecrawler;

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            var url = "https://crawler-test.com/";
            
            Document doc = Jsoup.connect(url).get();
            Elements links = doc.select("a[href]");
            for(Element link: links){
                System.out.println(link.attr("href"));
            }
        } catch (IOException ex) {
           System.err.println(ex);
        }
    }
    
}

Como podemos observar en el código lo primero que debemos hacer es importar las librerías de jsoup necesarias

·         import org.jsoup.Jsoup;

·         import org.jsoup.nodes.Document;

·         import org.jsoup.nodes.Element;

·         import org.jsoup.select.Elements;

Luego vamos a crear una variable llama Url donde podemos agregar la pagina que deseamos escanear. Después de esto creamos un objeto de tipo Document con el que vamos a obtener el documento encontrado del url, usando el método get que vamos a usar del método connect de la clase Jsoup.

Después de esto creamos un objeto de tipo Elements llamado links basado en la búsqueda que deseamos hacer como se puede observar con el objeto doc.select. En este caso preguntamos por todos los anchores que tengan una referencia.

Finalmente, con un ciclo for podemos recorrer el resultado de links con todas las posibles url o links que se encontraron. Finalmente se imprimen en la consola para poder ver que fue lo encontrado.

Lo que nos da como resultado lo siguiente 




Etiquetas: , ,

lunes, 29 de marzo de 2021

Crear Windows Native JavaFX app

Para hacer este tipo de aplicación realmente es muy sencillo y vamos a ver paso a paso que debemos hacer. Lo primero que tenemos que hacer es asegurarnos que tenemos los siguientes componentes

  • Apache Netbeans 12.3
  • JDK11
  • JavaFX13
  • Maven

En el caso de JavaFX no es necesario instalarlo (si gustan pueden siguiendo las instrucciones de Gluon) pero si debemos de instalar JDK 11 para poder hacer este ejemplo.

Ahora lo primero que tenemos que hacer es crear un proyecto nuevo en Netbeans


A este proyecto le voy a poner Hello y podemos dejar todas las otras propiedades como están. Para terminar con este paso debemos de dar clic a finalizar.

Para este pequeño ejemplo no tenemos que agregar código nuevo o cambiar el que está. Ya que vamos a utilizar lo que se creo por defecto.  


Ahora vamos a tener que ir al pom.xml


Para agregar unas líneas que nos ayudaran a construir nuestro ejecutable.


En la sección del plugin de javafx-mave-plugin vamos a agregar las líneas anteriores que podemos ver en la imagen.

Con esto vamos a ejecutar el Gaol de Jlink

Simplemente clic derecho y ejecutamos el Goal. Cuando este termine nos debemos de ir al folder donde esta nuestro proyecto. En este caso vamos a tener un folder llamado hello dentro de target. Después debemos de ir al folder bin y buscar un archivo llamado hellofx.bat. A este ultimo le podemos dar doble clic y va a ejecutar nuestra aplicación.

Ejemplo

Etiquetas: , , ,

lunes, 28 de diciembre de 2020

Java SQLite



SQLite es una base de datos pequeña con la que podemos almacenar datos de manera rápida y fácil. Esta base de datos podemos empotrarla dentro de nuestras aplicaciones y tiene característica muy importante hoy en día, que nos permite correrla en casi cualquier sistema operativo. Podemos usarla para aplicaciones web, móviles y de escritorio.   Además, es una base de datos gratuita.

Podemos encontrarla en el siguiente enlace https://www.sqlite.org/index.html

Tenemos varias formas para crear nuestra aplicación y que se pueda conectar a SQLite. Podemos hacer una aplicación en Netbeans y descargar el Jar que nos permite conectarnos o podemos hacer un proyecto con Maven.

Para este ejemplo vamos a utilizar Maven. Sin embargo, se puede descargar el JAR de SQLite para poder utilizarlo en otros proyectos que no estén basados en Maven.

Cuando ya tenemos nuestro proyecto de Maven listo tenemos que agregar la referencia del Jar, de la siguiente manera.



Ahora vamos a crear una clase llamada SQLiteConnection donde se requiere agregar algunas clases para poder crear la conexión y las consultas a la base de datos.



Con estas clases agregadas a nuestro código ya podemos iniciar con la creación de la conexión



Primero como se puede ver en la línea 19 tenemos que agregar la dirección donde se encuentra o se va a encontrar nuestra base de datos (si no existe el archivo se va a crear cuando se corra nuestra aplicación). Para ubicar la base de datos usamos el path que maneja el sistema operativo que usamos. Ahora si solamente agregamos el nombre de la base de datos como la tenemos en la línea 19 esta se va a crear donde está ubicada nuestra aplicación.

En la línea 24 vamos a registrar el driver de SQL que vamos a usar para nuestra base de datos en este caso como se puede observar es el de SQLite.

Luego en la línea 25 iniciamos una conexión a nuestra base de datos usando la clase DriveManager. Como se puede observar se debe indicar donde esta ubicada la base de datos.

Como se puede ver en la siguiente imagen ya estamos listos para crear tablas en nuestra base de datos. Lo primero que vamos a hacer es crear el script para la creación de la tabla.



En la línea 37 creamos un objeto Statement basado en la conexión que ya teníamos. Con esto podemos ejecutar el script para crear la tabla como se puede observar en la línea 38. Esta última línea nos permite crear la tabla si no existe.

Bueno y para agregar datos en nuestra tabla es simplemente ejecutar un script con un insert como se puede ver en la siguiente imagen.

 



En la línea 46 se crea el script con los datos que deseamos almacenar en nuestra tabla. En la línea 49 se crea el objeto statement basado en la conexión de la base de datos. Luego de esto en la línea 50 ejecutamos el script contra nuestra base de datos para poder guardar la información.


Finalmente vamos a poder crear los SELECT para poder ver los datos que se almacenaron en nuestra base de datos. En este caso cambian algunas cosas. Por ejemplo, además del objeto statement y la ejecución del script tenemos que crear un objeto de tipo ResultSet para obtener la información de nuestra tabla. En la línea 59 se ejecutar el script como se puede observar y este nos retorna un objeto con los datos almacenados. Para poder recorrer todos los nombres usamos un ciclo While hasta que todos los objetos de esta consulta son mostrados.

En la línea 61 se muestra línea por línea los nombres y los ids que se generaron para nuestros datos. Usando el método getString (se puede usar otro tipo de método para cada tipo de dato por ejemplo getInt).

Solo nos queda correr nuestra aplicación para poder ver el resultado


Ejemplo

Etiquetas: , , , ,

sábado, 28 de noviembre de 2020

Hacer un servicio de SAOP con Apache Netbeans 12

 

Vamos a crear un simple servicio de SOAP con Java y Netbeans 12. Para esto vamos a requerir la version 1.8 de Java ya que sin esta no vamos apoder crear el servicio.

Lo primero que vamos hacer es crear un proyecto nuevo usando Maven. Dentro los templates de Maven tenemos que buscar el tipo de proyecto llamado Web Application, como se puede ver en la siguiente imagen.



Luego de esto vamos a tener una ventana con algunas otras opciones que se tienen que completar. Por ejemplo el nombre del proyecto, el Group Id que podemos dejarlo como esta y la direccion donde queremos guardar nuestro proyecto. Adicional a esto el nombre del paquete donde vamos a guardar nuestro código.

 


Para este proyecto vamos a seleccionar Java 7 y Glassfish que es nuestro servidor web.



Luego le damos finalizar.

Si no tenemos instalada la versión de Java 1.8 vamos a ver una ventana como la siguiente donde se tiene que seleccionar el JDK 1.8

 



Ahora tenemos que instalar el JDK 1.8 luego de esto simplemente lo tenemos que agregar al Netbeans. Como se puede ver en la siguiente imagen. Seleccionamos esta plataforma para el desarrollo de nuestro programa.



Cuando el proyecto este listo debemos dar clic derecho sobre el proyecto y seleccionar el menú de otros. En este menú vamos a poder ver una serie de opciones para crear diferentes archivos. Vamos a ir a la carpeta web services donde esta el tipo Web Service. Es la primera opción en esta carpeta. Esta es la que tenemos que utilizar.




Lo que tenemos que realizar ahora es simplemente agregar el nombre de nuestro servicio y el paquete donde se desea guardar. Con estos dos valores tenemos que dar finalizar y estamos listos para continuar con nuestro servicio de SOAP.


Como se puede observar ya tenemos listo el código para iniciar a escribir nuestro nuevo servicio.



Tenemos un método que se llama Hello, solamente tenemos que publicar el servicio a nuestro servidor de Galssfish o correr la aplicación. 




Etiquetas: , , , , ,

jueves, 28 de mayo de 2020

JDK 14 instance of

Dentro de los cambios que trae el JDK14 el instance of es uno de ellos. Esta instrucción nos funciona para verificar si un objeto es de un tipo específico y de esta manera poder convertirlo al objeto que necesitamos.

Usualmente se hacia en dos partes se valida con un if para determinar el tipo y luego dentro del if se hace el cambio de tipo de objeto. Primero vamos a ver como esto funciona en el JDK8 y luego como se puede solucionar con el JDK14

 

Como podemos ver en este ejemplo es como se vería en el JDK8. En la línea 18 se valida el tipo si es CellPhone y en la línea 20 se hace la transformación del tipo para poder utilizarlo en la línea 21.



Esta característica es un Preview por lo tanto para poder correrla se debe de habilitar utilizando “--enable-preview” cuando se compila y se corre.

Pero como podemos observar en el siguiente ejemplo en la línea 33 ademas de validar el tipo de dato se crea la variable de este tipo para poder ser utilizada en la línea 35.

En este caso sale como si fueran errores ya que es una nueva característica que esta en preview pero funciona perfectamente.

Ejemplo  


Etiquetas: , , , ,

viernes, 1 de mayo de 2020

Java - Hilos Sincronizados


Existen varias formas en las que podemos sincronizar los hilos en Java y poder logar que los datos generados estén correctos. La idea de sincronizar los hilos es que estos puedan utilizar los recursos compartidos de una forma ordenada y correcta.

Para este ejemplo utilizaremos ReentrantLock como objeto para bloquear los accesos ordenados de los hilos.

Lo que vamos hacer es un ejemplo muy simple que nos permite ejecutar dos hilos. Cada uno de los hilos va a restar números de una sola variable. Si esto lo hacemos sin la sincronización los resultados pueden ser erróneos. Por lo que vamos a sincronizarlos.

Lo primero que debemos hacer es crear un proyecto. Dentro de este proyecto de java vamos a crear una clase llamada Utils. Esta clase solo va a tener una variable estática que nos permite almacenar en momería un monto. El monto que utilizaremos es de 100.

Ahora lo que tenemos que agregar es una clase llamada SumThread. Dentro de esta clase agregaremos el código de bloqueo y la operación para restar las cantidades a la variable total.

Dentro del método run creamos un ciclo que recorre un arreglo llamado numbers, el cual contiene 3 números que son los que se restaran al valor total de 100.

Como podemos observar en el método run antes de hacer cualquier operación sobre la variable que deseamos proteger con la sincronización hacemos uso de un objeto llamado lock. Este objeto lock lo inicializamos en el Main y lo pasamos por medio del constructor de la clase. Este objeto cuanta con un método llamado lock que nos permite bloquear los recursos hasta que ya no estén en uso. (esto lo podemos ver en la línea 23)

El objeto lock es declarado en la línea 9 y para que este pueda funcionar correctamente lo tenemos que asignar en la línea 14 dentro del constructor de la clase usando el objeto lock que viene de la línea 12.

Todo el código que se encuentra entre la línea 24 y 31 son las operaciones que deseamos realizar sobre la variable total.

Cuando terminamos de utilizar la variable estática total debemos liberar el recurso utilizando el método unlock. De esta manera podemos permitir otros hilos utilizar esta variable.  (Esto lo podemos ver en la línea 34)

Ahora en la clase Main vamos a poner a correr nuestra aplicación. Lo primero es crear el objeto lock que vamos a pasar a los hilos (Esto está en la línea 15). Este objeto es de tipo ReentrantLock que viene del paquete concurrent de java (esto lo podemos ver en la línea 3).

Cada vez que inicializamos un hilo debemos pasar el objeto lock como podemos observar en la línea 19 y 20.

Ejemplo



Etiquetas: , , , ,

miércoles, 29 de enero de 2020

Repl.it



Repl.it muy interesante esta herramienta. Es un IDE totalmente web que nos permite crear aplicaciones de Java (entre muchos otros lenguajes). Es muy fácil y rápido ponerse a escribir código ya que no requiere de ninguna instalación.

Se puede iniciar creando una cuenta o simplemente creando un proyecto nuevo. El código se puede almacenar en sus servidores y compartir con otros usuarios. Dentro de estas características se puede trabajar de forma colaborativa.

También se tiene una versión pago que cuenta con 3 tipos de licencias. Dentro de estas tiene una versión gratuita con la que se puede iniciar para probar si este IDE se ajusta a nuestras necesidades.
Si queremos hacer algún pequeño programa podemos ir a la esquina superior derecha donde encontramos un botón que dice new repl


Después de esto vamos a ver una pantalla donde debemos seleccionar el lenguaje que deseamos usar. Para este ejemplo vamos a usar Java. De igual forma se puede conectar con su proyecto en github.


A continuación de esto le debemos dar clic al botón Create Repl. Con esto vamos a ver una clase Main con lo que podemos ejecutar nuestro programa.

Además de esto podemos crear clases y con esto llamar objetos de la misma forma que lo hacemos con otros IDEs.

Aquí podemos crear archivos y clases nuevas para ir construyendo nuestro proyecto. Otro aspecto importante es que no tenemos que guardar nada, el IDE guarda nuestros cambios de manera automática.

Ahora nos vamos al Main

En la parte izquierda podemos ver el código que vamos agregando o modificando. Cuando lo tenemos listo podemos ejecutarlo con el botón verde que dice run. Los resultados los podemos ver en la ventana derecha negra. Con la ejecución de nuestro programa, pero de igual manera si tenemos un error lo vamos a poder ver en esta ventana.

Con el botón de Share tenemos varias opciones para poder compartir nuestro programa. Por ejemplo, se puede usar un link o agregar un iframe con nuestro código.

https://repl.it/repls/DecimalRuralSecurity


También se puede configura los colores y todo el entorno del IDE. 

Etiquetas: , ,

miércoles, 22 de enero de 2020

Cliente Rest con Java y Jersey


Para nuestro ejemplo vamos a crear un proyecto Web con Netbeans


Este proyecto le vamos a llamar ServiceAPI y va a tener nuestra información o nuestro servicio de Rest que luego vamos a conectar con el cliente usando el wizard de Netbeans con Jersey.

En Source Packages vamos a crear un paquete nuevo llamado Code donde vamos a agregar una clase llamada Persona que contiene datos de personas para nuestro servicio.

Listo este paso continuamos con la creación del servicio web https://compuarticulos.blogspot.com/2018/08/crear-un-simple-rest-api-con-netbeans-y.html

En este ejemplo el nombre del servicio web es AdminPersonResource. Después de esto vamos a crear una clase llamada Utils en la cual crearemos una variable static que será la lista donde almacenaremos las personas.

Con el método Get vamos a enviar la lista de todas las personas que tenemos y usando el método POST vamos a poder ingresar datos nuevos a nuestra lista.

Cliente usando Jersey

Primero vamos a crear un proyecto nuevo de Java Application en el cual vamos a crear la conexión con nuestro servicio REST.


El nombre de nuestro proyecto es ServiceClient. Ahora vamos a crear el código para llamar nuestro servicio.

Vamos a dar clic derecho sobre el proyecto del cliente y vamos a menú de new, luego otros. En este menú debemos seleccionar Web Services – Restful Java Client

Damos clic a siguiente y luego veremos esta pantalla

Al inicio agregamos la clase con la cual vamos a llamar el servicio. También se tiene que agregar el nombre del paquete donde queremos guardar la clase con los llamados al servicio de Rest. Continuamos seleccionando el servicio de Rest del proyecto que creamos hace unos minutos. Con el Servicio seleccionado damos clic en Finish.

En este momento lo que vamos hacer es copiar la clase Person dentro de nuestro paquete de API.
Ya estamos listos para hacer llamados a nuestro servicio de Rest.

Nos vamos a ir a la clase Main de nuestro cliente donde tenemos que hacer el importe de la clase javax.ws.rs.core.GenericType para poder convertir los datos del servicio de Rest en nuestra lista.


 public static void main(String[] args) {
        Person person = new Person();
        person.setEmail("test@gmail.com");
        person.setLastName("LastName");
        person.setName("test");
        
        ServiceAPI api = new ServiceAPI();
        api.postJson(person);
        
        List<Person> response = api.getJson(new GenericType<List<Person>>() {});
        
        for(Person i : response)
        {
            System.out.println(i.getEmail());
        }
    }

Lo primero que vamos hacer en el método main es crear un objeto de tipo persona para agregar los datos que deseamos. Usando un objeto de tipo ServiceApi hacemos llamado al método post con el que podemos enviar los datos del cliente.

Finalmente, invocamos el método get para ver la lista completa de todas las personas agregadas al sistema hasta el momento.

Ejemplo

¿Quieres aprender java y C#?

Etiquetas: , , , ,

sábado, 19 de octubre de 2019

Java 12 web socket Client




Para este ejemplo vamos a usar la librería de java.net.http con la que podemos usar un objeto de webSocket que nos permitirá conectarnos a algún servicio. En este caso vamos a utilizar un websocket para hacer testing.

También ocupamos usar un servidor publico para hacer testing del websocket http://www.websocket.org/echo.html



Lo primero que vamos a crear es una clase nuevo, con el nombre de WebSocketClient. En esta clase tenemos que hacer un import de la libreria java.net.http.WebSocket. Con esto podremos hacer un implements de la interfaz WebSocket.Listener.


public class WebSocketClient implements WebSocket.Listener {

    @Override
    public void onOpen(WebSocket webSocket) {
        webSocket.request(1);
        System.out.println("We are connected to the server");
    }
    
    @Override
    public CompletionStage<?> onClose(WebSocket webSocket, int statusCode, String reason) {
        System.out.println("Close websocket: " + reason);
        webSocket.sendClose(statusCode, reason);
        return new CompletableFuture<Void>();
    }

    @Override
    public void onError(WebSocket webSocket, Throwable error) {
        System.out.println("Exception " + error.getCause());
        System.out.println("Error: " + error.getLocalizedMessage());
        webSocket.abort();
    }

    @Override
    public CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last) {
        System.out.println("Data we got from server: " + data);
        return new CompletableFuture().completedFuture("onText completed.").thenAccept(System.out::println);
    }
}

Para que nuestro sistema funcione se tiene que agregar los siguientes paquetes a la clase.


import java.net.http.WebSocket;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;


Con esta interfaz podemos sobrescribir una serie de métodos para poder establecer la comunicación correcta con el servicio.

Para este ejemplo vamos a usar el metodo onOpen para conectarnos al webSocket, onClose para poder cerrar la conexion del webSocket, onError en caso de que alguna cosa ocurra con la conexion que estamos estableciendo con el servidor, onText que nos permite recibir las respuestas del servidor.

Ahora nos vamos hacer una clase nueva para nuestro metodo main para poder ejecutar nuestro sistema para conectarnos al websocket.

Debemos hacer los siguientes imports para poder inicializar nuestro cliente


import java.net.URI;
import java.net.http.HttpClient;
import javax.swing.JOptionPane;

Ahora tenemos que crear un objeto de tipo WebSocketClient que tiene los métodos que esperan los eventos del websocket.


    public static void main(String[] args) {
        var client = new WebSocketClient();
        var serverConection = HttpClient.newHttpClient().newWebSocketBuilder().buildAsync(URI.create("ws://echo.websocket.org"), client);
        var connectedClient = serverConection.join();
        var result = JOptionPane.showInputDialog("Message");
        while (true) {
            connectedClient.sendText(result, true);
            result = JOptionPane.showInputDialog("Message");
        }

    }

Luego creamos otro objeto (httpClient) usando el newHttpClient() usando el método newWebSocketBuilder vamos a crear nuestra conexión. Que tiene un método llamado buildAsync el cual requiere del URL de nuestro websocket y le pasamos el objeto que tiene todos los eventos para usar el websocket.

Con esto ya podemos crear una variable String que recibe un texto del JOptionPane con los mensajes que el usuario le quiere enviar al servidor. Con el método sendText podemos enviar los mensajes que el usuario quiere. La respuesta la vamos a esperar en el método onText.

Etiquetas: , , , ,