Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Jvmmx jigsaw

1,917 views

Published on

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

Published in: Software
  • Be the first to comment

  • Be the first to like this

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?

×