المشاركات

¿Qué son los Virtual Threads ?

صورة
Ya se ha leído "Virtual Threads" por aquí y por allá desde Java 19, pero ¿realmente, qué son? En este post trataré de explicar su definición, por qué deberíamos usarlos y cómo podríamos ir cambiando nuestros proyectos a los Virtual Threads. Vamos a ello

¿Cuál IDE debo usar para programar en Java?

صورة
 Cuando comenzamos a programar en Java, quizás uno de los grandes dilemas es ¿con qué software haremos nuestro programas? Escuchamos, nos invitan, nos mencionan, y hasta nos persuaden (creo que no han llegado a amenazarnos) que debamos usar cierto IDE y no otro (a menos que sea una política de la empresa) En esta publicación analizaremos qué es y no es un IDE, mencionaremos y analizaremos los más conocidos, y veremos cuál es el "mejor".

Roadmap Java Fullstack Developer 2024

صورة
Vuelvo al blog después de tiempo, porque no tenía tiempo 😁 Esta vez tengo la motivación de desarrollar un roadmap para que cualquier desarrollador que tenga la intensión de ser un Java Developer pueda seguir estos niveles.

Las redes sociales

صورة
Bueno, esto ya se salió de control.  Desde que Elon Musk tomó el control de Twitter para hacerlo más libre, solo logró que sea más restringido. Ahora Reddit cobra por los subreddit... ya no es libre como lo era. Hay redes sociales que de verdad son libres, pero no le dan tanta publicidad. Hay redes sociales que son basura y son muy usadas. Así que, aquí listaré las redes sociales que he creado y que trataré de tener algún contenido, y claro, que aporten al conocimiento (y de hecho que no tendrán mucha acogida).

Conociendo las Expresionas Lambdas: desde lo simple hasta lo avanzado.

صورة
Veamos las expresiones Lambda, desde lo simple hasta lo complejo, para saber cómo aplicarlo y por qué aplicarlo. Vamos

¿Qué son los :: en Java?

صورة
¿Vas llevando tiempo programando en Java y de repente encuentras que usan esta notación? String::toUpperCase Y te preguntas ¿Ya parece C++? ¿Qué es eso? ¿Cómo funciona ese :: Aquí explicaremos un poco de qué trata.

DataSource en Jakarta EE

صورة
Para que nuestra aplicación Jakarta EE tenga conexión a la base de datos, debemos configurar un DataSource. No debemos usar la clase java.sql.DriverManager , es decir, la conexión nativa a JDBC, sino, debemos usar lo que ofrece el servidor Jakarta EE. Aquí mostraremos dos maneras: configurando el DataSource en la misma aplicación, y configurando en el Servidor Jakarta EE.

JDK Record ¿Lo necesito?

صورة
JEP 395: Records : https://openjdk.org/jeps/395 . Apareció en la versión JDK 14 como preliminar, y ya fue lanzado como oficial en la versión JDK 16. ¿Para qué es? ¿Para qué sirve? ¿Será peligroso para mis proyectos? ¿Será más peligroso para mis hijos?. En este artículo examinaremos hasta qué tan útil puede ser los Records en JDK.

Jakarta EE 9 Essentials Archetype

صورة
Acabo de publicar mi primer arquetipo a Maven 🎉🎉🎉 Se llama "Jakarta EE 9 Essentials Archetype". Permite crear un proyecto básico con las mínimas dependencias, compatible para cualquier servidor Jakarta EE 9. Tiene una nada de dependencias y de plugins, solo lo necesario para que se construya una aplicación Jakarta EE. El sitio web del proyecto: https://apuntesdejava.github.io/jakartaee9-essentials-archetype/ Detalles del arquetipo en el repositorio central: https://search.maven.org/artifact/com.apuntesdejava/jakartaee9-essentials/0.1/maven-archetype Modo de uso Para crear un proyecto basta con ejecutar el siguiente comando desde la consola desde una carpeta / directorio en blanco: mvn -DarchetypeGroupId=com.apuntesdejava \ -DarchetypeArtifactId=jakartaee9-essentials \ org.apache.maven.plugins:maven-archetype-plugin:generate Si se ejecuta así, el maven preguntará por el nombre el grupo, del artefacto y del paquete del proyecto a crear. Con NetBeans Con IntelliJ Con ...

Cambiando propiedades de conexión JDBC en Quarkus.... durante ejecución (y en Payara Micro)

