<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8553642737291298841</id><updated>2026-05-20T08:41:53.274-05:00</updated><category term="netbeans"/><category term="java"/><category term="web"/><category term="tutorial"/><category term="java ee"/><category term="tips"/><category term="off topic"/><category term="jsf"/><category term="noticias"/><category term="glassfish"/><category term="video"/><category term="liferay"/><category term="opinion"/><category term="trucos"/><category term="netbeans 6.5"/><category term="restful"/><category term="netbeans 6.9"/><category term="tomcat"/><category term="java ee 6"/><category term="java ee 7"/><category term="jpa"/><category term="jakarta ee"/><category term="portlets"/><category term="payara"/><category term="netbeans 6.1"/><category term="netbeans 6.8"/><category term="ajax"/><category term="jsf 2.2"/><category term="libros"/><category term="comentarios"/><category term="ejb"/><category term="spring"/><category term="apache"/><category term="microservicios"/><category term="mysql"/><category term="seguridad"/><category term="webservices"/><category term="glassfish v3"/><category term="glassfish v4"/><category term="javascript"/><category term="netbeans 6.7"/><category term="oracle"/><category term="php"/><category term="sun"/><category term="javafx"/><category term="payaramicro"/><category term="plugins"/><category term="swing"/><category term="documentacion"/><category term="java ee 8"/><category term="jdbc"/><category term="microprofile"/><category term="windows"/><category term="ICEfaces"/><category term="base de datos"/><category term="datasource"/><category term="eclipse"/><category term="ejb 3.1"/><category term="jsf 2.0"/><category term="json"/><category term="netbeans 7.0"/><category term="conferencias"/><category term="curso"/><category term="jersey"/><category term="jsp"/><category term="mvc"/><category term="servlets"/><category term="struts"/><category term="tutorial java"/><category term="chiste"/><category term="encuesta"/><category term="ireport"/><category term="jasperreports"/><category term="java 8"/><category term="javaee7"/><category term="jdk"/><category term="junit"/><category term="maven"/><category term="netbeans 7.3"/><category term="netbeans 8"/><category term="portalpack"/><category term="xml"/><category term="arquillian"/><category term="cdi"/><category term="concurso"/><category term="facelets"/><category term="formateo"/><category term="html5"/><category term="ibatis"/><category term="java 7"/><category term="jpa 2.0"/><category term="netbeans 7.4"/><category term="otj"/><category term="reportes"/><category term="sql"/><category term="ubuntu"/><category term="wildfly"/><category term="NetBeans Platform"/><category term="aop"/><category term="articulos"/><category term="certificación"/><category term="configuración"/><category term="contenedores"/><category term="dao"/><category term="desktop"/><category term="docker"/><category term="error"/><category term="firefox"/><category term="groovy"/><category term="internet"/><category term="jquery"/><category term="jsonb"/><category term="jstl"/><category term="juegos"/><category term="lambda"/><category term="libraries"/><category term="linux"/><category term="localdate"/><category term="log4j"/><category term="logging"/><category term="netbeans 9"/><category term="openjdk"/><category term="portales"/><category term="presentacion"/><category term="programador"/><category term="quarkus"/><category term="rendimiento"/><category term="scjp"/><category term="server"/><category term="tiles"/><category term="weblogic"/><category term="websockets"/><category term="#java #fullstack #roadmap"/><category term="Java 19"/><category term="RCP"/><category term="Threads"/><category term="actualizacion"/><category term="adf"/><category term="angularjs"/><category term="ant"/><category term="aplicación"/><category term="benchmark"/><category term="bootstrap"/><category term="bug"/><category term="bugzilla"/><category term="coffeescript"/><category term="colaboración"/><category term="colecciones"/><category term="commons"/><category term="corretto"/><category term="date"/><category term="diagramas"/><category term="entidades"/><category term="errores"/><category term="eventos"/><category term="frameworks"/><category term="funcional"/><category term="glassfish v5"/><category term="grizzly"/><category term="heroku"/><category term="hibernate"/><category term="io"/><category term="java record"/><category term="java se"/><category term="java se6"/><category term="java20"/><category term="java9"/><category term="javaee8"/><category term="jaxrs"/><category term="jdbcrealm"/><category term="jdk 7"/><category term="jfreechart"/><category term="jmh"/><category term="jmx"/><category term="jpa 2.1"/><category term="jshell"/><category term="jvisualvm"/><category term="jwt"/><category term="listas"/><category term="live"/><category term="logs"/><category term="mapeo"/><category term="material design"/><category term="meme"/><category term="myfaces"/><category term="netbeans 10"/><category term="netbeans 11"/><category term="netbeans 8.1"/><category term="nio"/><category term="node"/><category term="nojava"/><category term="noticias NetBeans"/><category term="ocjp"/><category term="opnj"/><category term="packtpub"/><category term="portable"/><category term="record"/><category term="regex"/><category term="repl"/><category term="senna"/><category term="server push"/><category term="servicios"/><category term="snippet"/><category term="spark"/><category term="stream"/><category term="string"/><category term="tdd"/><category term="tomee"/><category term="uml"/><category term="upload"/><category term="webinar"/><category term="wiki"/><category term="win8"/><category term="youtube"/><title type='text'>Apuntes de Java</title><subtitle type='html'>&lt;strong&gt;Visita &lt;a href=&quot;https://goo.gl/Sddcn2&quot;&gt;https://bitbucket.org/apuntesdejava/&lt;/a&gt;,&#xa;&lt;a href=&quot;https://goo.gl/uPs0wf&quot;&gt;https://github.com/apuntesdejava/&lt;/a&gt;&lt;/strong&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default?start-index=26&amp;max-results=25'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>398</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-3312270768198613089</id><published>2026-01-31T12:30:00.000-05:00</published><updated>2026-01-31T12:30:15.497-05:00</updated><title type='text'>La Gran Mentira de Kubernetes: Desmontando el Hype con la Suite de HashiCorp</title><content type='html'>&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;/h3&gt;
&lt;div&gt;
  &lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://i.imgur.com/l2RcXY2.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1143&quot; data-original-width=&quot;2048&quot; height=&quot;224&quot; src=&quot;https://i.imgur.com/l2RcXY2.jpeg&quot; width=&quot;400&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;La Mentira&lt;/h2&gt;
  &lt;div&gt;Nos han vendido una mentira industrial.&lt;/div&gt;
  &lt;div&gt;&lt;br&gt;&lt;/div&gt;
  &lt;div&gt;
    Te han repetido hasta el cansancio que, para desplegar software moderno,
    necesitas la complejidad de Google. Te han dicho que si no usas Kubernetes
    (K8s), tu infraestructura es &amp;quot;legacy&amp;quot;, irrelevante o amateur. Te han
    convencido de que sacrificar 4GB de RAM solo para mantener vivo el plano de
    control es &amp;quot;el costo de hacer negocios&amp;quot;.
  &lt;/div&gt;
  &lt;div&gt;&lt;br&gt;&lt;/div&gt;
  &lt;div&gt;
    La realidad es más oscura:
    &lt;b&gt;Kubernetes es un monstruo de sobre-ingeniería&lt;/b&gt; diseñado para venderte
    nubes costosas y horas de consultoría eterna.
  &lt;/div&gt;
  &lt;div&gt;&lt;br&gt;&lt;/div&gt;
  &lt;div&gt;
    La &amp;quot;Herejía&amp;quot; que propongo hoy es simple:
    &lt;b&gt;No necesitas esa complejidad&lt;/b&gt;. Puedes tener orquestación,
    descubrimiento de servicios, balanceo de carga y escalado automático
    consumiendo una fracción de los recursos y con una curva de aprendizaje
    humana.
  &lt;/div&gt;
  &lt;div&gt;&lt;br&gt;&lt;/div&gt;
  &lt;div&gt;
    Hoy vamos a desmontar el mito. Vamos a levantar una infraestructura completa
    usando la &amp;quot;Vía HashiCorp&amp;quot; (Nomad &amp;amp; Consul) sobre un entorno hostil
    (WSL2), y vamos a probar su resistencia con fuego real (k6).
  &lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2026/01/la-gran-mentira-de-kubernetes.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/3312270768198613089/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2026/01/la-gran-mentira-de-kubernetes.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/3312270768198613089'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/3312270768198613089'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2026/01/la-gran-mentira-de-kubernetes.html' title='La Gran Mentira de Kubernetes: Desmontando el Hype con la Suite de HashiCorp'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-4704158764887884984</id><published>2025-05-17T14:28:00.002-05:00</published><updated>2025-05-17T14:28:55.287-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="jakarta ee"/><category scheme="http://www.blogger.com/atom/ns#" term="payara"/><category scheme="http://www.blogger.com/atom/ns#" term="tomee"/><category scheme="http://www.blogger.com/atom/ns#" term="wildfly"/><title type='text'>CodeHaus Cargo - Ejecutando aplicaciones Jakarta EE sin descargar servidores</title><content type='html'>&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://i.imgur.com/hWHXVSA.png&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;82&quot; data-original-width=&quot;252&quot; height=&quot;82&quot; src=&quot;https://i.imgur.com/hWHXVSA.png&quot; width=&quot;252&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;Una de las tantas dificultas que tiene un desarrollador de Jakarta EE es
