SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
Jigsaw
Modularización en el JDK 9
@SuperSerch
JVM MX
Jigsaw en el tiempo
• Propuesto a finales del 2008 para JDK 7, que
debería estar listo a principios del 2010
• llegó 2009
• JDK 7 sale en 2011 y pospone jigsaw para JDK8,
que debería estar listo a mediados 2013
• JDK 8 sale en 2014 y pospone jigsaw para JDK9,
que deberá estar listo en Septiembre 2016Marzo 2017
JDK Monolítico
• Tamaño del JDK 6 (Oct 2008)
• JRE ~16MB, JDK ~80MB
• Tamaño del JDK 8
• JRE ~60MB, JDK ~160MB
Classpath hell
./activation-1.0.2.jar:./antlr-runtime-4.0.jar:./arq-2.8.5.jar:./arthurdo.jar:./bigdata-1.0.1.jar:./bliki-3.0.6.jar:./bsh-
core-2.0b4.jar:./ChatServer.jar:./chiba-1.4.0.jar:./chiba-web-2.2.0.jar:./cmu_time_awb.jar:./cmu_us_kal.jar:./
cmudict04.jar:./cmulex.jar:./cmutimelex.jar:./colt-1.2.0.jar:./commons-beanutils-1.7.jar:./commons-
codec-1.3.jar:./commons-collections-2.1.jar:./commons-digester-1.7.jar:./commons-email-1.1.jar:./commons-
fileupload-1.2.1.jar:./commons-httpclient-3.0.1.jar:./commons-io-1.3.jar:./commons-jxpath-1.2-chiba-
patched.jar:./commons-logging-1.1.1.jar:./commons-pool-1.5.6.jar:./concurrent.jar:./ctc_utils-5-4-2005.jar:./
cweb-extser-0.1-b2-dev.jar:./dojo.jar:./dom4j-1.6.1.jar:./dsi-utils-1.0.6-020610.jar:./dwr-1.1.1.jar:./en_us.jar:./
facebook-java-api-3.0.0-SNAPSHOT.jar:./facebook-java-api-schema-3.0.0-SNAPSHOT.jar:./fastutil-5.1.5.jar:./
fckeditor-java-core-2.4.1.jar:./fileupload-ext.jar:./fontbox-0.1.0.jar:./freetts.jar:./gnu-crypto.jar:./groovy-
all-1.6.3.jar:./guava-16.0.1.jar:./hadoop-common-2.3.0.jar:./hibernate3.jar:./high-scale-lib-v1.1.2.jar:./
hsqldb.jar:./icu4j-3_6.jar:./iri-0.8.jar:./isorelax.jar:./iText-2.1.5.jar:./iText-rtf-2.1.5.jar:./jasperreports-3.7.0.jar:./
jaxen-core.jar:./jaxen-jdom.jar:./jcommon-1.0.9.jar:./jcr-1.0.jar:./jdom.jar:./jena-2.6.3.jar:./
jfreechart-1.0.13.jar:./json.jar:./jxl.jar:./jython.jar:./lgpl-utils-1.0.6-020610.jar:./log4j-1.2.15.jar:./lucene-
analyzers-3.6.0.jar:./lucene-core-3.6.0.jar:./lucene-spellchecker-3.6.0.jar:./mail-1.3.3.jar:./mongo-2.7.0.jar:./
msv.jar:./mysql-connector-java-5.1.28-bin.jar:./openrdf-sesame-2.3.0-onejar.jar:./PDFBox-0.7.3.jar:./
poi-3.7-20101029.jar:./poi-ooxml-3.7-20101029.jar:./poi-ooxml-schemas-3.7-20101029.jar:./poi-
scratchpad-3.7-20101029.jar:./quercus.jar:./resin-util.jar:./saxon-8.7.jar:./saxon-dom-8.7.jar:./saxpath.jar:./
sdb-1.3.2.jar:./serializer.jar:./slf4j-api-1.5.8.jar:./slf4j-log4j12-1.5.8.jar:./snappy-java-1.1.0.1.jar:./spring.jar:./
stax-api-1.0.1.jar:./SWB3Resources.jar:./SWBAdmin.jar:./SWBBase.jar:./SWBBigDataInt.jar:./
SWBCommunity.jar:./SWBDimensionDataSupport.jar:./SWBJCR170.jar:./SWBModel.jar:./SWBNLP.jar:./
SWBOffice.jar:./SWBOfficeComunicationInterfaces.jar:./SWBOpenSocial.jar:./SWBPlatform.jar:./
SWBPortal.jar:./SWBPortlet.jar:./SWBRepositoryManager.jar:./SWBSearch.jar:./
SWBSemanticFileRepository.jar:./SWBSIP.jar:./SWBTOWB3Compatibility.jar:./SWBTripleStore.jar:./
SWBTripleStoreBase.jar:./SWBTripleStoreLevelDB.jar:./SWBTripleStoreMongo.jar:./SWBVirtuosoInt.jar:./
SWBXMLRPCCommon.jar:./SWBXMRPCServer.jar:./tdb-0.8.7.jar:./twitter4j-2.0.9.jar:./virt_jena.jar:./
virtjdbc3.jar:./wstx-asl-3.2.9.jar:./xalan.jar:./xercesImpl-2.7.1.jar:./xml-apis.jar:./xmlbeans-2.3.0.jar
setAccessible(true)
❌
Modificadores de Acceso
(1995-2015)
• public
• protected
• <package>
• private
Modificadores de Acceso
(2015-…)
• public para todos
• public pero sólo para ciertos módulos
• public pero sólo dentro de un módulo
• protected
• <package>
• private
Tipos de APIs en Java
• Soportados, de uso público
• JCP - java.*, javax.*
• específicos del JDK - com.sun.*, jdk.*
• No Soportados, de uso interno del JDK
• sun.* principalmente
web.archive.org del 15 de febrero de 1998
APIs no soportados mas
utilizados
• sun.misc.BASE64Encoder
• sun.misc.Unsafe
• sun.misc.BASE64Decoder
Encontrando usos de APIs
internos
$ jdeps -jdkinternals archivo.jar
Declarando Módulos
• La información del módulo se escribe en el
archivo module-info.java en el directorio raíz del
código del módulo
• se usan las palabras module, requires, exports,
y requires public para definir las relaciones de
acceso entre módulos
Declarando Módulos
module-info.java
mx/info/swb/datos/Dao.java
mx/info/swb/interno/Mail.java
mx/info/swb/interno/Util.java
mx/info/swb/modelo/Page.java
mx/info/swb/modelo/User.java
mx/info/swb/portal/Portal.java
module-info.java
module mx.info.swb {
}
Declarando Módulos
module-info.java
mx/info/swb/datos/Dao.java
mx/info/swb/interno/Mail.java
mx/info/swb/interno/Util.java
mx/info/swb/modelo/Page.java
mx/info/swb/modelo/User.java
mx/info/swb/portal/Portal.javamodule-info.java
module mx.info.swb {
requires mx.info.base;
requires java.sql;
} mx.info.base
java.sql
Declarando Módulos
package java.sql;
import java.util.logging.Logger;
public class Driver {
public Logger getParentLogger()
{…}
.
.
}
module java.sql {
requires public java.logging;
.
.
}
mx.info.base
java.sql
mx.info.swb
java.logging
Declarando Módulos
module-info.java
mx/info/swb/datos/Dao.java
mx/info/swb/interno/Mail.java
mx/info/swb/interno/Util.java
mx/info/swb/modelo/Page.java
mx/info/swb/modelo/User.java
mx/info/swb/portal/Portal.javamodule-info.java
module mx.info.swb {
exports mx.info.swb.modelo;
exports mx.info.swb.portal;
}
❌
❌
❌
Creando Módulos
$ javac -modulesourcepath src -mp lib -d mods *
$ jar --create --file mlib/mylib.jar -C mods/mylib .
$ jar --create --file mlib/mylib.jar 