صورة
Normalmente , los valores de las conexiones DEBEN estar separado del código (si eres principiante, ya debes saberlo a rajatabla). Y si usamos frameworks como Quarkus, PayaraMicro, OpenLiberty, etc (ah, también Springboot) estos ya tienen preparado características como "perfiles" donde las propiedades pueden establecerse de acuerdo a cada perfil, o también podemos usar los perfiles del Maven para usar tal o cual propiedades. O también podemos hacer que tomen los valores del entorno (variables del entorno donde se está ejecutando, sea test, staging, producción, etc). En fin, podemos configurar los valores de las propiedades ANTES de que se ejecute la aplicación para que funcione tranquilamente. Y así, no pasó nada. PEROOO!!! Hay veces que el cliente, en su afán de implementar seguridad extrema dice que nada de las credenciales de base de datos puede estar en variables de entorno, ni en las propiedades de despliegue, ni nada. Sino que están en un recurso externo (puede ser un A...

Payara + MySQL en contenedores

صورة
 Seguimos con la contenedir.. bueno, poniendo todo en contenedores. Ahora, una aplicación que estaba desarrollando en vivo, una aplicación Jakarta EE (con EJB, JPA y JSF) lo he puesto para que, en desarrollo, se pueda ejecutar en un Payara normal del IDE, y que también pueda ejecutarse en contenedores. Aquí explicaré un poco de cómo se logra esto, y un breve repaso a la organización de la aplicación.

OpenJDK + Liferay + MySQL, en contenedores

صورة
  Estamos en el mundo de la contened.. conteneni...contenedoriza ... bueno, que todo lo colocan en contenedores. Lo cual es un gran alivio en la configuración y puesta en producción de servidores. No tendríamos de qué preocuparnos más que esté bien configurado a través de un archivo YAML. Una de los temas más recurrentes que he hablado en este humilde blog es sobre el CMS hecho en Java llamado Liferay. Siempre la parte que más me preocupaba era: ¿cómo diablos podemos ponerlo en producción con algunos pasos?. Pues bueno, aquí lo explico en este post: usando Docker.

Hablemos Java - Primer "En vivo" del blog: Streams, Lambdas y otras cosas más

صورة
Comenzando una nueva sección: los vídeos en vivo. Para que se vea que no hay truco o trampa, y si hay, que aparezcan en vivo. Aquí la primera emisión donde hablamos sobre Streams y Lambdas. Si te gusta el contenido y deseas ver más, apóyame con un like y suscribíendote al canal. Estate atento a las siguientes emisiones. Podemos conversar ahí y hasta podríamos resolver problemas juntos.

Quarkus con NetBeans 12

صورة
En este vídeo conoceremos un poco de Quarkus, crear una aplicación MicroProfile, y ejecutarlo desde NetBeans.           Luego iremos desarrollando más funcionalidades MicroProfile en este proyecto de Quarkus

Midiendo el rendimiento de rutinas

صورة
Estos días me ha tocado revisar código hecho por otros, y encontré un par de rutinas que me parecieron interesantes para revisar. Estas las publiqué en la cuenta de twitter: #CodeReviewChallenge A ver, cómo optimizarían este código (que encontré)? pic.twitter.com/PUWZy0erpG — ☕ Apuntes de Java ☕ 😷🏠 (@apuntesdejava) April 6, 2020 #CodeReviewChallenge #QuedateEnCasa #StayHome ¿Cómo simplificarían el contenido de este método? (sin usar bibliotecas adicionales) pic.twitter.com/rfRn8Qb2Ga — ☕ Apuntes de Java ☕ 😷🏠 (@apuntesdejava) April 7, 2020 He recibido respuestas interesantes. Lo que publicaré en este post y en un vídeo es ver cuál es la rutina más rápida, en base a sus respuestas.

Liferay 7.2. Service Layer + Portlet. Un CRUD básico

صورة
En este post conoceremos cómo implementar un CRUD muy básico, pero consiste en unir el Service layer con el Portlet. Aquí ya unimos las piezas que forman el MVC en Liferay.

Liferay 7.2. Service Layer - Consultas personalizadas

صورة
Hasta el momento hemos creado consultas simples, como listar todos los registros con un campo u otro campo iguales. Pero necesitamos que nuestros registros puedan ser leídos con cualquier combinación de los cambios. El Service Layer nos cubre grandes funcionalidades con las características básicas del CRUD. Además, podemos agregar otros tipos de consultas. Estos tipos de consulta se llama DynamicQuery , y es lo que veremos en este post.

Presentando MP Lemon Builder

صورة
Aquí les presento la primera versión de mi aplicación MP Lemon Builder . ¿En qué consiste? Es un generador de proyectos MP (MicroProfile), y en esta primera versión permite crear una aplicación asegurada con JWT. La autenticación utilizará el realm del servidor (en esta primera versión utiliza a Payara) y la validación de los roles lo hará utilizando el estándar de JakartaEE. Aquí muestro un vídeo de cómo funciona. Fuentes Esta aplicación está basada en dos proyectos: La publicación de Victor Orozco: A simple MicroProfile JWT token provider with Payara realms and JAX-RS JWT dispenser de Adam Bien . ¿Por qué "Lemon"? Porque me gustan las frutas, y el limón es una de mis preferidas.

Cliente Standalone de JAX-RS (o cualquier endpoint RESTful)

صورة
Si tenemos una aplicación standalone (puede ser un JavaFX, de línea de comandos, batch, etc) que necesite consumir un endpoint hecho en RESTful, por lo general usaríamos algo como esto: public class RestClient { private static final String REST_URI = "http://localhost:8082/spring-jersey/resources/employees"; private Client client = ClientBuilder.newClient(); public Employee getJsonEmployee(int id) { return client .target(REST_URI) .path(String.valueOf(id)) .request(MediaType.APPLICATION_JSON) .get(Employee.class); } //... } (Tomado de https://www.baeldung.com/jersey-jax-rs-client ) Lo cual no está mal, pero creo que debería ser lo más transparente posible. ¿Cómo es eso? Si ven en la línea 13 del código anterior, significa que hay que decirle que haga un GET a la petición, además de pasarle el tipo de respuesta y otras cosas más. La cuestión se volvería algo compleja si queremos hace...

Otro tutorial de Java: Sesión 3 - Tipos de variables y cómo nombrarlas

صورة
Las variables, cuáles son sus tipos, y cómo se deberían declarar.