el configurar un servidor de - justamente - Jakarta EE. Aparte que existe varias
como GlassFish, JBoss, Resin, Tomcat / TomEE, WebLogic, Wildfly (y de más), lo
más complicado es:
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Descargar&lt;/li&gt;
  &lt;li&gt;Configurar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  Pues en este artículo vamos a conocer un plugin que ha reducido el dolor de
  cabeza. Se llama Code Haus Cargo.
&lt;/p&gt;
&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2025/05/codehaus-cargo-ejecutando-aplicaciones.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/4704158764887884984/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2025/05/codehaus-cargo-ejecutando-aplicaciones.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/4704158764887884984'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/4704158764887884984'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2025/05/codehaus-cargo-ejecutando-aplicaciones.html' title='CodeHaus Cargo - Ejecutando aplicaciones Jakarta EE sin descargar servidores'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-5068777463790723358</id><published>2025-03-05T12:15:00.001-05:00</published><updated>2025-03-05T12:15:54.134-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hibernate"/><category scheme="http://www.blogger.com/atom/ns#" term="jakarta ee"/><category scheme="http://www.blogger.com/atom/ns#" term="payara"/><title type='text'>Jakarta EE 11 - Jakarta Data - Parte 1</title><content type='html'>&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vSFP4cVqoQ4xlvEIr6HY9vBmmtj8giBiUQNxDo9lnfwFRSub6cAJcgn9DJTKVCId9eX5Nl6nrOAVrwT/pub?w=1440&amp;amp;h=810&quot;
    style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;810&quot;
      data-original-width=&quot;1440&quot;
      height=&quot;180&quot;
      src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vSFP4cVqoQ4xlvEIr6HY9vBmmtj8giBiUQNxDo9lnfwFRSub6cAJcgn9DJTKVCId9eX5Nl6nrOAVrwT/pub?w=1440&amp;amp;h=810&quot;
      width=&quot;320&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;
 A la fecha de esta publicación, aún no se ha lanzado oficialmente
&lt;a href=&quot;https://jakarta.ee/specifications/platform/11/&quot; target=&quot;_blank&quot;
  &gt;Jakarta EE 11&lt;/a
&gt;. Pero ya hay unos avances de ciertas especificaciones, como
&lt;a href=&quot;https://jakarta.ee/specifications/data/&quot; target=&quot;_blank&quot;
  &gt;Jakarta Data&lt;/a
&gt;
la que yo considero una de las más interesantes e importantes.
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
  En este post veremos cómo podemos configurar nuestro proyecto con Jakarta EE
  11 + Jakarta Data, utilizando la implementación de
  &lt;a href=&quot;https://hibernate.org/orm/releases/6.6/&quot; target=&quot;_blank&quot;
    &gt;Hibernate &lt;/a
  &gt;sobre
  &lt;a href=&quot;https://www.payara.fish/&quot; target=&quot;_blank&quot;&gt;Payara Server&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt; &lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.apuntesdejava.com/2025/03/jakarta-ee-11-jakarta-data-parte-1.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/5068777463790723358/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2025/03/jakarta-ee-11-jakarta-data-parte-1.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/5068777463790723358'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/5068777463790723358'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2025/03/jakarta-ee-11-jakarta-data-parte-1.html' title='Jakarta EE 11 - Jakarta Data - Parte 1'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/vCaazQsnm-s/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-8378351486707013636</id><published>2024-09-27T16:16:00.004-05:00</published><updated>2024-09-27T16:30:59.950-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="Java 19"/><category scheme="http://www.blogger.com/atom/ns#" term="Threads"/><title type='text'>¿Qué son los Virtual Threads ?</title><content type='html'>&lt;img height=&quot;225&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vSmki-T5saRkjeE2c37K1onXlc5irF3ojHnFcryQypBGZsX2taKZj9IziNa8rnFlwmE9BPIxYyc7IuI/pub?w=1200&amp;amp;h=675&quot; width=&quot;400&quot;&gt;
&lt;p&gt;Ya se ha leído &amp;quot;Virtual Threads&amp;quot; por aquí y por allá desde Java 19, pero
  ¿realmente, qué son?
&lt;/p&gt;
&lt;p&gt;
  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.
&lt;/p&gt;
&lt;p&gt;Vamos a ello&lt;/p&gt;
&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2024/09/que-son-los-virtual-threads.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/8378351486707013636/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2024/09/que-son-los-virtual-threads.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/8378351486707013636'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/8378351486707013636'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2024/09/que-son-los-virtual-threads.html' title='¿Qué son los Virtual Threads ?'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-5219460759135804133</id><published>2024-02-24T23:59:00.004-05:00</published><updated>2024-02-24T23:59:46.408-05:00</updated><title type='text'>¿Cuál IDE debo usar para programar en Java?</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vSWgN3efatiBbb0whXxp2t55l8F_CTC6IJw2zERZSWbOZdrwdq-iLc-RlDV6UIhXfF8SUMhn1Kvtimz/pub?w=1600&amp;amp;h=900&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;225&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vSWgN3efatiBbb0whXxp2t55l8F_CTC6IJw2zERZSWbOZdrwdq-iLc-RlDV6UIhXfF8SUMhn1Kvtimz/pub?w=1600&amp;amp;h=900&quot; width=&quot;400&quot;&gt;&lt;/a&gt;&lt;/div&gt;
   Cuando comenzamos a programar en Java, quizás uno de los grandes dilemas
  es ¿con qué software haremos nuestro programas?
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
  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)
&lt;/p&gt;
&lt;p&gt;
  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 &amp;quot;mejor&amp;quot;.
&lt;/p&gt;
&lt;br&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2024/02/cual-ide-debo-usar-para-programar-en.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/5219460759135804133/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2024/02/cual-ide-debo-usar-para-programar-en.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/5219460759135804133'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/5219460759135804133'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2024/02/cual-ide-debo-usar-para-programar-en.html' title='¿Cuál IDE debo usar para programar en Java?'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhtbqEPR_lnSd3OSYhxq3DwSO1guupCbId9EJvuuqYkpzsR58-1tbZ1XegDIcLeOLfFGSi7m29d5IC_e9YouyEABTi7Z2Og1y5EudhVUQcPohmyTO1lt5zPol0q2WGGs8l6o51jLiel8k6MMO07T0bkoQVGywB-CAKex5y8YdGQde-oOqR1gkJl99Uclw/s72-w400-h193-c/eclipse_VJx6wEBQGa.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-4286547106494417302</id><published>2024-01-11T17:01:00.004-05:00</published><updated>2024-01-12T13:03:37.762-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="#java #fullstack #roadmap"/><title type='text'>Roadmap Java Fullstack Developer 2024</title><content type='html'>&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOc9C2Y3xAyooqeNCYpUiWolT45ie7_tVGHmu50s5WHanUleQItEZZYjTka84dIyJBfAcDmCGtN_luyPNKoZ6qHlB_ZqzNVcDtL1M1sUtQGAANLa3enF3bXlgeRubFoSxOc93pSbU_9cnfMLn2m-Z5kTKIvVvBU1NcBhUKW9q6DoBFnCl-1epWFSijU14/s1024/_a973a84c-b018-4557-8ffa-7d8dd1eb8f91.jpeg&quot;
    style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;1024&quot;
      data-original-width=&quot;1024&quot;
      height=&quot;320&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOc9C2Y3xAyooqeNCYpUiWolT45ie7_tVGHmu50s5WHanUleQItEZZYjTka84dIyJBfAcDmCGtN_luyPNKoZ6qHlB_ZqzNVcDtL1M1sUtQGAANLa3enF3bXlgeRubFoSxOc93pSbU_9cnfMLn2m-Z5kTKIvVvBU1NcBhUKW9q6DoBFnCl-1epWFSijU14/s320/_a973a84c-b018-4557-8ffa-7d8dd1eb8f91.jpeg&quot;
      width=&quot;320&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;Vuelvo al blog después de tiempo, porque no tenía tiempo 😁&lt;/p&gt;
&lt;p&gt;
  Esta vez tengo la motivación de desarrollar un roadmap para que cualquier
  desarrollador que tenga la intensión de ser un &lt;b&gt;Java Developer&lt;/b&gt; pueda
  seguir estos niveles.
