jvmmx jigsaw
TRANSCRIPT
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
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
APIs no soportados mas utilizados
• sun.misc.BASE64Encoder
• sun.misc.Unsafe
• sun.misc.BASE64Decoder
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ódulosmodule-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ódulosmodule-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ódulospackage 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ódulosmodule-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
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 imgbin conf lib release
$ ls img/binjava keytool myapp
Linking (cont)
$ img/bin/java -listmods [email protected]@[email protected]@[email protected]
$ img/bin/myapp