Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Jvmmx jigsaw

1.889 visualizaciones

Publicado el

Proyecto Jigsaw, o ¿qué habrá que tener en cuenta para la llegada del JDK9?

Publicado en: Software
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Jvmmx jigsaw

  1. 1. Jigsaw Modularización en el JDK 9 @SuperSerch JVM MX
  2. 2. 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
  3. 3. JDK Monolítico • Tamaño del JDK 6 (Oct 2008) • JRE ~16MB, JDK ~80MB • Tamaño del JDK 8 • JRE ~60MB, JDK ~160MB
  4. 4. 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
  5. 5. setAccessible(true) ❌
  6. 6. Modificadores de Acceso (1995-2015) • public • protected • <package> • private
  7. 7. 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
  8. 8. 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
  9. 9. web.archive.org del 15 de febrero de 1998
  10. 10. APIs no soportados mas utilizados • sun.misc.BASE64Encoder • sun.misc.Unsafe • sun.misc.BASE64Decoder
  11. 11. Encontrando usos de APIs internos $ jdeps -jdkinternals archivo.jar
  12. 12. 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
  13. 13. 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 { }
  14. 14. 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
  15. 15. 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
  16. 16. 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; } ❌ ❌ ❌
  17. 17. 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
  18. 18. Ejecutando $ java -mp mlib:lib -m myapp
  19. 19. 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
  20. 20. Linking $ jlink --modulepath $JDKMODS:mlib --addmods myapp -output img $ ls img
 bin conf lib release $ ls img/bin
 java keytool myapp
  21. 21. 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
  22. 22. ¿Preguntas?

×