&lt;/p&gt;
&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2024/01/roadmap-java-fullstack-developer.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/4286547106494417302/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2024/01/roadmap-java-fullstack-developer.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/4286547106494417302'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/4286547106494417302'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2024/01/roadmap-java-fullstack-developer.html' title='Roadmap Java Fullstack Developer 2024'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOc9C2Y3xAyooqeNCYpUiWolT45ie7_tVGHmu50s5WHanUleQItEZZYjTka84dIyJBfAcDmCGtN_luyPNKoZ6qHlB_ZqzNVcDtL1M1sUtQGAANLa3enF3bXlgeRubFoSxOc93pSbU_9cnfMLn2m-Z5kTKIvVvBU1NcBhUKW9q6DoBFnCl-1epWFSijU14/s72-c/_a973a84c-b018-4557-8ffa-7d8dd1eb8f91.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-5306041285511031058</id><published>2023-07-06T13:42:00.003-05:00</published><updated>2023-07-06T13:42:22.081-05:00</updated><title type='text'>Las redes sociales</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://i.imgur.com/IX29SQJ.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;448&quot; data-original-width=&quot;800&quot; height=&quot;179&quot; src=&quot;https://i.imgur.com/IX29SQJ.jpeg&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Bueno, esto ya se salió de control. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Desde que Elon Musk tomó el control de Twitter para hacerlo más libre, solo logró que sea más restringido.&lt;/li&gt;&lt;li&gt;Ahora Reddit cobra por los subreddit... ya no es libre como lo era.&lt;/li&gt;&lt;li&gt;Hay redes sociales que de verdad son libres, pero no le dan tanta publicidad.&lt;/li&gt;&lt;li&gt;Hay redes sociales que son basura y son muy usadas.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;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).&lt;/div&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2023/07/las-redes-sociales.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/5306041285511031058/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2023/07/las-redes-sociales.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/5306041285511031058'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/5306041285511031058'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2023/07/las-redes-sociales.html' title='Las redes sociales'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-1177426482295465913</id><published>2023-04-01T13:24:00.004-05:00</published><updated>2023-04-07T00:36:59.699-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="colecciones"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="lambda"/><category scheme="http://www.blogger.com/atom/ns#" term="listas"/><category scheme="http://www.blogger.com/atom/ns#" term="stream"/><title type='text'>Conociendo las Expresionas Lambdas: desde lo simple hasta lo avanzado.</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;img
    border=&quot;0&quot;
    data-original-height=&quot;229&quot;
    data-original-width=&quot;230&quot;
    height=&quot;229&quot;
    src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkqXH4WyhC26QTN1pPs1C2PflMpQDi8tiB-IMiasR1hEtXHHpe8NG-5Od_fDYIw1e5uWw0FQ2vfHHfyDnIGRIppFo2HDeWJLslFfZbsaKR9ysjYuHS8MYFfn2GaJXU985OK4NkPmmj5OeIem3UYsNyn5bZ-XrqXSFkGRFLoiJIJTSGRmGOEuInf_pd/s1600/java-lambda-expression.png&quot;
    width=&quot;230&quot;&gt;
&lt;/div&gt;
&lt;p&gt;
  Veamos las expresiones Lambda, desde lo simple hasta lo complejo, para saber
  cómo aplicarlo y por qué aplicarlo.
&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;Vamos&lt;/p&gt;
&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2023/04/conociendo-las-expresionas-lambdas.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/1177426482295465913/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2023/04/conociendo-las-expresionas-lambdas.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/1177426482295465913'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/1177426482295465913'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2023/04/conociendo-las-expresionas-lambdas.html' title='Conociendo las Expresionas Lambdas: desde lo simple hasta lo avanzado.'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkqXH4WyhC26QTN1pPs1C2PflMpQDi8tiB-IMiasR1hEtXHHpe8NG-5Od_fDYIw1e5uWw0FQ2vfHHfyDnIGRIppFo2HDeWJLslFfZbsaKR9ysjYuHS8MYFfn2GaJXU985OK4NkPmmj5OeIem3UYsNyn5bZ-XrqXSFkGRFLoiJIJTSGRmGOEuInf_pd/s72-c/java-lambda-expression.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-2785680208809954902</id><published>2022-11-05T15:40:00.000-05:00</published><updated>2022-11-05T15:40:12.270-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="funcional"/><category scheme="http://www.blogger.com/atom/ns#" term="java 8"/><category scheme="http://www.blogger.com/atom/ns#" term="lambda"/><category scheme="http://www.blogger.com/atom/ns#" term="tips"/><title type='text'>¿Qué son los :: en Java?</title><content type='html'>&lt;p&gt;
  &lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vTTdTWsCbY5gL_bkGv72Gvc9Jwq4_ogbLt_I-_6D1v-HUR_OELF1iDIZ-xenJljUp85V-pDinDCRCvX/pub?w=960&amp;amp;h=540&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;113&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vTTdTWsCbY5gL_bkGv72Gvc9Jwq4_ogbLt_I-_6D1v-HUR_OELF1iDIZ-xenJljUp85V-pDinDCRCvX/pub?w=960&amp;amp;h=540&quot; width=&quot;200&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;¿Vas llevando tiempo programando en Java y de repente encuentras que usan esta
  notación?
&lt;p&gt;&lt;/p&gt;
&lt;pre class=&quot;brush:java&quot;&gt;String::toUpperCase&lt;/pre&gt;
&lt;p&gt;
  Y te preguntas ¿Ya parece C++? ¿Qué es eso? ¿Cómo funciona ese &lt;code&gt;::&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;Aquí explicaremos un poco de qué trata.&lt;/p&gt;
&lt;a href=&quot;https://www.apuntesdejava.com/2022/11/que-son-los-en-java.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/2785680208809954902/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2022/11/que-son-los-en-java.html#comment-form' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/2785680208809954902'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/2785680208809954902'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2022/11/que-son-los-en-java.html' title='¿Qué son los :: en Java?'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-1218066036967635994</id><published>2022-08-31T18:24:00.001-05:00</published><updated>2022-08-31T18:24:09.592-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="datasource"/><category scheme="http://www.blogger.com/atom/ns#" term="jakarta ee"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><title type='text'>DataSource en Jakarta EE</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vRfc64Mw7JAY2dnNrWlup38nZ-49x7AAAj454KZjek3ofpSuC3dyJsu54djCzg_WAeeEG7PniLbO3j_/pub?w=1440&amp;amp;h=810&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;180&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vRfc64Mw7JAY2dnNrWlup38nZ-49x7AAAj454KZjek3ofpSuC3dyJsu54djCzg_WAeeEG7PniLbO3j_/pub?w=1440&amp;amp;h=810&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;
  Para que nuestra aplicación Jakarta EE tenga conexión a la base de datos,
  debemos configurar un DataSource. No debemos usar la clase
  &lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/sql/DriverManager.html&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;java.sql.DriverManager&lt;/code&gt;&lt;/a&gt;, 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.
&lt;p&gt;&lt;/p&gt;
&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2022/08/datasource-en-jakarta-ee.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/1218066036967635994/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2022/08/datasource-en-jakarta-ee.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/1218066036967635994'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/1218066036967635994'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2022/08/datasource-en-jakarta-ee.html' title='DataSource en Jakarta EE'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/u-skqqdLfIQ/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-2914962707045333574</id><published>2022-07-15T23:16:00.000-05:00</published><updated>2022-07-15T23:16:00.776-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java record"/><category scheme="http://www.blogger.com/atom/ns#" term="record"/><title type='text'>JDK Record ¿Lo necesito?</title><content type='html'>&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBcYq9e6CtVwSPf_AYOIF1XxoFvDzsDVjthXrgdU6zb8xVmy1IoC3usbrn5s3xGsH6Q4y7JWKtJ_myWJjEe-U6cwktoyy6eJ-av5cZtZpiOmHDsHRn7L_MwOZeweE3r-n7sdX1i1H_GptVLn9bnPdOWhkQuQ84-1yPv9euteZRClz11KJHP5ui3wR7/s300/Thinking.jpg&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;300&quot; data-original-width=&quot;292&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBcYq9e6CtVwSPf_AYOIF1XxoFvDzsDVjthXrgdU6zb8xVmy1IoC3usbrn5s3xGsH6Q4y7JWKtJ_myWJjEe-U6cwktoyy6eJ-av5cZtZpiOmHDsHRn7L_MwOZeweE3r-n7sdX1i1H_GptVLn9bnPdOWhkQuQ84-1yPv9euteZRClz11KJHP5ui3wR7/s1600/Thinking.jpg&quot; width=&quot;292&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;JEP 395: Records :
&lt;a href=&quot;https://openjdk.org/jeps/395&quot; target=&quot;_blank&quot;&gt;https://openjdk.org/jeps/395&lt;/a&gt;.
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
  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.
