Translate

Mostrando entradas con la etiqueta CesarHernandezGT. Mostrar todas las entradas
Mostrando entradas con la etiqueta CesarHernandezGT. Mostrar todas las entradas

sábado, 30 de enero de 2016

Organizando Class Loaders en Apache Tomcat


El dilema

Cuando se están diseñando aplicaciones Java que serán desplegadas en un Servlet Container, Web Profile o full JavaEE Application server, se puede llegar a la necesidad de utilizar dependencias (.jars) que no son parte de la especificación estandard y por consiguiente entrar en el dilema: 
  1. Que el empaquetado (.war) incluya dicha(s) dependencia(s). Comúnmente utilizando un sistema gestor de dependencias como por ejemplo maven y su scope: compile.
  2. Que la(s) dependencia(s) se encuentre(n) en el container donde la aplicación será desplegada. En maven utilizando el scope: provided para evitar que el gestor de dependencia incluya los jars dentro del empaquetado.

Seleccionando una solución

Seleccionando para el resto de este artículo la opción número 2 y tomando como ejemplo el Servlet Container más famoso de mundo, Apache Tomcat, a continuación listo algunas de las ventajas y desventajas de dicho enfoque:

Ventajas:
  • Optimización de espacio de disco duro en el sistema host de la instalación de Tomcat
  • Estandarización en los ambientes de deployment
  • Empaquetados (.war) con menor tamaño que contribuyen a reducir tiempos en pipelines de Integración y Entrega continua.
  • Útil cuando lo que se promueve entre ambientes es el artefacto (.war) y no el código fuente.
Desventajas:
  • La instalación de tomcat empieza a convertirse en una personalizada y no estándar.
  • Requiere que tanto los ambientes locales de desarrollo como los diferentes ambientes de producción estén sincronizados con la última versión personalizada de Tomcat.
  • Cambios en una dependencia es replicable para todas las aplicaciones desplegadas en la instancia de Tomcat y si estas poseen diferentes arquitecturas se tendrá que tomar una decisión de no realizar el cambio o desplegar las aplicaciones incompatibles en otra instancia de tomcat. el resultado final será una nueva instancia personalizada.

Class Loaders 101 en apache Tomcat

Acorde a la documentación oficial tomcat provee 3 jerarquías de Class Loaders:
  • Bootstrap: Carga las clases básicas de ejecución provistas en los jars de la JRE que utiliza la instancia de Tomcat.
  • System: Se inicializa a partir del contenido de la variable de ambiente classpath.
  • Common: Carga clases adicionales que normalmente se encuentran en jars ubicados en: $CATALINA_HOME/lib
  • Webapp: Para cada aplicación desplegada tomcat crea un class loader que carga clases ubicadas en /WEB-INF/classes  y clases dentro de jars ubicados en /WEB-INF/lib
La figura 1 describe la jerarquía:
      Bootstrap
          |
       System   
          |
       Common
       /     \
  Webapp1   Webapp2 ...
Figura 1.


La Figura 2 describe el orden por default de class loaders que una aplicación desplegada enTomcat 9 utiliza en orden ascendente:
                 Bootstrap (1)
                      |
                    System (4)  
                      |
                    Common (5)
                      |    
                   WebappX
                 /         \