--main-class myapp.Main -C mods/mylib .
--module-version=1.0.1
Ejecutando
$ java -mp mlib:lib -m myapp
Módulos automáticos
• Módulos “reales”
• No se requieren cambios al jar de alguien mas
• El nombre de deriva del nombre del jar
• Exporta todos sus paquetes
• Requiere todos los otros módulos
Linking
$ jlink --modulepath $JDKMODS:mlib --addmods
myapp -output img
$ ls img

bin conf lib release
$ ls img/bin

java keytool myapp
Linking (cont)
$ img/bin/java -listmods

java.base@9.0

java.logging@9.0

java.sql@9.0

java.xml@9.0

myapp@1.0.1
$ img/bin/myapp
¿Preguntas?

Más contenido relacionado

La actualidad más candente

Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
Mariano Iglesias
 
MySQL - High Availability - Load Balacing - Cluster
MySQL - High Availability - Load Balacing - ClusterMySQL - High Availability - Load Balacing - Cluster
MySQL - High Availability - Load Balacing - Cluster
Miguel Angel Nieto
 
Etiquetas jsp
Etiquetas jspEtiquetas jsp
Etiquetas jsp
Faizuly16
 
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
GeneXus
 

La actualidad más candente (19)

Replicacion en mysq
Replicacion en mysqReplicacion en mysq
Replicacion en mysq
 