&lt;/p&gt;
&lt;a href=&quot;https://www.apuntesdejava.com/2022/07/jdk-record-lo-necesito.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/2914962707045333574/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2022/07/jdk-record-lo-necesito.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/2914962707045333574'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/2914962707045333574'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2022/07/jdk-record-lo-necesito.html' title='JDK Record ¿Lo necesito?'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBcYq9e6CtVwSPf_AYOIF1XxoFvDzsDVjthXrgdU6zb8xVmy1IoC3usbrn5s3xGsH6Q4y7JWKtJ_myWJjEe-U6cwktoyy6eJ-av5cZtZpiOmHDsHRn7L_MwOZeweE3r-n7sdX1i1H_GptVLn9bnPdOWhkQuQ84-1yPv9euteZRClz11KJHP5ui3wR7/s72-c/Thinking.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-6950006551966502618</id><published>2022-06-21T12:20:00.000-05:00</published><updated>2022-06-21T12:20:02.806-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jakarta ee"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><title type='text'>Jakarta EE 9 Essentials Archetype</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vS1F3QuggZKhp8qj29lsYOUekW-qyBq7u3tB09LNAOMtH1oZSeoUwYRmdNopMHv1WqQiiMgutD485fB/pub?w=1440&amp;amp;h=810&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;180&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vS1F3QuggZKhp8qj29lsYOUekW-qyBq7u3tB09LNAOMtH1oZSeoUwYRmdNopMHv1WqQiiMgutD485fB/pub?w=1440&amp;amp;h=810&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Acabo de publicar mi primer arquetipo a Maven 🎉🎉🎉&lt;p&gt;&lt;/p&gt;&lt;p&gt;Se llama &quot;Jakarta EE 9 Essentials Archetype&quot;.&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;El sitio web del proyecto:&lt;a href=&quot;https://apuntesdejava.github.io/jakartaee9-essentials-archetype/&quot; target=&quot;_blank&quot;&gt;https://apuntesdejava.github.io/jakartaee9-essentials-archetype/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Detalles del arquetipo en el repositorio central: &lt;a href=&quot;https://search.maven.org/artifact/com.apuntesdejava/jakartaee9-essentials/0.1/maven-archetype&quot; target=&quot;_blank&quot;&gt;https://search.maven.org/artifact/com.apuntesdejava/jakartaee9-essentials/0.1/maven-archetype&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Modo de uso&lt;/h2&gt;&lt;p&gt;Para crear un proyecto basta con ejecutar el siguiente comando desde la consola desde una carpeta / directorio en blanco:&lt;/p&gt;&lt;pre class=&quot;brush:plain&quot;&gt;mvn -DarchetypeGroupId=com.apuntesdejava \
    -DarchetypeArtifactId=jakartaee9-essentials \
    org.apache.maven.plugins:maven-archetype-plugin:generate
