JavaFX no está muerto. Aunque ha habido ciertos cambios en el panorama de desarrollo de interfaces de usuario en Java en los últimos años, JavaFX sigue siendo una opción válida y activamente utilizada por muchos desarrolladores.
JavaFX es una biblioteca de software de plataforma cruzada utilizada para desarrollar aplicaciones de escritorio y móviles con una interfaz gráfica de usuario (GUI). Proporciona una amplia gama de componentes y herramientas para crear interfaces de usuario modernas y atractivas. Además, JavaFX se integra bien con el lenguaje de programación Java y se puede utilizar en combinación con otros marcos y tecnologías de Java.
Aunque algunos desarrolladores han optado por utilizar otros marcos y tecnologías para el desarrollo de interfaces de usuario, como HTML5/CSS/JavaScript o bibliotecas como Swing, JavaFX todavía tiene una base de usuarios activa y continúa siendo compatible y mantenido por Oracle y la comunidad de desarrolladores de Java.
JavaFX no está muerto y sigue siendo una opción viable para el desarrollo de aplicaciones de escritorio y móviles con una interfaz gráfica de usuario en Java.
Alternativas
Existen varias alternativas a JavaFX que se pueden considerar para el desarrollo de interfaces gráficas de usuario en Java. Algunas de ellas son:
Swing: Es una biblioteca de componentes gráficos incluida en el kit de desarrollo de Java (JDK). Aunque Swing es una tecnología más antigua, sigue siendo ampliamente utilizada y ofrece una amplia gama de componentes y herramientas para crear interfaces de usuario.
AWT (Abstract Window Toolkit): Es una biblioteca de bajo nivel para crear interfaces gráficas de usuario en Java. AWT proporciona un conjunto básico de componentes y se utiliza a menudo junto con Swing para aprovechar las características adicionales que ofrece.
SWT (Standard Widget Toolkit): Es una biblioteca de interfaz de usuario desarrollada por Eclipse Foundation. SWT se enfoca en proporcionar una integración más nativa con los sistemas operativos subyacentes y ofrece una API de alto rendimiento para crear interfaces de usuario en Java.
JavaFX Ports: JavaFX Ports es una versión portada de JavaFX que se ejecuta en diferentes plataformas, como Android e iOS. Permite desarrollar aplicaciones de escritorio y móviles con una interfaz de usuario moderna y atractiva utilizando JavaFX.
LibGDX: Es una biblioteca de desarrollo de juegos multiplataforma escrita en Java. Aunque se centra en el desarrollo de juegos, también se puede utilizar para crear interfaces gráficas de usuario para aplicaciones no relacionadas con juegos.
Estas son solo algunas de las alternativas disponibles para el desarrollo de interfaces gráficas de usuario en Java. La elección de la herramienta depende de los requisitos específicos del proyecto, la plataforma objetivo y las preferencias del desarrollador.
En este artículo, vamos a crear una aplicación REST con Spring Boot conectada a una base de datos Oracle.
Herramientas
Java 17
Spring Tool Suite (STS) o Intellij IDEA
Oracle XE
Docker
Postman
Crear un proyecto Spring Boot
Vamos a ingresar a la siguiente url https://start.spring.io/, como se puede observar en la Figura #1.
Paso # 1:
Seleccionamos en el proyecto la opción Maven, el lenguaje Java, la versión de Spring Boot para este ejemplo 2.7.8
Paso # 2:
En el Project Metadata: Diligenciamos la información del proyecto, como el Group, Artifact, Nombre, si requiere de adicionar una descripción del proyecto, nombre del paquete con su respectivo empaquetamiento. Para esta demo en el Packaging seleccionamos Jar y en la versión de Java la número 17 que es la version LTS.
Figura 1
Paso # 3:
Continuando con la gestión del información del proyectó adicionamos las siguientes dependencias.
Lombok: Es una librería java que contiene anotaciones que generan automáticamente métodos de ayuda después de la compilación como por ejemplo (setters, getters, constructores).
Spring Web: Proporciona características de integración comunes específicas de la web, para construir aplicaciones web, incluyendo RESTful, utilizando Spring MVC.
Spring Data JPA: Proporciona soporte de repositorio para Java Persistence API (JPA). Facilitando el desarrollo de aplicaciones que necesitan acceder a fuentes de datos JPA.
Spring Boot DevTools: Proporciona reinicio rápido de las aplicaciones.
Oracle Driver: Driver que proporciona acceso a Oracle.
Validator: Es el estándar para implementar la lógica de validación en el ecosistema Java, por ejemplo lo utilizamos en la clase validando los campos con sus respectivas restricciones. Por otro lado está bien integrado con Spring y Spring Boot.
Spring-boot-starter-parent: Todos los proyectos de spring boot construidos en maven utilizan spring boot starter parent en su pom.xml. Estas son algunas acciones que realiza :
Configurar la versión y las propiedades de Java.
Gestionar las dependencias y sus versiones.
Paso #4:
Hacemos click para generar el proyecto.
Revisamos la estructura del proyecto como se puede visualizar en la Figura #2, debería quedar algo así.
Figura 2
En este punto vamos a revisar el archivo pom.xml como se muestra en la Figura #3.
En el siguiente paso vamos a crear los paquetes con sus respectivas clases e interfaces.
1. Entidad Estudiante
Creamos un paquete con el nombre model y dentro de el una Clase con el nombre Estudiante que contendrá toda la información básica sobre el estudiante, como la identificación, nombre, apellido, dirección, país, ciudad, edad.
Contendrá los métodos CRUD habituales y más para manejar las operaciones básicas. Por lo tanto, para crear nuestro repositorio personal, necesitamos extender el repositorio JPA de Spring Data. Permite que los servicios se comuniquen con la base de datos.
La aplicación Spring Boot del lado del Backend utiliza Clases de Servicio para representan el núcleo de su aplicación. Para este ejemplo crearemos una interfaz donde crearemos todos los métodos para realizar las operaciones de la lógica de negocio.
package com.geovanny.code.service;
import java.util.List;
import java.util.Optional;
import com.geovanny.code.model.Estudiante;
public interface EstudianteService {
public List<Estudiante> findEstudianteAll();
public Estudiante createEstudiante(Estudiante estudiante);
public Estudiante updateEstudiante(Estudiante estudiante);
public void deleteEstudiante(Long id);
public Optional<Estudiante> getEstudiante(Long id);
}
3.1 Implementación del Servicio
En esta clase se implementa toda la lógica de negocio de nuestro ejemplo de estudiante, adicionamos la anotación @Service e implementamos la clase desde la interfaz de servicio.
package com.geovanny.code.service;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.geovanny.code.model.Estudiante;
import com.geovanny.code.repository.EstudianteRepositorio;
@Service
public class EstudianteServiceImpl implements EstudianteService{
@Autowired
private EstudianteRepositorio estudianteRepositorio;
@Override
public List<Estudiante> findEstudianteAll() {
return estudianteRepositorio.findAll();
}
@Override
public Estudiante createEstudiante(Estudiante estudiante) {
return estudianteRepositorio.saveAndFlush(estudiante);
}
@Override
public Estudiante updateEstudiante(Estudiante estudiante) {
return estudianteRepositorio.save(estudiante);
}
@Override
public void deleteEstudiante(Long id) {
estudianteRepositorio.deleteById(id);
}
@Override
public Optional<Estudiante> getEstudiante(Long id) {
return estudianteRepositorio.findById(id);
}
}
4. Excepción
Para este ejemplo solamente utilizaremos la excepción NOT_FOUND, queda para el lector si desea adicionar otra tipo de excepcion por ejemplo NO_CONTENT
package com.geovanny.code.exception;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.http.HttpStatus;
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ModeloNotFoundException extends RuntimeException {
public ModeloNotFoundException(String mensaje)
{
super(mensaje);
}
}
5. Controlador
Creamos el controlador que se utilizará para interactuar con los estudiantes y realizar las acciones CRUD. Permite que los Servicios se comuniquen con el Frontend.
package com.geovanny.code.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.geovanny.code.exception.ModeloNotFoundException;
import com.geovanny.code.model.Estudiante;
import com.geovanny.code.service.EstudianteService;
import java.util.ArrayList;
import java.util.List;
import javax.validation.Valid;
@RestController
@RequestMapping("/estudiantes")
public class EstudianteController {
@Autowired
private EstudianteService service;
@GetMapping(produces = "application/json")
public ResponseEntity<List<Estudiante>> listar() {
List<Estudiante> estudiantes = new ArrayList<>();
estudiantes = service.findEstudianteAll();
return new ResponseEntity<List<Estudiante>>(estudiantes, HttpStatus.OK);
}
@PostMapping
public ResponseEntity<Estudiante> crearEstudiante(@Valid @RequestBody Estudiante estudiante){
service.createEstudiante(estudiante);
return new ResponseEntity<Estudiante>(HttpStatus.CREATED);
}
@GetMapping("/{id}")
public ResponseEntity<Estudiante> getEstudianteById(@PathVariable("id") Long id){
Estudiante estudiante= service.getEstudiante(id).orElseThrow(() -> new ModeloNotFoundException("Estudiante no encontrado $id"));
return new ResponseEntity<Estudiante>(estudiante, HttpStatus.OK);
}
@DeleteMapping("/{id}")
public ResponseEntity<Estudiante> deleteEstudiante(@PathVariable("id") Long id){
service.deleteEstudiante(id);
return ResponseEntity.ok().build();
}
@PutMapping("/{id}")
public Estudiante updateEstudiante(@PathVariable("id") Long id, @Valid @RequestBody Estudiante estudiante){
Estudiante dbestudiante = service.getEstudiante(id).orElseThrow(() -> new ModeloNotFoundException("Estudiante No enocntrado"));
dbestudiante.setNombres(estudiante.getNombres());
dbestudiante.setApellidos(estudiante.getApellidos());
dbestudiante.setDireccion(estudiante.getDireccion());
dbestudiante.setEdad(estudiante.getEdad());
dbestudiante.setCiudad(estudiante.getCiudad());
dbestudiante.setPais(estudiante.getPais());
return service.updateEstudiante(dbestudiante);
}
6. Configuración de Application.yml
En este archivo .yaml se configura el puerto y la conexión a la base de datos de oracle.
Crearemos una carpeta en dentro de resource con el nombre script y adicionamos el siguiente código en sql que nos permite crear una tabla en la base de datos.
CREATE TABLE TBL_ESTUDIANTES(
ID NUMERIC(4) NOT NULL PRIMARY KEY,
NOMBRES VARCHAR2(60) NOT NULL UNIQUE,
APELLIDOS VARCHAR2(300) NOT NULL,
DIRECCION VARCHAR2(150) NULL,
EDAD INTEGER NOT NULL,
CIUDAD VARCHAR2(50),
PAIS VARCHAR2(50),
CONSTRAINT PK_TBL_ESTUDIANTES PRIMARY KEY (ID)
);
CREATE SEQUENCE SEQ_ESTUDIANTES;
8.1 Insertar registro en la tabla de la base de datos
Esquema para insertar registros en la tabla de tbl_estudiantes.
INSERT INTO TBL_ESTUDIANTES (ID, NOMBRES, APELLIDOS, DIRECCION, EDAD, CIUDAD, PAIS) VALUES (SEQ_ESTUDIANTES.NEXTVAL, 'GEOVANNY', 'MENDOZA', 'Calle 41 San Jose',28,'Barranquilla', 'Colombia');
INSERT INTO TBL_ESTUDIANTES (ID, NOMBRES, APELLIDOS, DIRECCION, EDAD, CIUDAD, PAIS) VALUES (SEQ_ESTUDIANTES.NEXTVAL, 'OMAR', 'BERROTERAN', 'Bo grenada Casa C22',27,'Managua', 'Nicaragua');
COMMIT;
9. Gestión de Base de Datos
En esta sección exploraremos la gestión de la base de datos con el mismo intellij como se puede observar en la figura #4.
Figura #4
9.1 Conectar a la interfaz de la base de Datos
Después seleccionar la Database adicionamos la conexión con nuestra base de datos en oracle como se muestra en la figura #5.
Figura #5
Seleccionamos el signo (+) y nos ubicamos donde dice Data Source.
Seleccionamos la base de datos Oracle.
9.2 Configuración el Data Sources y Drivers
En este paso ingresamos el user y password, para este ejemplo utilizamos system como user y el password oracle como se muestra en la figura #6.
Figura #6
9.3 Ejecutar la aplicación
En este paso ejecutamos la aplicación para crear la tabla de estudiante como se muestra en la figura #7.
Nota: Tener el servicio de docker ejecutando
Figura #7
Abrimos la console para realizar una consulta sobre la tabla tbl_estudiante como se muestra en la figura #8.
Figura #8
10. Prueba con Postman
Para este ejemplo abrimos postman e importamos el archivo de postman para configurar las pruebas. Esge archivo se encuentra en el proyecto de git y se encuentra en la siguiente url Blog.postman_collection.json.
En esta sección se visualiza las pruebas exitosas de postman con los métodos GET y POST como se muestran en la figura #9 y #10.
11.1 Prueba del Método GET: Acá se puede visualizar el resultado de la prueba del método GET donde nos muestra todo los estudiantes registrados, como se muestra en la figura #9
Figura #9
11.2 Prueba del Método POST: Acá se puede visualizar la creación del estudiante con el método POST como se puede observar en la figura #10.
Conclusión
En este artículo hemos construido una aplicación REST con servicios básicos que se conectara a una base de datos Oracle, donde se crea una imagen en docker.
En el STACK java existe un archivo EAR que no es mas que un archivo ZIP con una estructura especifica. EAR (Enterprise Application aRchive) /
Un EAR normalmente contiene 2 archivos contenedores mas, un WAR (Web Archive) y un EJB , un archivo que contiene los EJB, sin embargo puede contener muchos mas (técnicamente no tiene limites), incluyendo clientes de EJB, EJB locales, pero el mínimo de todo EAR es uno, un modulo o contenedor, el cual puede ser un WAR o un EJB.
Actualmente dada la gran popularidad de Spring-Boot casi no se ven EAR, pero en el otro lado, fuera de spring-boot, en los servidores empresariales como: JBOSS, websphere, Apache TomEE, Wildfly.
Ejemplo de un proyecto EAR
Creando el EAR usando JetBrains IntelliJ IDEa
Usando el IDE para crear el proyecto gráficamente.
Creando un proyecto, paso uno.
Click en Crear.
Así queda el proyecto y puede eliminar a su gusto.
Omar es Java Senior Developer full Stack, consultor independiente. Developer Advocate, amante a la tecnología JVM con mas de 16 años de experiencia, colaborador de las distribuciones Linux: Fedora y Gentoo, ademas de otras aplicaciones libres. También es promotor y colaborador del proyecto de robótica educativa ICARO. Lider de proyecto y gestión de equipos. Conferencista, entrenador y consultor internacional. Actualmente Líder del Grupo de Usuarios Java de Nicaragua.
Puedes contratarlo para capacitaciones en tu empresa, desarrollo de software a medida, contraparte en entrega de software o consultor de seguridad.
Wildlfly es de los servidores mas usados en aplicaciones empresariales java, es muy potente, configurable, digno heredero de JBOSS, con muchos features, sin ser complicado. (Excepto features avanzados)
1. Descargar
Lo primero es descargar el programa, lo puedes hacer en este link:
La opción que generalmente se descarga es la full EE y distribución web, sea para windows o para linux.
En windows el contenedor ZIP es el mas común, para Linux: tgz.
La versión preview se usa para pruebas, aun no recomendable para un ambiente de producción.
2. Configurar
Una vez descargado y «descomprimido», se puede iniciar Wildfly, pero aun no está listo para usarse.
Para poder desplegar nuestras aplicaciones es necesario poder acceder a la consola, la consola administrativa solo se accede desde la versión FULL descargada, las version “Servlet-Only Distribution” se usa para servidores esclavos o gestionados en dominio.
2.1 Agregar usuarios.
Lo primero es crear uno o mas usuarios administrativos, aunque se pueden editar los archivos, se recomienda usar las herramientas creadas para ello, en windows son archivos batch(.bat) y en linux shell script (.sh).
Comandos de Wildfly
En la carpeta “bin” están los comandos para gestionar el servidor.
./add-user.sh
Dejar en blanco para los grupos inicialmente.Contestar yes para terminar de agregar el usuario.
3. Iniciar
Para iniciar el servidor la forma mas común es “standalone” la otra opción es via “dominio”, esta es para cundo tengamos un cluster de servidores.
./standalone.sh
Listo, ya tenemos iniciado el servidor sirviendo las aplicaciones en el puerto 8080, y la consola administrativa en el 9990, con esto ya podemos instalar las aplicaciones web que sea necesario sea archivo WAR o EAR.
Para entrar a la consola administrativa usa el siguiente link:
Omar es Java Senior Developer full Stack, consultor independiente. Developer Advocate, amante a la tecnología JVM con mas de 16 años de experiencia, colaborador de las distribuciones Linux: Fedora y Gentoo, ademas de otras aplicaciones libres. También es promotor y colaborador del proyecto de robótica educativa ICARO. Lider de proyecto y gestión de equipos. Conferencista, entrenador y consultor internacional. Actualmente Líder del Grupo de Usuarios Java de Nicaragua.
Puedes contratarlo para capacitaciones en tu empresa, desarrollo de software a medida, contraparte en entrega de software o consultor de seguridad.
La programación reactiva ha estado sonando muy fuerte recientemente. Entenderla para saber cuándo usarla y cuándo no, es esencial para un desarrollador. En este artículo les explicaremos cómo crear una aplicación de Spring Boot Reactiva en poco más de 4 pasos.
Nosotros y terceros seleccionados utilizamos cookies o tecnologías similares con fines técnicos y, con su consentimiento, para otras finalidades (“interacciones y funcionalidades básicas”, “mejora de la experiencia”, “medición” y “segmentación y publicidad”) según se especifica en la política de cookies.
Usted es libre de otorgar, denegar o revocar su consentimiento en cualquier momento.
Configurar y más información