Ataque por inyección de código sql y sniffing
Ataque por inyección de código sql y sniffingAtaque por inyección de código sql y sniffing
Ataque por inyección de código sql y sniffing
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
 
Mysql Administracion
Mysql AdministracionMysql Administracion
Mysql Administracion
 
MySQL - High Availability - Load Balacing - Cluster
MySQL - High Availability - Load Balacing - ClusterMySQL - High Availability - Load Balacing - Cluster
MySQL - High Availability - Load Balacing - Cluster
 
Garbage Collection en el JVM
Garbage Collection en el JVMGarbage Collection en el JVM
Garbage Collection en el JVM
 
Optimización Servidor Web
Optimización Servidor WebOptimización Servidor Web
Optimización Servidor Web
 
Habilitar Korn Shell Linux
Habilitar Korn Shell LinuxHabilitar Korn Shell Linux
Habilitar Korn Shell Linux
 
Trabajo zabbix
Trabajo zabbixTrabajo zabbix
Trabajo zabbix
 
Tomcat yant
Tomcat yantTomcat yant
Tomcat yant
 
Aprendiendo REDIS en 20 minutos
Aprendiendo REDIS en 20 minutosAprendiendo REDIS en 20 minutos
Aprendiendo REDIS en 20 minutos
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magento
 
Marcos quesada caching_sf2
Marcos quesada caching_sf2Marcos quesada caching_sf2
Marcos quesada caching_sf2
 
ROA - Resource Oriented Architecture
ROA - Resource Oriented ArchitectureROA - Resource Oriented Architecture
ROA - Resource Oriented Architecture
 
Ansible + tacos at dev hangout
Ansible + tacos at dev hangoutAnsible + tacos at dev hangout
Ansible + tacos at dev hangout
 
Etiquetas jsp
Etiquetas jspEtiquetas jsp
Etiquetas jsp
 
Django
DjangoDjango
Django
 
Postgres
PostgresPostgres
Postgres
 
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
 

Destacado

Destacado (20)

Zed Attack Proxy
Zed Attack ProxyZed Attack Proxy
Zed Attack Proxy
 
Cloudino workshopcpmx7
Cloudino workshopcpmx7Cloudino workshopcpmx7
Cloudino workshopcpmx7
 
Inyección, XSS, CSRF en ChelaJS
Inyección, XSS, CSRF en ChelaJSInyección, XSS, CSRF en ChelaJS
Inyección, XSS, CSRF en ChelaJS
 
Chela stress test
Chela stress testChela stress test
Chela stress test
 
Workshop: Lambdas y Stream API en Java 8
Workshop: Lambdas y Stream API en Java 8Workshop: Lambdas y Stream API en Java 8
Workshop: Lambdas y Stream API en Java 8
 
Everglades National Park
Everglades National Park Everglades National Park
Everglades National Park
 
World Energy Outlook 2015: Presentation to Press
World Energy Outlook 2015: Presentation to PressWorld Energy Outlook 2015: Presentation to Press
World Energy Outlook 2015: Presentation to Press
 