&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;Si se ejecuta así, el maven preguntará por el nombre el grupo, del artefacto y del paquete del proyecto a crear.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Con NetBeans&lt;/h3&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOmcHvCIsRqaC401GnIjHbNUA1uhvmQZ54y1aAkXxaUVzW_Ib4wY88MNpeeUtDASmS5Oz8p5MB5MLd9D2IwqD9Pa3geKOIYTJNcQupBVEfeXR95C697o5qLLTClUQ-dz-n1dieHt26nCuGmvTAzDoQltFnpOOkrVGLxVNxlZs4PBmqCXb2DIW5BswV/s857/netbeans64_srJ03Cnr1E.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;591&quot; data-original-width=&quot;857&quot; height=&quot;276&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOmcHvCIsRqaC401GnIjHbNUA1uhvmQZ54y1aAkXxaUVzW_Ib4wY88MNpeeUtDASmS5Oz8p5MB5MLd9D2IwqD9Pa3geKOIYTJNcQupBVEfeXR95C697o5qLLTClUQ-dz-n1dieHt26nCuGmvTAzDoQltFnpOOkrVGLxVNxlZs4PBmqCXb2DIW5BswV/w400-h276/netbeans64_srJ03Cnr1E.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Con IntelliJ&lt;/h4&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1xmcYYmQzAq6DKqePaW0EI2FG_bp1IgrT_gK6TQCP8MqJjCJ7SOWHysziWGxXingoVNWl6jUeOtJYQb3xroMhgftjfW6TP-sP2YDAgwEJ1NccBXiVKd89CGCOUTiMFDi_bC_lD0VKLJIdq5LY2EyOk9ouoRHb8MLaEY-Z5Fa3T0x1U6DcDcNRKEGE/s792/idea64_esKasRmecl.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;792&quot; data-original-width=&quot;784&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1xmcYYmQzAq6DKqePaW0EI2FG_bp1IgrT_gK6TQCP8MqJjCJ7SOWHysziWGxXingoVNWl6jUeOtJYQb3xroMhgftjfW6TP-sP2YDAgwEJ1NccBXiVKd89CGCOUTiMFDi_bC_lD0VKLJIdq5LY2EyOk9ouoRHb8MLaEY-Z5Fa3T0x1U6DcDcNRKEGE/w396-h400/idea64_esKasRmecl.png&quot; width=&quot;396&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Con Visual Studio Code&lt;/h4&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAU-fpxKRDObIDBCpKsqeYKl6Kf-Y6qTgnKj-j3yybIaQoBfW510K1s2TeR714-_YUiX4U_i_PNAVmtwJiaZsTRq6Uu_zrUUi4NHUp9O1eZLytuYITk3_6oH7M0_eOwzBF9AWjkbSO-MSBRiVs7sJL2R8naL83-pXlqkzPAg_ebYJHHx9QMXNBAANg/s469/Code_Gv6ZcUBr8u.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;166&quot; data-original-width=&quot;469&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAU-fpxKRDObIDBCpKsqeYKl6Kf-Y6qTgnKj-j3yybIaQoBfW510K1s2TeR714-_YUiX4U_i_PNAVmtwJiaZsTRq6Uu_zrUUi4NHUp9O1eZLytuYITk3_6oH7M0_eOwzBF9AWjkbSO-MSBRiVs7sJL2R8naL83-pXlqkzPAg_ebYJHHx9QMXNBAANg/s16000/Code_Gv6ZcUBr8u.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Con Eclipse IDE&lt;/h4&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzxCjAg2_VDiZVtvxgfFlXPUIDQLjeKia_pWlvtuw-yyW1ewV0s5NSonVz_F7bEFM3GHZV_v7QEzyGYqi__JIVSYPy288jH2MmRzL5INJo01RIZY1fIcMbEH_Ue6wL6GxJqzvCkZ9Ri968hdoxkpylpmEqLiz7g3-GCKeWj0kHXKpgrmtQIp9CXfOg/s592/eclipse_Ol3tG84h4x.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;542&quot; data-original-width=&quot;592&quot; height=&quot;366&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzxCjAg2_VDiZVtvxgfFlXPUIDQLjeKia_pWlvtuw-yyW1ewV0s5NSonVz_F7bEFM3GHZV_v7QEzyGYqi__JIVSYPy288jH2MmRzL5INJo01RIZY1fIcMbEH_Ue6wL6GxJqzvCkZ9Ri968hdoxkpylpmEqLiz7g3-GCKeWj0kHXKpgrmtQIp9CXfOg/w400-h366/eclipse_Ol3tG84h4x.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Motivación&lt;/h2&gt;&lt;p&gt;En principio, porque cuando creaba un proyecto Jakarta EE usando algún IDE, éste me creaba con muchas dependencias y plugins.&lt;/p&gt;&lt;p&gt;Otra motivación es porque este proyecto es un anticipo de otro &lt;b&gt;proyecto que estamos desarrollando&lt;/b&gt;. Ya lo estaré compartiendo por este medio y por las redes.&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/6950006551966502618/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2022/06/jakarta-ee-9-essentials-archetype.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/6950006551966502618'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/6950006551966502618'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2022/06/jakarta-ee-9-essentials-archetype.html' title='Jakarta EE 9 Essentials Archetype'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOmcHvCIsRqaC401GnIjHbNUA1uhvmQZ54y1aAkXxaUVzW_Ib4wY88MNpeeUtDASmS5Oz8p5MB5MLd9D2IwqD9Pa3geKOIYTJNcQupBVEfeXR95C697o5qLLTClUQ-dz-n1dieHt26nCuGmvTAzDoQltFnpOOkrVGLxVNxlZs4PBmqCXb2DIW5BswV/s72-w400-h276-c/netbeans64_srJ03Cnr1E.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-7520332600844201808</id><published>2022-03-28T16:06:00.004-05:00</published><updated>2022-04-01T17:50:16.082-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jakarta ee"/><category scheme="http://www.blogger.com/atom/ns#" term="microprofile"/><category scheme="http://www.blogger.com/atom/ns#" term="payaramicro"/><category scheme="http://www.blogger.com/atom/ns#" term="quarkus"/><title type='text'>Cambiando propiedades de conexión JDBC en Quarkus.... durante ejecución (y en Payara Micro)</title><content type='html'>&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnU9Gex_yZIfmiXB3Z8whGaQuKny-kCWH0sUOIP8GFRiRNCxJeyAEL6PSH6KuSZP6qkD7urtEMRRuS5q9jC1FqwTBbTyJhcQ693XwpitHQ7nomK8o6arODmCWpR0UNy0lOPjI1sJSxjbtptui4MPi7wLMuDdhLu4Pt8eBTfilzRKU_EWD1cCEm1qGv/s1280/f1280x720-22246_153921_5050.jpg&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;720&quot; data-original-width=&quot;1280&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnU9Gex_yZIfmiXB3Z8whGaQuKny-kCWH0sUOIP8GFRiRNCxJeyAEL6PSH6KuSZP6qkD7urtEMRRuS5q9jC1FqwTBbTyJhcQ693XwpitHQ7nomK8o6arODmCWpR0UNy0lOPjI1sJSxjbtptui4MPi7wLMuDdhLu4Pt8eBTfilzRKU_EWD1cCEm1qGv/s320/f1280x720-22246_153921_5050.jpg&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;br&gt;Normalmente&lt;/b&gt;, 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 &amp;quot;perfiles&amp;quot; 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 &lt;b&gt;ANTES&lt;/b&gt; de que se ejecute la aplicación para que funcione tranquilamente. Y así, no pasó nada.&lt;p&gt;&lt;/p&gt;&lt;p&gt;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 Azure Table Storage, AWS Secret Manager, REST API, en otra base de datos, etc) solo nos dicen &amp;quot;tú consumes este nombre y ahí están las credenciales&amp;quot;. Suena comprensible, pero - considerando lo expuesto en el anterior párrafo - no habría manera directa de leer los valores de las credenciales antes de insertar en las propiedades justo antes que  termine de ejecutarse la aplicación. Deberíamos interceptar la ejecución de la lectura de las propiedades, o de la creación de la conexión de la base de datos.&lt;/p&gt;&lt;p&gt;En este post veremos la solución para dos Frameworks: Quarkus y PayaraMicro. Las credenciales serán tomadas de un servicio REST ficticio. La base de datos será H2 para no tener que pensar en configurar un ambiente.  Espero que les sea útil&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2022/03/cambiando-propiedades-de-conexion-jdbc.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/7520332600844201808/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2022/03/cambiando-propiedades-de-conexion-jdbc.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/7520332600844201808'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/7520332600844201808'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2022/03/cambiando-propiedades-de-conexion-jdbc.html' title='Cambiando propiedades de conexión JDBC en Quarkus.... durante ejecución (y en Payara Micro)'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnU9Gex_yZIfmiXB3Z8whGaQuKny-kCWH0sUOIP8GFRiRNCxJeyAEL6PSH6KuSZP6qkD7urtEMRRuS5q9jC1FqwTBbTyJhcQ693XwpitHQ7nomK8o6arODmCWpR0UNy0lOPjI1sJSxjbtptui4MPi7wLMuDdhLu4Pt8eBTfilzRKU_EWD1cCEm1qGv/s72-c/f1280x720-22246_153921_5050.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-6393039336550176770</id><published>2022-02-04T20:24:00.001-05:00</published><updated>2022-02-04T20:24:57.429-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="contenedores"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="jakarta ee"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="payara"/><title type='text'>Payara + MySQL en contenedores</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vRh3kq3K3f7GUDAWNIEHd_WCF91SNhBFj9-0i1bthLAnCc7YlqqVV_LDvUgif0dZW5XiQNKhoZ2TN51/pub?w=960&amp;amp;h=540&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;180&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vRh3kq3K3f7GUDAWNIEHd_WCF91SNhBFj9-0i1bthLAnCc7YlqqVV_LDvUgif0dZW5XiQNKhoZ2TN51/pub?w=960&amp;amp;h=540&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt; 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.&lt;p&gt;&lt;/p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2022/02/payara-mysql-en-contenedores.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/6393039336550176770/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2022/02/payara-mysql-en-contenedores.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/6393039336550176770'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/6393039336550176770'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2022/02/payara-mysql-en-contenedores.html' title='Payara + MySQL en contenedores'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhNpqbdzN4Bqf6T_DaLs7_d6fmQ95aiKFYCcturX25x1c_q5Vr2H5jYdAVGPXLb0XztEGzPwHWNtRVRELMWN3bgQ0_8n6G8d7Akg3-M0GKeRN2PIz0wiixR0_sGCDl-0f_BeUMHhiS8w1Shu4-FFAJM-PUvxs_vE64lev0t2oJvQVpw41Lh-hpJKIVR=s72-w640-h320-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-3501581319803119854</id><published>2022-01-28T19:36:00.003-05:00</published><updated>2022-01-28T19:36:59.234-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="contenedores"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="liferay"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="openjdk"/><title type='text'>OpenJDK + Liferay + MySQL, en contenedores</title><content type='html'>&lt;p&gt; &lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vQUON2B1xFDnuymWBkZWTsyYM2C8O6whJ_x3hhrehqfRiZ8KiZMU_Ar6rzZs8I7gWOtdp5ZbGTL2kD8/pub?w=1440&amp;amp;h=810&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;113&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vQUON2B1xFDnuymWBkZWTsyYM2C8O6whJ_x3hhrehqfRiZ8KiZMU_Ar6rzZs8I7gWOtdp5ZbGTL2kD8/pub?w=1440&amp;amp;h=810&quot; width=&quot;200&quot;&gt;&lt;/a&gt;&lt;/div&gt;Estamos en el mundo de la &lt;i&gt;contened.. conteneni...contenedoriza&lt;/i&gt;... 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.&lt;p&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2022/01/openjdk-liferay-mysql-en-contenedores.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/3501581319803119854/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2022/01/openjdk-liferay-mysql-en-contenedores.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/3501581319803119854'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/3501581319803119854'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2022/01/openjdk-liferay-mysql-en-contenedores.html' title='OpenJDK + Liferay + MySQL, en contenedores'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgaqGh8VKm6c-zU8WilKQs3qI4ZdL0EOJbZFKdcTrG3fUqbUpCAkUpiLF6MkPsvHPj7yhugP-UhjLYL8X7j6i70xuF_fxhFzPWGzqlPNd6db6FYfi6sKPbCPKJ5pomjOO_HX3qf_8lNcPvmZkOlLhTWIX2BFOwJPVsOPwdlpN4m33U-3xs-1_Gn5TWD=s72-c" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-8311718666721494682</id><published>2021-07-12T18:58:00.000-05:00</published><updated>2021-07-12T18:58:06.775-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="live"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><title type='text'>Hablemos Java - Primer &quot;En vivo&quot; del blog: Streams, Lambdas y otras cosas más</title><content type='html'>&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;Aquí la primera emisión donde hablamos sobre Streams y Lambdas.&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;450&quot; src=&quot;https://www.youtube.com/embed/eA6juXsm92Y&quot; width=&quot;800&quot; youtube-src-id=&quot;eA6juXsm92Y&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/8311718666721494682/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2021/07/hablemos-java-primer-en-vivo-del-blog.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/8311718666721494682'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/8311718666721494682'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2021/07/hablemos-java-primer-en-vivo-del-blog.html' title='Hablemos Java - Primer &quot;En vivo&quot; del blog: Streams, Lambdas y otras cosas más'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/eA6juXsm92Y/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-2820866480321668170</id><published>2020-12-11T09:00:00.001-05:00</published><updated>2020-12-11T09:00:07.257-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microprofile"/><category scheme="http://www.blogger.com/atom/ns#" term="microservicios"/><category scheme="http://www.blogger.com/atom/ns#" term="quarkus"/><title type='text'>Quarkus con NetBeans 12</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vQuKeGq4BNMpqKUD0U_hN1MYSKVAUns1LuDwWq_qP1Bk2x5vimQbbGoMp2oRss4UAg08QJ7d6k8x4s8/pub?w=1440&amp;amp;h=810&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;181&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vQuKeGq4BNMpqKUD0U_hN1MYSKVAUns1LuDwWq_qP1Bk2x5vimQbbGoMp2oRss4UAg08QJ7d6k8x4s8/pub?w=1440&amp;amp;h=810&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;En este vídeo conoceremos un poco de Quarkus, crear una aplicación MicroProfile, y ejecutarlo desde NetBeans.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;375&quot; src=&quot;https://www.youtube.com/embed/mMn3U3_Dehk&quot; width=&quot;452&quot; youtube-src-id=&quot;mMn3U3_Dehk&quot;&gt;&lt;/iframe&gt;
  
  &lt;p&gt;Luego iremos desarrollando más funcionalidades MicroProfile en este proyecto de Quarkus&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/2820866480321668170/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2020/12/quarkus-con-netbeans-12.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/2820866480321668170'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/2820866480321668170'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2020/12/quarkus-con-netbeans-12.html' title='Quarkus con NetBeans 12'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/mMn3U3_Dehk/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-5569709568246369857</id><published>2020-04-09T22:35:00.005-05:00</published><updated>2022-01-27T16:09:09.190-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="rendimiento"/><title type='text'>Midiendo el rendimiento de rutinas </title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vSwgB10eTI90vEFdB4aQHmnnaGy324JzXQRIuSylrrUHgZfhe7tyIy-eHyGcG2usHkXfm9erpNmKj1-/pub?w=960&amp;amp;h=540&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;180&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vSwgB10eTI90vEFdB4aQHmnnaGy324JzXQRIuSylrrUHgZfhe7tyIy-eHyGcG2usHkXfm9erpNmKj1-/pub?w=960&amp;amp;h=540&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;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:&lt;/div&gt;&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p dir=&quot;ltr&quot; lang=&quot;es&quot;&gt;&lt;a href=&quot;https://twitter.com/hashtag/CodeReviewChallenge?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#CodeReviewChallenge&lt;/a&gt;&lt;br&gt;&lt;br&gt;A ver, cómo optimizarían este código (que encontré)? &lt;a href=&quot;https://t.co/PUWZy0erpG&quot;&gt;pic.twitter.com/PUWZy0erpG&lt;/a&gt;&lt;/p&gt;— ☕ Apuntes de Java ☕ 😷🏠 (@apuntesdejava) &lt;a href=&quot;https://twitter.com/apuntesdejava/status/1247284131513470982?ref_src=twsrc%5Etfw&quot;&gt;April 6, 2020&lt;/a&gt;&lt;/blockquote&gt; &lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;https://platform.twitter.com/widgets.js&quot;&gt;&lt;/script&gt; &lt;hr&gt;&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p dir=&quot;ltr&quot; lang=&quot;es&quot;&gt;&lt;a href=&quot;https://twitter.com/hashtag/CodeReviewChallenge?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#CodeReviewChallenge&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/QuedateEnCasa?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#QuedateEnCasa&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/StayHome?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#StayHome&lt;/a&gt; &lt;br&gt;¿Cómo simplificarían el contenido de este método? (sin usar bibliotecas adicionales) &lt;a href=&quot;https://t.co/rfRn8Qb2Ga&quot;&gt;pic.twitter.com/rfRn8Qb2Ga&lt;/a&gt;&lt;/p&gt;— ☕ Apuntes de Java ☕ 😷🏠 (@apuntesdejava) &lt;a href=&quot;https://twitter.com/apuntesdejava/status/1247565151219351559?ref_src=twsrc%5Etfw&quot;&gt;April 7, 2020&lt;/a&gt;&lt;/blockquote&gt; &lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;https://platform.twitter.com/widgets.js&quot;&gt;&lt;/script&gt; &lt;hr&gt;&lt;div&gt;He recibido respuestas interesantes. &lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.apuntesdejava.com/2020/04/midiendo-el-rendimiento-de-rutinas.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/5569709568246369857/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2020/04/midiendo-el-rendimiento-de-rutinas.html#comment-form' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/5569709568246369857'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/5569709568246369857'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2020/04/midiendo-el-rendimiento-de-rutinas.html' title='Midiendo el rendimiento de rutinas '/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/3VMdCflryiY/default.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-4694195721007714127</id><published>2020-02-04T11:51:00.001-05:00</published><updated>2020-02-04T11:51:51.203-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="liferay"/><category scheme="http://www.blogger.com/atom/ns#" term="portales"/><category scheme="http://www.blogger.com/atom/ns#" term="portlets"/><category scheme="http://www.blogger.com/atom/ns#" term="tutorial"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Liferay 7.2. Service Layer + Portlet. Un CRUD básico</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vS9xw2cEtjbvK9hV2JSEATTxi5--5ZA09r3NYjrmu8Ztf3_9-igOogL9omMvIR-7fOk3RV93W7F88bk/pub?w=1440&amp;amp;h=810&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;180&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vS9xw2cEtjbvK9hV2JSEATTxi5--5ZA09r3NYjrmu8Ztf3_9-igOogL9omMvIR-7fOk3RV93W7F88bk/pub?w=1440&amp;amp;h=810&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;
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.&lt;br&gt;
&lt;a href=&quot;https://www.apuntesdejava.com/2020/02/liferay-72-service-layer-portlet-un.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/4694195721007714127/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2020/02/liferay-72-service-layer-portlet-un.html#comment-form' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/4694195721007714127'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/4694195721007714127'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2020/02/liferay-72-service-layer-portlet-un.html' title='Liferay 7.2. Service Layer + Portlet. Un CRUD básico'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/OIPS8YAuBo0/default.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-2612967228269627583</id><published>2019-12-10T17:51:00.000-05:00</published><updated>2019-12-10T17:58:15.040-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="liferay"/><title type='text'>Liferay 7.2. Service Layer - Consultas personalizadas</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vSLY-6cWrne9MeYlKSeIBIekbN77ZfwWb-Lw4JnQSKq8dtwW2Kz2tVo89LCn-tP2T2FsikQ8fEyOp91/pub?w=1440&amp;amp;h=810&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;180&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vSLY-6cWrne9MeYlKSeIBIekbN77ZfwWb-Lw4JnQSKq8dtwW2Kz2tVo89LCn-tP2T2FsikQ8fEyOp91/pub?w=1440&amp;amp;h=810&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;
Hasta el momento hemos creado consultas simples, como listar todos los registros con un campo u otro campo iguales.&lt;br&gt;
&lt;br&gt;
Pero necesitamos que nuestros registros puedan ser leídos con cualquier combinación de los cambios.&lt;br&gt;
&lt;br&gt;
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 &lt;code&gt;DynamicQuery&lt;/code&gt;, y es lo que veremos en este post.&lt;br&gt;
&lt;a href=&quot;https://www.apuntesdejava.com/2019/12/liferay-72-service-layer-consultas.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/2612967228269627583/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2019/12/liferay-72-service-layer-consultas.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/2612967228269627583'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/2612967228269627583'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2019/12/liferay-72-service-layer-consultas.html' title='Liferay 7.2. Service Layer - Consultas personalizadas'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/tfXnlPcb6xw/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-8448372363421521092</id><published>2019-12-10T13:45:00.001-05:00</published><updated>2019-12-10T14:01:18.011-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jakarta ee"/><category scheme="http://www.blogger.com/atom/ns#" term="jwt"/><category scheme="http://www.blogger.com/atom/ns#" term="microprofile"/><category scheme="http://www.blogger.com/atom/ns#" term="payara"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad"/><title type='text'>Presentando MP Lemon Builder</title><content type='html'>Aquí les presento la primera versión de mi aplicación &lt;a href=&quot;https://github.com/apuntesdejava/mp-lemon-builder&quot; target=&quot;_blank&quot;&gt;MP Lemon Builder&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSaTM9whmP9UO9mTq0ssMucIN2FRNPrwtXWbOmJywim_h3xkq5CfdXCEifTxAqmgaYoLsXoapgo90QaRObsvFS-dGsK5sMDrvKe4lWfc6rqtXyNjolPV-uet3NH6L2-vM-mn2TiY0fG_w/s1600/logo-microprofile-500x500.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;500&quot; data-original-width=&quot;500&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSaTM9whmP9UO9mTq0ssMucIN2FRNPrwtXWbOmJywim_h3xkq5CfdXCEifTxAqmgaYoLsXoapgo90QaRObsvFS-dGsK5sMDrvKe4lWfc6rqtXyNjolPV-uet3NH6L2-vM-mn2TiY0fG_w/s200/logo-microprofile-500x500.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
¿En qué consiste?&lt;/h3&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Aquí muestro un vídeo de cómo funciona.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/AafDYt4uF0M&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
&lt;h3&gt;
Fuentes&lt;/h3&gt;
Esta aplicación está basada en dos proyectos:
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;La publicación de Victor Orozco: &lt;a href=&quot;https://vorozco.com/blog/2019/2019-10-02-MicroProfile-JWT-Token-Provider-Servlet.html&quot; target=&quot;_blank&quot;&gt;A simple MicroProfile JWT token provider with Payara realms and JAX-RS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jwtenizr.sh/&quot; target=&quot;_blank&quot;&gt;JWT dispenser&lt;/a&gt; de &lt;a href=&quot;http://www.adam-bien.com/roller/abien/entry/authentication_and_authorization_with_jwt&quot; target=&quot;_blank&quot;&gt;Adam Bien&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
¿Por qué &quot;Lemon&quot;?&lt;/h3&gt;
Porque me gustan las frutas, y el limón es una de mis preferidas.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://imgflip.com/gif/3gdg6k&quot;&gt;&lt;img src=&quot;https://i.imgflip.com/3gdg6k.gif&quot; title=&quot;made at imgflip.com&quot; /&gt;&lt;/a&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/8448372363421521092/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2019/12/presentando-mp-lemon-builder.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/8448372363421521092'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/8448372363421521092'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2019/12/presentando-mp-lemon-builder.html' title='Presentando MP Lemon Builder'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSaTM9whmP9UO9mTq0ssMucIN2FRNPrwtXWbOmJywim_h3xkq5CfdXCEifTxAqmgaYoLsXoapgo90QaRObsvFS-dGsK5sMDrvKe4lWfc6rqtXyNjolPV-uet3NH6L2-vM-mn2TiY0fG_w/s72-c/logo-microprofile-500x500.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-4928850879912011906</id><published>2019-11-06T18:16:00.003-05:00</published><updated>2019-11-06T18:20:00.661-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jakarta ee"/><category scheme="http://www.blogger.com/atom/ns#" term="jaxrs"/><category scheme="http://www.blogger.com/atom/ns#" term="microprofile"/><category scheme="http://www.blogger.com/atom/ns#" term="restful"/><title type='text'>Cliente Standalone de JAX-RS (o cualquier endpoint RESTful)</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vTJ5kV7fhzmK-n7ayHEnzOpRyS9LOdFHtkuNN7ePSauowBaSrI6iSvBX3QqW3ehUzN38v9-bfyOXnkv/pub?w=960&amp;amp;h=600&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;500&quot; data-original-width=&quot;800&quot; height=&quot;200&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vTJ5kV7fhzmK-n7ayHEnzOpRyS9LOdFHtkuNN7ePSauowBaSrI6iSvBX3QqW3ehUzN38v9-bfyOXnkv/pub?w=960&amp;amp;h=600&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public class RestClient {
  
    private static final String REST_URI 
      = &quot;http://localhost:8082/spring-jersey/resources/employees&quot;;
  
    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);
    }
    //...
}&lt;/pre&gt;
&lt;br /&gt;
(Tomado de &lt;a href=&quot;https://www.baeldung.com/jersey-jax-rs-client&quot;&gt;https://www.baeldung.com/jersey-jax-rs-client&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
Lo cual no está mal, pero creo que debería ser lo más transparente posible. ¿Cómo es eso?&lt;br /&gt;
Si ven en la línea 13 del código anterior, significa que hay que decirle que haga un &lt;code&gt;GET&lt;/code&gt; 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 hacer otras peticiones como &lt;code&gt;POST&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;, etc.&lt;br /&gt;
&lt;br /&gt;
Pues aquí vengo con una solución que encontré revisando la documentación de JAX-RS.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
El servidor&lt;/h2&gt;
&lt;div&gt;
Para este ejemplo, he creado un pequeño servidor CRUD en Payara Micro, el cual puedes obtener su código aquí:&amp;nbsp;&lt;a href=&quot;https://github.com/apuntesdejava/demo-jaxrs-standalone/tree/master/demo-jaxrs-server&quot;&gt;https://github.com/apuntesdejava/demo-jaxrs-standalone/tree/master/demo-jaxrs-server&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
El Endpoint principal es este:&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:java;first-line:38&quot;&gt;
@Path(&quot;person&quot;)
@Produces(APPLICATION_JSON)
@Consumes(APPLICATION_JSON)
@ApplicationScoped
public class PersonEndpoint {

    @Inject
    private PersonRepository personRepository;

    @POST
    public Response create(PersonParam param) {
        Person p = personRepository.create(param.getName(), param.getEmail());
        return Response.ok(p).build();
    }

    @GET
    public Response list() {
        List&amp;lt;Person&amp;gt; list = personRepository.findAll();
        return Response.ok(list).build();
    }
    
    @DELETE
    @Path(&quot;{id}&quot;)
    public Response delete(@PathParam(&quot;id&quot;)long personId){
        personRepository.delete(personId);
        return Response.ok().build();
    }

}
&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
El cual tiene tres métodos principales:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@POST&lt;/code&gt; &lt;code&gt;create()&lt;/code&gt; para insertar registros&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@GET&lt;/code&gt; &lt;code&gt;list()&lt;/code&gt; para leer todos los registros&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@DELETE&lt;/code&gt; &lt;code&gt;delete()&lt;/code&gt; para borrar un registro&lt;/li&gt;
&lt;/ul&gt;
Una manera para probarlo es ejecutándolo y llamando desde un cliente:
&lt;br /&gt;
&lt;br /&gt;
Insertando un registro:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1CZGhlqDh9P86fnOd6PD5h_eMAg4FVBQ9WzqIz3RoY53N5U2nqx88u62aFbUTRP3Kj4SsdAtQG7YQIWie6cwVbQjD_Dn5I_WxMRPgA-QkM214dgH4Jcsb0YEo_iDewc-Te8n7Qiyvg9g/s1600/2019-11-06_17-40-37.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;273&quot; data-original-width=&quot;705&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1CZGhlqDh9P86fnOd6PD5h_eMAg4FVBQ9WzqIz3RoY53N5U2nqx88u62aFbUTRP3Kj4SsdAtQG7YQIWie6cwVbQjD_Dn5I_WxMRPgA-QkM214dgH4Jcsb0YEo_iDewc-Te8n7Qiyvg9g/s1600/2019-11-06_17-40-37.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Listando los registros:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgonJm_sdGw6ViQVK1iiJkJ5FuCBSCS4Tgj9HaqtwU1r63ITFhPRB7bGhktKnZw_ucL7M1_3D9Nwcj5NAEFdzo5X0bTfxkjqbnm3fqyH0LkkO0w9ohIavrklLGdmYul2D5DAIiygruq_CY/s1600/2019-11-06_17-43-17.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;274&quot; data-original-width=&quot;554&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgonJm_sdGw6ViQVK1iiJkJ5FuCBSCS4Tgj9HaqtwU1r63ITFhPRB7bGhktKnZw_ucL7M1_3D9Nwcj5NAEFdzo5X0bTfxkjqbnm3fqyH0LkkO0w9ohIavrklLGdmYul2D5DAIiygruq_CY/s1600/2019-11-06_17-43-17.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Borrando ese registro (en mi caso, el 97)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUfe28VLbO91tDvI1c5yRx8cQTaICYuXCxNpOA2jYDSXlDcebeEoQiDfv-UodrITljR8MNfMsnwTJj237VWl5td6exTJORDqpDeTCXaOw_kcMBvIjgCgLra89S02os89g292ZguvXs9N8/s1600/2019-11-06_17-44-30.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;376&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUfe28VLbO91tDvI1c5yRx8cQTaICYuXCxNpOA2jYDSXlDcebeEoQiDfv-UodrITljR8MNfMsnwTJj237VWl5td6exTJORDqpDeTCXaOw_kcMBvIjgCgLra89S02os89g292ZguvXs9N8/s1600/2019-11-06_17-44-30.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;
El Cliente&lt;/h2&gt;
En el cliente tiene que existir un método que luzca igual que la clase del endpoint servidor para que sea &quot;transparente&quot; la invocación.
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java;first-line:33&quot;&gt;
@Path(&quot;person&quot;)
@Produces(APPLICATION_JSON)
@Consumes(APPLICATION_JSON)
public interface PersonEndpoint {

    @POST
    Response create(PersonParam param);

    @GET
    Response list();

    @DELETE
    @Path(&quot;{id}&quot;)
    Response delete(@PathParam(&quot;id&quot;) long personId);
}

&lt;/pre&gt;

Pero esto tiene un tratamiento muy especial: no es una clase, es una interfaz. Aquí es lo divertido ¿cómo es que lo podrá identificar cada petición? Pues esta es la magia del cliente JAX-RS.&lt;br /&gt;
&lt;br /&gt;
Hay varios clientes de JAX-RS, algunos son:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;RestEasy:&amp;nbsp;https://github.com/resteasy/resteasy-examples/tree/3.6.0.Final/jaxrs-2.0/simple-client&lt;/li&gt;
&lt;li&gt;Quarkus:&amp;nbsp;https://quarkus.io/guides/rest-client&lt;/li&gt;
&lt;li&gt;Apache CXF:&amp;nbsp;&lt;a href=&quot;https://cxf.apache.org/&quot;&gt;https://cxf.apache.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Aquí usaré el Apache CXF. Independientemente puede usarse cualquier implementación, pero seguirá siendo la misma interfaz. Solo cambia cómo se invoca al Endpoint del Cliente.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Así se construye usando Apache CXF:&lt;/div&gt;
&lt;pre class=&quot;brush:java;first-line:40&quot;&gt;        PersonEndpoint client = JAXRSClientFactory.create(
                REST_URI,
                PersonEndpoint.class,
                Arrays.asList(
                        new JacksonJaxbJsonProvider()
                ));
&lt;/pre&gt;
&lt;br /&gt;
Luego, se llama como si fuera cualquier método &quot;local&quot;:
&lt;br /&gt;
&lt;pre class=&quot;brush:java;first-line:48&quot;&gt;        PersonParam param = new PersonParam(&quot;persona 1&quot;, &quot;abc@mail.com&quot;); //creo los parámetros
        Response resp = client.create(param); //invoco al endpoint
        LOG.log(Level.INFO, &quot;status:{0}&quot;, resp.getStatusInfo().getReasonPhrase()); //muestro la respuesta
        if (resp.getStatus() == Response.Status.OK.getStatusCode()) { //si está ok...
            Person p = resp.readEntity(Person.class); //.. convierto la petición en la entidad que se recibió...
            LOG.log(Level.INFO, &quot;-&amp;gt; registro insertado:{0}&quot;, p.toString()); //... y muestro el contenido
        }
&lt;/pre&gt;
&lt;br /&gt;
Si deseamos listar, también se haría lo mismo:&lt;br /&gt;
&lt;pre class=&quot;brush:java;first-line:57&quot;&gt;        resp = client.list(); //invocamos el método de listado
        LOG.log(Level.INFO, &quot;status:{0}&quot;, resp.getStatusInfo().getReasonPhrase()); //mostramos el resultado...
        List&amp;lt;Person&amp;gt; list = null;  //preparamos nuestra lista que vamos a recibir
        if (resp.getStatus() == Response.Status.OK.getStatusCode()) { //evaluamos el contenido... si está OK...
            list = resp.readEntity(new GenericType&amp;lt;List&amp;lt;Person&amp;gt;&amp;gt;() {  //... convertimos la petición en el listado
            });
            list.forEach((p) -&amp;gt; { //... y podemos listar el contenido.
                LOG.log(Level.INFO, &quot;id:{0}\tname:{1}\temail:{2}&quot;, new Object[]{p.getPersonId(), p.getName(), p.getEmail()});
            });
        }
&lt;/pre&gt;
&lt;h2&gt;
Código fuente&lt;/h2&gt;
El código fuente para este proyecto se puede encontrar aquí:
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/apuntesdejava/demo-jaxrs-standalone&quot;&gt;https://github.com/apuntesdejava/demo-jaxrs-standalone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bitbucket.org/apuntesdejava/demo-jaxrs-standalone/&quot;&gt;https://bitbucket.org/apuntesdejava/demo-jaxrs-standalone/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/4928850879912011906/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2019/11/cliente-standalone-de-jax-rs-o.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/4928850879912011906'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/4928850879912011906'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2019/11/cliente-standalone-de-jax-rs-o.html' title='Cliente Standalone de JAX-RS (o cualquier endpoint RESTful)'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1CZGhlqDh9P86fnOd6PD5h_eMAg4FVBQ9WzqIz3RoY53N5U2nqx88u62aFbUTRP3Kj4SsdAtQG7YQIWie6cwVbQjD_Dn5I_WxMRPgA-QkM214dgH4Jcsb0YEo_iDewc-Te8n7Qiyvg9g/s72-c/2019-11-06_17-40-37.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-393011451565246885</id><published>2019-10-12T12:22:00.001-05:00</published><updated>2019-10-12T12:27:54.258-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="otj"/><category scheme="http://www.blogger.com/atom/ns#" term="tutorial"/><category scheme="http://www.blogger.com/atom/ns#" term="tutorial java"/><title type='text'>Otro tutorial de Java: Sesión 3 - Tipos de variables y cómo nombrarlas</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vRNpdTG7RVNNzTq4g5p3R-JbRflTUUdHV6sfCeODbFE4q0Bxdu1jBbeFkwknmdQMyQ2m48CR9uLC_4z/pub?w=1440&amp;amp;h=810&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;180&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vRNpdTG7RVNNzTq4g5p3R-JbRflTUUdHV6sfCeODbFE4q0Bxdu1jBbeFkwknmdQMyQ2m48CR9uLC_4z/pub?w=1440&amp;amp;h=810&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
Las variables, cuáles son sus tipos, y cómo se deberían declarar.


&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href=&quot;https://www.apuntesdejava.com/2019/10/otro-tutorial-de-java-sesion-3-tipos-de.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/393011451565246885/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2019/10/otro-tutorial-de-java-sesion-3-tipos-de.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/393011451565246885'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/393011451565246885'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2019/10/otro-tutorial-de-java-sesion-3-tipos-de.html' title='Otro tutorial de Java: Sesión 3 - Tipos de variables y cómo nombrarlas'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/69qnsdOyVAw/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-8914047417477315751</id><published>2019-10-12T12:21:00.001-05:00</published><updated>2019-10-12T12:26:50.018-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="otj"/><category scheme="http://www.blogger.com/atom/ns#" term="tutorial"/><category scheme="http://www.blogger.com/atom/ns#" term="tutorial java"/><title type='text'>Otro tutorial de Java: Sesión 2 - Teoría OOP y aplicación en Java</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vRe-oO2NHxuwW8EqfQsjFNEsJUC5c5PqTk6WuhCZT_CsDVfxxK3IDXvC6O3IMohGYMTIlaCGwv_xvsB/pub?w=1440&amp;amp;h=810&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;180&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vRe-oO2NHxuwW8EqfQsjFNEsJUC5c5PqTk6WuhCZT_CsDVfxxK3IDXvC6O3IMohGYMTIlaCGwv_xvsB/pub?w=1440&amp;amp;h=810&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
Comenzaremos un poco con la teoría de Objetos, y veremos cómo se aplica en Java.


&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href=&quot;https://www.apuntesdejava.com/2019/10/otro-tutorial-de-java-sesion-2-teoria.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/8914047417477315751/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2019/10/otro-tutorial-de-java-sesion-2-teoria.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/8914047417477315751'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/8914047417477315751'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2019/10/otro-tutorial-de-java-sesion-2-teoria.html' title='Otro tutorial de Java: Sesión 2 - Teoría OOP y aplicación en Java'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/TjpgGEtRYGg/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8553642737291298841.post-8136713025854827507</id><published>2019-10-12T12:19:00.001-05:00</published><updated>2019-10-12T12:25:12.781-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="otj"/><category scheme="http://www.blogger.com/atom/ns#" term="tutorial"/><category scheme="http://www.blogger.com/atom/ns#" term="tutorial java"/><title type='text'>Otro tutorial de Java: Sesión 1 - Instalación de entorno y primer programa</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vTLXSUbKnBkALC9tNiHREKb-lrgTavscgUaajIUMk8x7m3tTKIBLLYfjI28Ycz2AEEyeFBuw-11dBa-/pub?w=1440&amp;amp;h=810&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;180&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vTLXSUbKnBkALC9tNiHREKb-lrgTavscgUaajIUMk8x7m3tTKIBLLYfjI28Ycz2AEEyeFBuw-11dBa-/pub?w=1440&amp;amp;h=810&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
Comenzaremos una nueva serie de videos tutoriales llamado: &lt;b&gt;OTRO TUTORIAL DE JAVA

&lt;/b&gt;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href=&quot;https://www.apuntesdejava.com/2019/10/otro-tutorial-de-java-sesion-1.html#more&quot;&gt;Leer el artículo completo »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.apuntesdejava.com/feeds/8136713025854827507/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='https://www.apuntesdejava.com/2019/10/otro-tutorial-de-java-sesion-1.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/8136713025854827507'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8553642737291298841/posts/default/8136713025854827507'/><link rel='alternate' type='text/html' href='https://www.apuntesdejava.com/2019/10/otro-tutorial-de-java-sesion-1.html' title='Otro tutorial de Java: Sesión 1 - Instalación de entorno y primer programa'/><author><name>Diego Silva Límaco</name><uri>http://www.blogger.com/profile/04931472375833223136</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoZc2_Bv2mAeKfsVEAj-bTxaZicv8tofdzwwMMLh-PNuYTydkCr-Zu7AThYtvmJvWs1IxlNLt4HgVGBvNvFlBXb0d_QFO4qwkCN4Pn9JKvOkXEKSb522ba_5RZyK9CA/s113/yo-2012-02-20.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/wenGzuPvbw0/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>