/WEB-INF/classes (2)     /WEB-INF/lib/*.jar (3)
Figura 2.

Iniciando a implementar la solución

Un primer enfoque que en muchos tutoriales realizan con los JDBC Drivers es posicionar los jars en la carpeta: $CATALINA_HOME/lib. Esto hará que el class loader Common incluya dichas dependencias en el orden y jerarquías especificados en las figura 2.

Optimizando la solución

Por simple lógica se pude observar en la Figura 1. que tanto System como Common  ponen a disposición de las aplicaciones las clases que cada uno carga, sin embargo la recomendación es que no utilicemos Common (por ende la ubicación $CATALINA_HOME/lib) para exponer clases de jars que queremos compartir entre las aplicaciones desplegadas en la instancia de Tomcat.

Un enfoque recomendado es posicionar las clases y/o dependencias necesarias en los directorios:
$CATALINA_HOME/shared/lib y
$CATALINA_HOME/shared/classes

Quedando como último paso indicarle a tomcat que tome en consideración las rutas anteriormente descritas para que este nuevo class loader (shared) sea tomando en consideración luego de common. Para realizar esto debemos de editar el archivo: 
$CATALINA_HOME/conf/catalina.properties

y dentro del archivo especificar las rutas en:
shared.loader="${catalina.base}/shared/classes","${catalina.base}/shared/lib/*.jar"

martes, 8 de diciembre de 2015

I'm part of the OTN Speaker Bureau


OTN Speaker Bureau

I'm glad to inform you that I was accepted to be part of the Oracle Technology Network Speaker Bureau :). 

The Speaker Bureau is a new place where you can find, connect and request topnotch speakers from the IT Industry around the world including Oracle employees and community members such as Oracle ACEs, Java Champions, and other community evangelists. 

This resource is a excellent way in which conference planners, event organizers, journalists,  Java and Oracle communities and the general public can find and request expert speakers according with area of expertise, geographic location, languages spoken, certifications, and other criteria.

My Bureau profile page:
https://community.oracle.com/people/cesarHernandezGT?customTheme=osb

OTN Speaker Bureau home page
https://community.oracle.com/community/otn-speaker-bureau




[Español]
Me alegra informarles que fui aceptado para formar parte de laOracle Technology Network Speaker Bureau :).

Speaker Bureau es un nuevo lugar donde se puede encontrar, conectar y solicitar conferencistas de primera categoría en la industria de TI al rededor del mundo. Incluye a los empleados de Oracle y miembros de la comunidad, tales como Oracle ACE, Java Champions, y otros evangelistas de la comunidad Oracle y Java.

Este recurso es una excelente manera en la que los planificadores de conferencias, organizadores de eventos, periodistas, comunidades de Java y Oracle así como el público en general pueden encontrar y solicitar conferencistas expertos de acuerdo con el área de especialización, ubicación geográfica, idioma, certificaciones y otros criterios.

lunes, 16 de noviembre de 2015

JavaOne 2015 Recap


This year JavaOne came, as usually, with a lot of surprises, experiences and lessons learned. One thing that is for sure is the fact that JavaOne has a huge community soul that is and will last as long as we  (the communities) continue contributing to it.

One of the best moments regarding  Java 20th anniversary celebration was the  clever  Java Community Keynote leaded by Stephen Chin. It's incredible how a technology has evolve over 20 years and be today  stronger than ever before.  I'm glad to be part of a tiny portion of those 20 years and also thankful for all the good friends that I have in my country and all over the world because of this passion for technology.

The Java Hub was a great place with a lot of interesting wearables/IoT projects, robotics, 3D Printing and with collaboration spaces like hackergarten, Night Hacking interviews and much more. I was able to catch up updates about OpenJdk, some JSR's and others Open Source Projects.  I also had the chance to promote the JEspañol community that aims to generate synergy among the Latin American Java User Groups whose main language is Spanish.

Besides my Rock Code And Roll participation, this year I focused on attending conferences and hands on labs related with Containers orchestration, micro/pico/nano services (you name it) and Java EE. I'll do my best to reserve some time to post some tips and tricks related with this topics over the following months.

Here you can find a index of resources to catch up about the conferences, keynotes, interviews and complementary materials:

Finally, I want to thanks to Deiby Gomez, Nichole Scott, Heather VanCura, The Null Pointers (Freddy Guime, Frank Greco, Ed Burns, Mattias Karlsson, Zoran Sevarac, Peter Pilgrim, Hiroshi), Andres Almiray,  Ixchel Ruiz, Alexis López and Bruno Borges for their support that was crucial for me to be able to attend and be actively involved in the conference.



 Photo Gallery
Photo Gallery

miércoles, 11 de noviembre de 2015

Nos vemos en JavaDay Guatemala 2015





Confirmada mi participación para el evento Java más grande de Centroamérica: Java Day Guatemala 2015. Este año estaré compartiendo con los asistentes la conferencia: "Mejorando la productividad en proyectos Java EE con CI y CD".

Felicitaciones al equipo de GuateJUG por el esfuerzo que han realizado y el poder ofrecer por quinto año consecutivo un punto de encuentro entre profesionales, estudiantes, sectore privados y públicos en general para hablar, debatir y descubrir sobre Java y sus tecnologías.

La información general y registro del evento: http://www.guate-jug.net/javaday2015/

miércoles, 21 de octubre de 2015

Rock code and Roll at JavaOne 2015



This year I'm going to be participating again in an active way at JavaOne 2015.

I'll be hacking some code and making some noise:

  •  Hackergarten on Tuesday noon hacking some code with the Open Source Project tFactory
  • Live interview with Oracle Technology Network on Tuesday afternoon presenting the Spanish spoken communities initiative called JEspañol.
  • Playing guitar, drums, singing and applauding  with the Java Community Band The Null Pointers.

This year my forum proposal was rejected but next year It will be another chance to apply for a presentation ;).


Stay tuned for updates and feel free of reach me out if you happen to be at JavaOne, OpenWorld or virtually on my channels.

miércoles, 7 de octubre de 2015

Mi presentación sobre Java Profiling con Java Mission Control


El día de hoy 7 octubre 2015 tuve el agrado de compartir el HangOut sobre Java Profiling con Java Mission Control. Agradesco a Diego Silva @diegosilval por la invitación a colaborar con Apuntes de Java @puntesdejava.

Este HangOut es parte de la interacción que estamos promoviendo con @EventosJEspanol en los JUGs (Java User Groups) de habla hispana.

jueves, 10 de septiembre de 2015

Call for proposals Java Day Guatemala 2015



GuateJUg

El Grupo de Usuarios Java de Guatemala -GuateJUG- invita a todos aquellos interesados a compartir su conocimiento mediante conferencias para publico principiante, intermedio y avanzado en el próximo Java Day Guatemala a  llevarse a cabo el Sábado 14 de Noviembre de 2015.

Java Day Guatemala es la conferencia Java más grande de Centroamérica, durante cinco ediciones hemos construido un punto de encuentro para desarrolladores, arquitectos, industria y entusiastas  de la tecnología Java en Guatemala, Centroamérica y audiencia de habla hispana.

¿Tienes algo interesante que deseas compartir con la comunidad?, ¿Innovaciones implementadas en Java?, ¿Casos de éxito en Java?. Nosotros y los asistentes del Java Day queremos saber de ti.


miércoles, 26 de agosto de 2015

JavaOne 2015 a la vuelta de la esquina




El catálogo de sesiones para JavaOne 2015 a realizarse del 56 al 29 de Octubre ya ha sido publicado!. Este año los tracks principales son:
  • Core Java Platform
  • Java and Security
  • Emerging Languages
  • Java, DevOps, and the Cloud
  • Java and the Internet of Things
  • Java and Server-Side Development
  • Java Clients and User Interfaces
  • Java Development Tools and Agile Techniques
Inscripciones que se realicen antes del 30 de Agosto tienen descuento automático.  Este evento destaca charlas relacionadas a la evolución y estado actual de las tecnologías Java en su aniversario No. 20.

OTN, JCP y los Grupos de Usuarios Java ofrecerán diferentes actividades de interacción entre expertos y principiantes de las tecnologías Java, lo cual hace de este evento el lugar indicado obtener el máximo beneficio de información y conocimiento.

sábado, 15 de agosto de 2015

OTN América Latina Tour 2015 Guatemala



El lunes 17 de Agosto se llevará a cabo en Guatemala la edición 2015 del Oracle Technology Network Tour con la participación de expertos internacionales en Bases de Datos, Virtualización, Middleware Oracle y Java.

Por tercer año consecutivo estaré representando a Guatemala, este año el título de mi conferencia es: "Incrementando la productividad y agilidad de proyecto Java Enterprise con Integración y Entrega continua".

Agradesco de nuevo la oportunidad de se parte de este evento a Oracle Technology Network Latinoamérica y al grupo de usuarios Oracle de Guatemala -GOUG- presidido por el primer Oracle Ace Director de  Guatemala Deiby Gómez.

Link con toda la información:
https://community.oracle.com/community/other-languages/portuguese/otn-lad-tour/guatemala

viernes, 10 de julio de 2015

Hangout sobre Java Mission Control (spanish)





Recientemente fui invitado por el Grupo de Usuarios Java de Cali – CLOJUG como parte de la interacción que estamos promoviendo @EventosJEspanol en los JUGs (Java User Groups) de habla hispana. 

El tema que desarrollé fue sobre Monitoreo, Profiling y Administración de aplicaciones Java y la presentación de Java Mission Control. 



sábado, 25 de abril de 2015

Java Applet con anotación de deprecated por Google Chrome y Spartan



Y si la problemática de las actualizaciones de seguridad para Java Applets no fueron suficientes en el 2014, este 2015 vuelve a ser titulares las noticias de que Google Chrome planifica para finales del 2015 dejar de tener soporte para NPAP.

Los Applets tienen un impacto directo es esta decisión debido a que estos dependen  de la arquitectura provista de NPAP. Por si fuera poco,  el navegador de Microsoft llamado Spartan también deslumbra un futuro similar al de chrome.

La repuesta oficial de Oracle es que a partir de la versión de Google Chrome 42, NPAP puede ser habilitado nuevamente, sin embargo "recomiendan" utilizar alternativas a Google Chrome como Firefox, "Internet Explorer" y Safari.  :|.

Sin duda alguna, Java le debe mucho al Applet dado que acorde a la historia fue la primera incursión del lenguaje dentro de la Web. Sin embargo Java como tecnología actualmente ha demostrado que sigue creciendo y evolucionando de manera exponencial en campos de aplicación que van desde lo empresarial, educativo hasta lo científico pero que a través del tiempo los Applets como tecnología no han tenido la misma tendencia.

Fuentes/links de interes:
https://java.com/en/download/faq/chrome.xml
http://www.techrepublic.com/article/java-gets-browser-eviction-notices-from-spartan-and-chrome-42/
http://blog.chromium.org/2014/11/the-final-countdown-for-npapi.html
http://en.wikipedia.org/wiki/Java_applet
http://en.wikipedia.org/wiki/NPAPI


miércoles, 15 de abril de 2015

Automatización y administración de dependencias Java con Maven

Les comparto mi nuevo artículo publicado por Oracle Technology Network sobre: Automatización y administración de dependencias Java con Maven. El objetivo del artículo es proveer los conceptos básicos para crear el conocimiento necesario y poder llevar el uso de Maven a un siguiente nivel con todas las opciones tecnológicas que exploraremos a futuro con Java y Maven.



Artículo Completo:
http://www.oracle.com/technetwork/es/articles/java/java-con-maven-2516405-esa.html

jueves, 11 de diciembre de 2014

Problema común con Netbeans 8.0.1, Glassfish 4.1 y SessionScoped CDI 1.1


Un error que se ha estado reportando mucho en los talleres, Hackatones y demás actividades de iniciación a Java EE 7 es el derivado al intentar anotaciones del paquete javax.enterprise cuando se realiza un proyecto en Netbeans  8.01 con Glassfish 4.1. A continuación se detalle el Problema, el efecto y las posibles soluciones:


Ambiente:
Java JDK 1.7.0_45
Netbeans 8.0.1
Glassfish 4.1

Proyecto creado:




La Causa:
https://netbeans.org/bugzilla/show_bug.cgi?id=247013

El Problema:
Cuando se desea utilizar la anotación de CDI 1.1 SessionScoped (habiendo indicado en la creación del proyecto que la biblioteca son dadas por el Servidor, en este caso Glassfish 4.1), Netbeans no resuelve javax.enterprise.context.SessionScoped.



La Solución V1:
Dado que Netbeans solamente reconoce javax.faces.bean.SessionScoped, pero debido a que esa no es la anotación que queremos usar y que el objetivo de este post no es comparar javax.faces.bean.SessionScoped con javax.enterprise.context.SessionScoped, la solución (al momento de escribir este post) es agregar en las propiedades del proyecto la biblioteca referente a JavaEE 7 dado que por alguna razón Netbeans no lo resuelve en Glassfish 4.1.


La Solución V2:
Susitutir Glassfish 4.1 por Glassfish 4.0 e indicar a Netbeans que utilice está anterior versión de GlassFish.

La solución V3:
Crear un proyecto en donde las dependencias sean utilizadas bajo un Project Object Model, en otras palabras: Utilizar Maven. Esta es mi solución cinco estrellas ;).






sábado, 4 de octubre de 2014

viernes, 29 de agosto de 2014

Ingresos de JSRs para Java EE 8


Esta semana Heather VanCura ha compartido un listado actualizado de los JSR's (Java Specification Requests) enfocados en Java EE8.  Con ello vemos que la innovación no se detiene y Java EE8 ya es una realidad próxima.

Para los Grupos de Usuarios Java la oportunidad de poder apoyar existe. Tal como fue el en el caso de Java EE7, los programas Adopt a JSR estarán sin duda disponible incluyendo dentro de poco Java EE8.

JSR 365, Contexts and Dependency Injection for Java 2.0, has passed the EC JSR Approval Ballot with 24 Yes votes.  This JSR is led by RedHat, Pete Muir and Antoine Sabot-Durand, and is open for Expert Group Nominations.
JSR 366, Java Platform Enterprise Edition 8 (Java EE 8) Specification, is open for JSR Review.  This JSR is led by Oracle, Linda DeMichiel and Bill Shannon. The EC JSR Approval Ballot will be 9-22 September.
JSR 367, Java API for JSON Binding (JSON-B), is open for JSR Review.  This JSR is led by Oracle, Martin Grebac. The EC JSR Approval Ballot will be 9-22 September.
JSR 368, Java Message Service (JMS) 2.1 is open for JSR Review.  This JSR is led by Oracle, Nigel Deakin. The EC JSR Approval Ballot will be 9-22 September.
JSR 369, Java Servlet 4.0 is open for JSR Review.  This JSR is led by Oracle, Edward Burns and Shing Wai Chan. The EC JSR Approval Ballot will be 9-22 September.
JSR 370, Java API for RESTful Web Services (JAX-RS) 2.1 is open for JSR Review.  This JSR is led by Oracle, Santiago Pericas-Geertsen and Marek Potociar. The EC JSR Approval Ballot will be 9-22 September.
JSR 371, Model-View Controller (MVC) 1.0 is open for JSR Review.  This JSR is led by Oracle, Manfred Riem and Santiago Pericas-Geertsen . The EC JSR Approval Ballot will be 9-22 September.
JSR 372, JavaServer Faces (JSF) 2.3 is open for JSR Review.  This JSR is led by Oracle, Edward Burns and Manfred Riem. The EC JSR Approval Ballot will be 9-22 September.
 Early Draft Reviews
JSR 364, Broadening JCP Membership, completed Early Draft Review.  This JSR plans to submit a Public Review in September.
Maintenance  
JSR 56, Java Network Launching Protocol and API, completed a Maintenance Release.
JSR 339, JAX-RS 2.0: The Java API for RESTful Web Services, is open For Maintenance Review.  The EC ballot will open on 22 September. 
JSR 352, Batch Applications for the Java Platform, completed a Maintenance Release.
JSR 356, Java API for WebSocket, completed a Maintenance Release.

lunes, 18 de agosto de 2014

Call for proposals Java Day Guatemala 2014



El Grupo de Usuarios Java de Guatemala -GuateJUG- invita a todos aquellos interesados a compartir su conocimiento mediante conferencias para publico principiante, intermedio y avanzado en el próximo Java Day Guatemala 2014. 

Java Day Guatemala es la conferencia Java más grande de Centroamérica, durante cuatro ediciones hemos construido un punto de encuentro para desarrolladores, arquitectos y entusiastas de Java en Guatemala y Centroamérica.

¿Tienes algo interesante que deseas compartir con la comunidad?, ¿Innovaciones implementadas en Java?, ¿Casos de éxito en Java?. Nosotros y los asistentes del Java Day queremos saber de ti.

Más información: http://t.co/iUnUNoidVI


miércoles, 13 de agosto de 2014

OTN Guatemala 2014


A continuación comparto la presentación que realicé en el OTN Tour Guatemala 2014 sobre Java Mission Control y la característica de Flight Recorder. El evento estuvo muy bien organizado y tuvo la afluencia de sectores como banca, gobierno y empresas locales e internacionales. Más de 200 personas pudieron disfrutar de la experiencia de personalidades como Tom Kyte, Gurcan Orhan, Debra Lilley y Glenn Schwartzberg entre otros.

Agradesco a Latin American Oracle Users Group Community, Oracle Technology Network, Deiby Gómez y el Grupo de Usuarios Oracle en Guatemala por el apoyo brindado,

Reseña y fotos oficiales del evento en OTN  http://www.oracle.com/technetwork/es/community/user-groups/fotos-otn-latinoamerica-tour-2014-2259055-esa.html#guatemala



martes, 5 de agosto de 2014

jueves, 29 de mayo de 2014

Java Magazine Mayo Junio 2014

Ya se encuentra disponible la edición de Mayo Junio 2014 de Java Magazine. El tema central está desarrollado en herramientas para desarrollo, despliegue, IDE´s, automatización entre otros. Maven, chef, Packer son algunos de los nombres que se describen.

Considero que falto incluir algunas no tan madura pero con mucho potencial como el caso de Jboss Forge, arquillian y SonarQube  pero que sea el lector quien concuerde o no con mi opinion.

Nuevamente Caroline Kvitka nos da una breve introducción a esta nueva edición:


lunes, 26 de mayo de 2014

Oracle OTN Tour 2014 Latinoamérica



Por segundo año consecutivo he calificado para ser conferencista del Oracle OTN Tour Latinoamérica en Guatemala este próximo 11 de Agosto 2014.  El tour va a contar con personalidades de la categoría Oracle Ace Director y Oracle Ace así como de la participación del reconocido Tom Kyte quien es Vicepresidente de Oracle Corporation. Por Guatemala se contará con la participación del primer Oracle Ace del país Deiby Gómez quien representará a la región en las visitas del tour por México, Brasil y El Salvador.

La información completa será publicada en el sitio Oracle desde Guatemala así como en el sitio de la Comunidad de Grupo de Usuarios Oracle de Latinoamérica.


--Update 8 Junio 2014--
 Ya se ha publicado los días, horarios y speakes oficiales del Tour. Mi participación estará relacionada a Perfomance en arquitecturas basadas en Java EE. Dado que ya inicie a recibir consultas, sientanse libres de enviarme sus consultas y con gusto llevaré un resumen de FAQ's el día del evento.

 http://www.oracle.com/technetwork/es/community/user-groups/otn-latinoamerica-tour-2014-2213115-esa.html