Building the Workforce for the Future: 16 Smart Inside Sales Trends in 2016 [...
Building the Workforce for the Future: 16 Smart Inside Sales Trends in 2016 [...Building the Workforce for the Future: 16 Smart Inside Sales Trends in 2016 [...
Building the Workforce for the Future: 16 Smart Inside Sales Trends in 2016 [...
 
YieldWise: How the World Can Cut Food Waste and Loss by Half
YieldWise: How the World Can Cut Food Waste and Loss by HalfYieldWise: How the World Can Cut Food Waste and Loss by Half
YieldWise: How the World Can Cut Food Waste and Loss by Half
 
Presidential Food Facts
Presidential Food FactsPresidential Food Facts
Presidential Food Facts
 
Mindtree IMS Offerings
Mindtree IMS OfferingsMindtree IMS Offerings
Mindtree IMS Offerings
 
Dietary Guidelines (For the Real World!)
Dietary Guidelines (For the Real World!)Dietary Guidelines (For the Real World!)
Dietary Guidelines (For the Real World!)
 
Holiday Travel Survival Guide [Infographic]
Holiday Travel Survival Guide [Infographic]Holiday Travel Survival Guide [Infographic]
Holiday Travel Survival Guide [Infographic]
 
Jack D. Ryger: Best Colorado Ski Resorts
Jack D. Ryger: Best Colorado Ski ResortsJack D. Ryger: Best Colorado Ski Resorts
Jack D. Ryger: Best Colorado Ski Resorts
 
10 Catering Trends for Business Events in 2015
10 Catering Trends for Business Events in 201510 Catering Trends for Business Events in 2015
10 Catering Trends for Business Events in 2015
 
Good Health is Real Wealth at Workplace
Good Health is Real Wealth at WorkplaceGood Health is Real Wealth at Workplace
Good Health is Real Wealth at Workplace
 
Ensuring Your Weight Loss Survives The Hype
Ensuring Your Weight Loss Survives The HypeEnsuring Your Weight Loss Survives The Hype
Ensuring Your Weight Loss Survives The Hype
 
2016 Travel Trends
2016 Travel Trends 2016 Travel Trends
2016 Travel Trends
 
11 International Road Trips You Can Take From India
11 International Road Trips You Can Take From India11 International Road Trips You Can Take From India
11 International Road Trips You Can Take From India
 
Healthy and Frugal Holiday Eats
Healthy and Frugal Holiday EatsHealthy and Frugal Holiday Eats
Healthy and Frugal Holiday Eats
 

Similar a Jvmmx jigsaw

Java para android developers
Java para android developersJava para android developers
Java para android developers
jose diaz
 

Similar a Jvmmx jigsaw (20)

Java para android developers
Java para android developersJava para android developers
Java para android developers
 
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
 
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
Programación Modular con Java 9
Programación Modular con Java 9Programación Modular con Java 9
Programación Modular con Java 9
 
Recorrido por el Content Repository API para Java (JCR), analizando JackRabbit
Recorrido por el Content Repository API para Java (JCR), analizando JackRabbitRecorrido por el Content Repository API para Java (JCR), analizando JackRabbit
Recorrido por el Content Repository API para Java (JCR), analizando JackRabbit
 
Administrando Jboss
Administrando JbossAdministrando Jboss
Administrando Jboss
 
Java 9 - Módulos
Java 9  - MódulosJava 9  - Módulos
Java 9 - Módulos
 
Spring Fácil: Cambios en el framework con Spring Boot
Spring Fácil: Cambios en el framework con Spring BootSpring Fácil: Cambios en el framework con Spring Boot
Spring Fácil: Cambios en el framework con Spring Boot
 
JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
 
Curso introductorio a Raptor.js con Node.js
Curso introductorio a Raptor.js con Node.jsCurso introductorio a Raptor.js con Node.js
Curso introductorio a Raptor.js con Node.js
 
Aplicaciones en red ppt
Aplicaciones en red pptAplicaciones en red ppt
Aplicaciones en red ppt
 
Curso Spring Roo Spring Data Jpa Maven
Curso Spring Roo Spring Data Jpa MavenCurso Spring Roo Spring Data Jpa Maven
Curso Spring Roo Spring Data Jpa Maven
 
03. empaquetado de aplicaciones jee
03. empaquetado de aplicaciones jee03. empaquetado de aplicaciones jee
03. empaquetado de aplicaciones jee
 
UDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jacksonUDA-Anexo configuración y uso de jackson
UDA-Anexo configuración y uso de jackson
 
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - ExasolExtendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol
 
Comenzando con GWT
Comenzando con GWTComenzando con GWT
Comenzando con GWT
 
Curso de javascript y node avanzado
Curso de javascript y node avanzadoCurso de javascript y node avanzado
Curso de javascript y node avanzado
 
Mongo Mapper
Mongo MapperMongo Mapper
Mongo Mapper
 
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
 

Jvmmx jigsaw