SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
Actualizando amplicaciones empresariales en Java desde
Java 8 on premise hasta Java 11 en la nube
Víctor Orozco - @tuxtor
18 de agosto de 2020
Nabenik
1
Historias del mundo real
De Java 8 a Java 11
De mi data center a la nube - moderna -
Desdse Java 14 hasta el infinito
2
Historias del mundo real
Un sistema de geocerca
3
Un sistema de geocerca
• 2017
• 5 modulos
(War/Microservicios)
• 348 clases
• 17160 lineas de código
+ dependencias
• Original: Glassfish 4, Java EE
7, Java 8
• Actual: Payara 5, Jakarta EE 8,
MicroProfile 3.2
• Cliente Android y web
(Angular)
4
Un sistema de geocerca
5
Un sistema de geocerca
6
Un - sistemita - contable y empresarial
7
Un - sistemita - contable y empresarial
• 10 modulos (War, EJB,
EAR)
• 671 clases
• 39480 lineas de código
+ dependencias
• 2014
• Original: Wildfly 8, Java EE 7,
Java 7
• Actual: Wildfly 17, Jakarta EE
8, MicroProfile 3.0
• Cliente web (AngularJS)
8
Un - sistemita - contable y empresarial
9
Un - sistemita - contable y empresarial
10
Retos del mundo real
Mi ”mundo real”
• Venta/Geocerca (5 WAR) Payara Application Server
• ERP - 10 modulos (1 EAR, 9 EJB, 1 WAR), JBoss/Wildfly
• POS - JavaFX y Windows
El rompe cabezas
• Módulos en Java 9
• sun.misc.unsafe
• Corba y Java EE
• JavaFX
• IDE
• Licenciamiento
11
De Java 8 a Java 11
Algoritmo de actualización
Estrategia @tuxtor
1. Verificar y probar la compatibilidad del runtime/servidor/framework
2. Múltiples JVM en desarrollo con cambio fácil
3. Actualizar el compilador de Maven
4. Actualizar las bibliotecas
5. Incluir los módulos EE en los war/jar
6. Actualizar el IDE
7. Preparar el proyecto para módulos en el caso de JavaFX
8. Determinar previamente el Java que necesito
9. Ejecutar distintas versiones de Java en producción
12
Compatibilidad runtime
Compatibilidad con Java 11
• Tomcat
• Spring
• Micronaut
• Vert.x
• Jakarta EE (JBoss/Wildfly, OpenLiberty, Payara, WebLogic)
13
Varias JVMs
14
Bibliotecas
Generación dinámica de
Bytecode
• ByteBuddy
• ASM
• glib
• Spring
• Java EE
• Hibernate
• Mockito
15
Maven
• Maven 3.5.0
• Compiler 3.8.0
• surefire 2.22.0
• failsafe 2.22.0
• release version 11.0
16
Jakarta EE
17
Jakarta EE
18
Maven - Jakarta EE
JAF (javax.activation)
1 <dependency>
2 <groupId>jakarta.activation</groupId>
3 <artifactId>jakarta.activation-api</artifactId>
4 <version>1.2.2</version>
5 </dependency>
CORBA = RIP
19
Maven - Jakarta EE
JAXB (java.xml.bind)
1 <!-- API -->
2 <dependency>
3 <groupId>jakarta.xml.bind</groupId>
4 <artifactId>jakarta.xml.bind-api</artifactId>
5 <version>2.3.2</version>
6 </dependency>
7
8 <!-- Runtime -->
9 <dependency>
10 <groupId>org.glassfish.jaxb</groupId>
11 <artifactId>jaxb-runtime</artifactId>
12 <version>2.3.2</version>
13 </dependency>
20
Maven - Jakarta EE
JAX-WS (java.xml.ws)
1 <!-- API -->
2 <dependency>
3 <groupId>jakarta.xml.ws</groupId>
4 <artifactId>jakarta.xml.ws-api</artifactId>
5 <version>2.3.2</version>
6 </dependency>
7
8 <!-- Runtime -->
9 <dependency>
10 <groupId>com.sun.xml.ws</groupId>
11 <artifactId>jaxws-rt</artifactId>
12 <version>2.3.2</version>
13 </dependency>
21
Maven - Jakarta EE
Common Annotations (java.xml.ws.annotation)
1 <dependency>
2 <groupId>jakarta.annotation</groupId>
3 <artifactId>jakarta.annotation-api</artifactId>
4 <version>1.3.5</version>
5 </dependency>
22
IDEs
IDEs compatibles con Java 11
• Eclipse
• NetBeans
• IntelliJ IDEA
• Visual Studio Code
Algunos plug-ins problemáticos
1. Glassfish
2. WebLogic
3. Icefaces
23
JavaFX
JavaFX es un módulo independiente del JDK a partir de Java 11, compatible con
JPMS, casi todos usan la compilación de Gluon
24
¿Cual Java necesito?
Obligatorios por contrato
• Software comercial de Oracle (HotSpot)
• Software comercial de SAP (SAP VM)
• Software comercial de Red Hat (OpenJDK + RHEL)
• Software comercial de IBM (J9)
Algunos otros ”Javas”
• AdoptOpenJDK (soporte de IBM en J9)
• Correto
• Azul Zulu
• Java en Linux
25
Varias JVM en producción
Linux
• Docker
• RHEL
• Oracle Linux
• Debian
• Gentoo
Windows
• Docker / Containerd
• Variables de entorno en proyecto/runtime
• Lo importante es la salud
26
De mi data center a la nube - moderna
-
Desde mi data center
27
Desde mi data center
PaaS
• Clasico: Desplegar War
en servidores
autonomos
• Primer abordaje:
Desplegar contenedores
de forma manual
• Abordaje maduro:
Desplegar contenedores
y orquestar con
Rancher/Docker Swar-
m/Kubernetes/Mesos
28
Desde mi data center
29
Desdse Java 14 hasta el infinito
¿Que recibo con cada versión nueva de Java?
• Java - Lenguaje
• Java - Bibliotecas e APIs
• Java - Maquina Virtual de Java
30
Java - Las mejoras que resaltan
• Java 9
• Modulos
• JShell
• HTTP/2
• Factory methods
• Java 10
• Type Inference
• Class Data Sharing
• Time based release
• Java 11
• String methods
• File methods
• Direct .java execution
• Java 12
• Switch expressions
• Java 13
• Text blocks
• Java 14
• Pattern matching
• Records
• Helpfull NPE
31
JEP 110: HTTP/2 Client
1 HttpRequest request = HttpRequest.newBuilder()
2 .uri(new URI("https://swapi.co/api/starships/9"))
3 .GET()
4 .build();
5
6 HttpResponse<String> response = HttpClient.newHttpClient()
7 .send(request, BodyHandlers.ofString());
8
9 System.out.println(response.body());
32
JEP 286: Local-Variable Type Inference
1 public static void main(String args[]){
2 var localValue = 99;
3 System.out.println(++localValue);
4 //localValue = "Foo"
5 }
33
JEP 330: Launch Single-File Source-Code Programs
34
325: Switch Expressions (Preview)
Ahora
1 String langType = switch (args[0]) {
2 case "Java", "Scala", "Kotlin" -> "Static typed";
3 case "Groovy", "JavaScript" -> "Dynamic typed";
4 default -> {
5 System.out.println("This meant to be a processing
block");
6 yield "Probably LISP :)";
7 }
8 };
9 System.out.println(langType);
35
355: Text Blocks (Preview)
Antes
1 String html = "<html>n" +
2 " <body>n" +
3 " <p>Hello, world</p>n" +
4 " </body>n" +
5 "</html>n";
Ahora
1 String html = """
2 <html>
3 <body>
4 <p>Hello, world</p>
5 </body>
6 </html>
7 """; 36
JEP 359: Records (Preview)
Data carrier
1 record Person(String name, String email, int age) {}
Uso
1 Person foo = new Person("Marco", "example@mail.com",99);
2 System.out.println(foo);
3 //foo.name = "Polo";
37
Víctor Orozco
• vorozco@nabenik.com
• @tuxtor
• http://vorozco.com
• http://tuxtor.shekalug.org
This work is licensed under
Creative Commons Attribution-
NonCommercial-ShareAlike 3.0
Guatemala (CC BY-NC-SA 3.0 GT).
38

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Desarrollo moderno con DevOps y Cloud Native
Desarrollo moderno con DevOps y Cloud NativeDesarrollo moderno con DevOps y Cloud Native
Desarrollo moderno con DevOps y Cloud Native
 
Explorando los objetos centrales de Kubernetes con Oracle Cloud
Explorando los objetos centrales de Kubernetes con Oracle CloudExplorando los objetos centrales de Kubernetes con Oracle Cloud
Explorando los objetos centrales de Kubernetes con Oracle Cloud
 
Java EE moderno, de monolitos a Payara Micro
Java EE moderno, de monolitos a Payara MicroJava EE moderno, de monolitos a Payara Micro
Java EE moderno, de monolitos a Payara Micro
 
Gestión de proyectos con Maven
Gestión de proyectos con MavenGestión de proyectos con Maven
Gestión de proyectos con Maven
 
Java EE, Microprofile y Payara Micro
Java EE, Microprofile y Payara MicroJava EE, Microprofile y Payara Micro
Java EE, Microprofile y Payara Micro
 
Microservicios funcionales con Java 8, Java EE y Payara Micro
Microservicios funcionales con Java 8, Java EE y Payara MicroMicroservicios funcionales con Java 8, Java EE y Payara Micro
Microservicios funcionales con Java 8, Java EE y Payara Micro
 
Desde la TV, hasta la nube, el ecosistema de Java en 26 años
Desde la TV, hasta la nube, el ecosistema de Java en 26 añosDesde la TV, hasta la nube, el ecosistema de Java en 26 años
Desde la TV, hasta la nube, el ecosistema de Java en 26 años
 
40 Novedades de JavaSE 9
40 Novedades de JavaSE 940 Novedades de JavaSE 9
40 Novedades de JavaSE 9
 
Introducción a JakartaEE 8
Introducción a JakartaEE 8Introducción a JakartaEE 8
Introducción a JakartaEE 8
 
Jvmmx docker jvm
Jvmmx docker jvmJvmmx docker jvm
Jvmmx docker jvm
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
 
JConf México 2020 - Micronaut + GraalVM = <3
JConf México 2020 - Micronaut + GraalVM = <3JConf México 2020 - Micronaut + GraalVM = <3
JConf México 2020 - Micronaut + GraalVM = <3
 
JConf Perú 2020 - Micronaut + GraalVM = <3
JConf Perú 2020 - Micronaut + GraalVM = <3JConf Perú 2020 - Micronaut + GraalVM = <3
JConf Perú 2020 - Micronaut + GraalVM = <3
 
Introducción a Kubernetes
Introducción a KubernetesIntroducción a Kubernetes
Introducción a Kubernetes
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
 
JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
 
Java 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and moreJava 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and more
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
 
Alta disponibilidad con Replicas de MySQL en AWS
Alta disponibilidad con Replicas de MySQL en AWSAlta disponibilidad con Replicas de MySQL en AWS
Alta disponibilidad con Replicas de MySQL en AWS
 
Entorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con VagrantEntorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con Vagrant
 

Similar a Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta Java 11 en la nube

Taller introducción Java EE 7 @UAPA
Taller introducción Java EE 7  @UAPATaller introducción Java EE 7  @UAPA
Taller introducción Java EE 7 @UAPA
Eudris Cabrera
 
[ES] Introducción a Java EE 7
[ES] Introducción a Java EE 7[ES] Introducción a Java EE 7
[ES] Introducción a Java EE 7
Eudris Cabrera
 
Software Líbre con respaldo de Oracle ~ OTN Tour 2013
Software Líbre con respaldo de Oracle ~ OTN Tour 2013Software Líbre con respaldo de Oracle ~ OTN Tour 2013
Software Líbre con respaldo de Oracle ~ OTN Tour 2013
Mysql Latinoamérica
 

Similar a Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta Java 11 en la nube (20)

Introduccion Java.ppt
Introduccion Java.pptIntroduccion Java.ppt
Introduccion Java.ppt
 
Microservicios con Jakarta EE y Eclipse MicroProfile
Microservicios con Jakarta EE y Eclipse MicroProfileMicroservicios con Jakarta EE y Eclipse MicroProfile
Microservicios con Jakarta EE y Eclipse MicroProfile
 
Taller introducción Java EE 7 @UAPA
Taller introducción Java EE 7  @UAPATaller introducción Java EE 7  @UAPA
Taller introducción Java EE 7 @UAPA
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
CommitConf 2023 - Spring Framework 6 y Spring Boot 3
CommitConf 2023 - Spring Framework 6 y Spring Boot 3CommitConf 2023 - Spring Framework 6 y Spring Boot 3
CommitConf 2023 - Spring Framework 6 y Spring Boot 3
 
Introducción a Java y BEA (2008)
Introducción a Java y BEA (2008)Introducción a Java y BEA (2008)
Introducción a Java y BEA (2008)
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
 
El camino de Java a Kubernetes
El camino de Java a KubernetesEl camino de Java a Kubernetes
El camino de Java a Kubernetes
 
[ES] Introducción a Java EE 7
[ES] Introducción a Java EE 7[ES] Introducción a Java EE 7
[ES] Introducción a Java EE 7
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
 
1.introduccion java
1.introduccion java1.introduccion java
1.introduccion java
 
Comenzando con GWT
Comenzando con GWTComenzando con GWT
Comenzando con GWT
 
Software Líbre con respaldo de Oracle ~ OTN Tour 2013
Software Líbre con respaldo de Oracle ~ OTN Tour 2013Software Líbre con respaldo de Oracle ~ OTN Tour 2013
Software Líbre con respaldo de Oracle ~ OTN Tour 2013
 
Software Open Source – Open Day Oracle 2013
Software Open Source – Open Day Oracle 2013Software Open Source – Open Day Oracle 2013
Software Open Source – Open Day Oracle 2013
 
My sql ha-fina_lv2
My sql ha-fina_lv2My sql ha-fina_lv2
My sql ha-fina_lv2
 
Modulo 1 java ee platform
Modulo 1   java ee platformModulo 1   java ee platform
Modulo 1 java ee platform
 
Proyecto Avatar - JavaScript sobre la JVM del servidor
Proyecto Avatar - JavaScript sobre la JVM del servidorProyecto Avatar - JavaScript sobre la JVM del servidor
Proyecto Avatar - JavaScript sobre la JVM del servidor
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
 
Ajax
AjaxAjax
Ajax
 
Servidores de mapas en alta disponibilidad CyLiconValley
Servidores de mapas en alta disponibilidad CyLiconValleyServidores de mapas en alta disponibilidad CyLiconValley
Servidores de mapas en alta disponibilidad CyLiconValley
 

Más de Víctor Leonel Orozco López

Más de Víctor Leonel Orozco López (17)

Introducción al análisis de datos
Introducción al análisis de datosIntroducción al análisis de datos
Introducción al análisis de datos
 
From traditional to GitOps
From traditional to GitOpsFrom traditional to GitOps
From traditional to GitOps
 
De Java 8 a Java 17
De Java 8 a Java 17De Java 8 a Java 17
De Java 8 a Java 17
 
Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...
Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...
Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...
 
Design Patterns para Microsserviços com MicroProfile
 Design Patterns para Microsserviços com MicroProfile Design Patterns para Microsserviços com MicroProfile
Design Patterns para Microsserviços com MicroProfile
 
MicroProfile benefits for your monolithic applications
MicroProfile benefits for your monolithic applicationsMicroProfile benefits for your monolithic applications
MicroProfile benefits for your monolithic applications
 
Consejos y el camino del desarrollador de software
Consejos y el camino del desarrollador de softwareConsejos y el camino del desarrollador de software
Consejos y el camino del desarrollador de software
 
De Java 8 ate Java 14
De Java 8 ate Java 14De Java 8 ate Java 14
De Java 8 ate Java 14
 
Programación con ECMA6 y TypeScript
Programación con ECMA6 y TypeScriptProgramación con ECMA6 y TypeScript
Programación con ECMA6 y TypeScript
 
De Java 8 a Java 11 y 14
De Java 8 a Java 11 y 14De Java 8 a Java 11 y 14
De Java 8 a Java 11 y 14
 
MicroProfile benefits for monolitic applications
MicroProfile benefits for monolitic applicationsMicroProfile benefits for monolitic applications
MicroProfile benefits for monolitic applications
 
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguajeKotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
 
Kotlin+MicroProfile: Ensinando 20 anos para uma linguagem nova
Kotlin+MicroProfile: Ensinando 20 anos para uma linguagem novaKotlin+MicroProfile: Ensinando 20 anos para uma linguagem nova
Kotlin+MicroProfile: Ensinando 20 anos para uma linguagem nova
 
Eclipse MicroProfile para el desarrollador ocupado
Eclipse MicroProfile para el desarrollador ocupadoEclipse MicroProfile para el desarrollador ocupado
Eclipse MicroProfile para el desarrollador ocupado
 
Eclipse MicroProfile para o desenvolvedor ocupado
Eclipse MicroProfile para o desenvolvedor ocupadoEclipse MicroProfile para o desenvolvedor ocupado
Eclipse MicroProfile para o desenvolvedor ocupado
 
Eclipse MicroProfile metrics: Practical use cases
Eclipse MicroProfile metrics: Practical use casesEclipse MicroProfile metrics: Practical use cases
Eclipse MicroProfile metrics: Practical use cases
 
OWASP Top 10 101 en Java EE
OWASP Top 10 101 en Java EEOWASP Top 10 101 en Java EE
OWASP Top 10 101 en Java EE
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (11)

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 

Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta Java 11 en la nube

  • 1. Actualizando amplicaciones empresariales en Java desde Java 8 on premise hasta Java 11 en la nube Víctor Orozco - @tuxtor 18 de agosto de 2020 Nabenik 1
  • 2. Historias del mundo real De Java 8 a Java 11 De mi data center a la nube - moderna - Desdse Java 14 hasta el infinito 2
  • 4. Un sistema de geocerca 3
  • 5. Un sistema de geocerca • 2017 • 5 modulos (War/Microservicios) • 348 clases • 17160 lineas de código + dependencias • Original: Glassfish 4, Java EE 7, Java 8 • Actual: Payara 5, Jakarta EE 8, MicroProfile 3.2 • Cliente Android y web (Angular) 4
  • 6. Un sistema de geocerca 5
  • 7. Un sistema de geocerca 6
  • 8. Un - sistemita - contable y empresarial 7
  • 9. Un - sistemita - contable y empresarial • 10 modulos (War, EJB, EAR) • 671 clases • 39480 lineas de código + dependencias • 2014 • Original: Wildfly 8, Java EE 7, Java 7 • Actual: Wildfly 17, Jakarta EE 8, MicroProfile 3.0 • Cliente web (AngularJS) 8
  • 10. Un - sistemita - contable y empresarial 9
  • 11. Un - sistemita - contable y empresarial 10
  • 12. Retos del mundo real Mi ”mundo real” • Venta/Geocerca (5 WAR) Payara Application Server • ERP - 10 modulos (1 EAR, 9 EJB, 1 WAR), JBoss/Wildfly • POS - JavaFX y Windows El rompe cabezas • Módulos en Java 9 • sun.misc.unsafe • Corba y Java EE • JavaFX • IDE • Licenciamiento 11
  • 13. De Java 8 a Java 11
  • 14. Algoritmo de actualización Estrategia @tuxtor 1. Verificar y probar la compatibilidad del runtime/servidor/framework 2. Múltiples JVM en desarrollo con cambio fácil 3. Actualizar el compilador de Maven 4. Actualizar las bibliotecas 5. Incluir los módulos EE en los war/jar 6. Actualizar el IDE 7. Preparar el proyecto para módulos en el caso de JavaFX 8. Determinar previamente el Java que necesito 9. Ejecutar distintas versiones de Java en producción 12
  • 15. Compatibilidad runtime Compatibilidad con Java 11 • Tomcat • Spring • Micronaut • Vert.x • Jakarta EE (JBoss/Wildfly, OpenLiberty, Payara, WebLogic) 13
  • 17. Bibliotecas Generación dinámica de Bytecode • ByteBuddy • ASM • glib • Spring • Java EE • Hibernate • Mockito 15
  • 18. Maven • Maven 3.5.0 • Compiler 3.8.0 • surefire 2.22.0 • failsafe 2.22.0 • release version 11.0 16
  • 21. Maven - Jakarta EE JAF (javax.activation) 1 <dependency> 2 <groupId>jakarta.activation</groupId> 3 <artifactId>jakarta.activation-api</artifactId> 4 <version>1.2.2</version> 5 </dependency> CORBA = RIP 19
  • 22. Maven - Jakarta EE JAXB (java.xml.bind) 1 <!-- API --> 2 <dependency> 3 <groupId>jakarta.xml.bind</groupId> 4 <artifactId>jakarta.xml.bind-api</artifactId> 5 <version>2.3.2</version> 6 </dependency> 7 8 <!-- Runtime --> 9 <dependency> 10 <groupId>org.glassfish.jaxb</groupId> 11 <artifactId>jaxb-runtime</artifactId> 12 <version>2.3.2</version> 13 </dependency> 20
  • 23. Maven - Jakarta EE JAX-WS (java.xml.ws) 1 <!-- API --> 2 <dependency> 3 <groupId>jakarta.xml.ws</groupId> 4 <artifactId>jakarta.xml.ws-api</artifactId> 5 <version>2.3.2</version> 6 </dependency> 7 8 <!-- Runtime --> 9 <dependency> 10 <groupId>com.sun.xml.ws</groupId> 11 <artifactId>jaxws-rt</artifactId> 12 <version>2.3.2</version> 13 </dependency> 21
  • 24. Maven - Jakarta EE Common Annotations (java.xml.ws.annotation) 1 <dependency> 2 <groupId>jakarta.annotation</groupId> 3 <artifactId>jakarta.annotation-api</artifactId> 4 <version>1.3.5</version> 5 </dependency> 22
  • 25. IDEs IDEs compatibles con Java 11 • Eclipse • NetBeans • IntelliJ IDEA • Visual Studio Code Algunos plug-ins problemáticos 1. Glassfish 2. WebLogic 3. Icefaces 23
  • 26. JavaFX JavaFX es un módulo independiente del JDK a partir de Java 11, compatible con JPMS, casi todos usan la compilación de Gluon 24
  • 27. ¿Cual Java necesito? Obligatorios por contrato • Software comercial de Oracle (HotSpot) • Software comercial de SAP (SAP VM) • Software comercial de Red Hat (OpenJDK + RHEL) • Software comercial de IBM (J9) Algunos otros ”Javas” • AdoptOpenJDK (soporte de IBM en J9) • Correto • Azul Zulu • Java en Linux 25
  • 28. Varias JVM en producción Linux • Docker • RHEL • Oracle Linux • Debian • Gentoo Windows • Docker / Containerd • Variables de entorno en proyecto/runtime • Lo importante es la salud 26
  • 29. De mi data center a la nube - moderna -
  • 30. Desde mi data center 27
  • 31. Desde mi data center PaaS • Clasico: Desplegar War en servidores autonomos • Primer abordaje: Desplegar contenedores de forma manual • Abordaje maduro: Desplegar contenedores y orquestar con Rancher/Docker Swar- m/Kubernetes/Mesos 28
  • 32. Desde mi data center 29
  • 33. Desdse Java 14 hasta el infinito
  • 34. ¿Que recibo con cada versión nueva de Java? • Java - Lenguaje • Java - Bibliotecas e APIs • Java - Maquina Virtual de Java 30
  • 35. Java - Las mejoras que resaltan • Java 9 • Modulos • JShell • HTTP/2 • Factory methods • Java 10 • Type Inference • Class Data Sharing • Time based release • Java 11 • String methods • File methods • Direct .java execution • Java 12 • Switch expressions • Java 13 • Text blocks • Java 14 • Pattern matching • Records • Helpfull NPE 31
  • 36. JEP 110: HTTP/2 Client 1 HttpRequest request = HttpRequest.newBuilder() 2 .uri(new URI("https://swapi.co/api/starships/9")) 3 .GET() 4 .build(); 5 6 HttpResponse<String> response = HttpClient.newHttpClient() 7 .send(request, BodyHandlers.ofString()); 8 9 System.out.println(response.body()); 32
  • 37. JEP 286: Local-Variable Type Inference 1 public static void main(String args[]){ 2 var localValue = 99; 3 System.out.println(++localValue); 4 //localValue = "Foo" 5 } 33
  • 38. JEP 330: Launch Single-File Source-Code Programs 34
  • 39. 325: Switch Expressions (Preview) Ahora 1 String langType = switch (args[0]) { 2 case "Java", "Scala", "Kotlin" -> "Static typed"; 3 case "Groovy", "JavaScript" -> "Dynamic typed"; 4 default -> { 5 System.out.println("This meant to be a processing block"); 6 yield "Probably LISP :)"; 7 } 8 }; 9 System.out.println(langType); 35
  • 40. 355: Text Blocks (Preview) Antes 1 String html = "<html>n" + 2 " <body>n" + 3 " <p>Hello, world</p>n" + 4 " </body>n" + 5 "</html>n"; Ahora 1 String html = """ 2 <html> 3 <body> 4 <p>Hello, world</p> 5 </body> 6 </html> 7 """; 36
  • 41. JEP 359: Records (Preview) Data carrier 1 record Person(String name, String email, int age) {} Uso 1 Person foo = new Person("Marco", "example@mail.com",99); 2 System.out.println(foo); 3 //foo.name = "Polo"; 37
  • 42. Víctor Orozco • vorozco@nabenik.com • @tuxtor • http://vorozco.com • http://tuxtor.shekalug.org This work is licensed under Creative Commons Attribution- NonCommercial-ShareAlike 3.0 Guatemala (CC BY-NC-SA 3.0 GT). 38