pitfalls of migrating projects to jdk 9

44

Upload: pavel-bucek

Post on 06-Jan-2017

107 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: Pitfalls of migrating projects to JDK 9
Page 2: Pitfalls of migrating projects to JDK 9
Page 3: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Pi@allsofMigraCngprojectstoJDK9CON4123

PavelBucekOracleSeptember,2016

Page 4: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

SafeHarborStatementTheprecedingisintendedtooutlineourgeneralproductdirecCon.ItisintendedforinformaConpurposesonly,andmaynotbeincorporatedintoanycontract.Itisnotacommitmenttodeliveranymaterial,code,orfuncConality,andshouldnotberelieduponinmakingpurchasingdecisions.Thedevelopment,release,andCmingofanyfeaturesorfuncConalitydescribedforOracle’sproductsremainsatthesolediscreConofOracle.

4

Page 5: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

IntroducCon,moCvaCon,agenda

• ProjectJersey– hTps://jersey.java.net– ReferenceimplementaConofJAX-RS:JSR311,339,370– Started10yearsago– Mavenproject,170+mavenmodules,700+javapackages,2100+classes,…

• MoCvaCon– Wewanttobeanenabler,notblocker(whenthinkingaboutadopConofJava9)– jlinkpromisesgreatvalueinmicroserviceworld

5

Page 6: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

IntroducCon,moCvaCon,agenda

• Agenda– Goingthroughcompile,test,run,packageonJava9•  Jigsawway,nocheatsJ

– IterateoverissuesandsoluCons– Jlink– Conclusion

6

Page 7: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Jigsaw

•  StandardmodulesystemfortheJavaSEpla@orm– AnditsapplicaContoJDK!

• Goals– MaketheJDKeasilyscalabledowntosmallcompuCngdevices– ImprovethesecurityandmaintainabilityoftheJavaSEPla@ormimplementaCon(AndtheJDK)– EnableimprovedapplicaConperformance– MakeiteasierfordeveloperstoconstructandmaintainlibrariesandscaleapplicaCons

7

Page 8: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Jigsaw

• No-Goals– Versioningsupport•  Toocomplextodoitnow,postponed

– SupportforfinegraindefiniConofautomaCcmodules– “Mavencentral”likemodulerepository

8

Page 9: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Jigsaw

• ModuleisabaseelementofJigsawrunCme•  Eachmodulecandeclare– Dependenciesonothermodules•  TransiCve,staCc,syntheCc,mandated

– Exportedpackages(!)– UsedServices– ProvidedServices(formerlyMETA-INF/services)

•  (thereisnoversion)–  (itCANbeaddedlaterby“jar”command)

9

Whatisamodule?

Page 10: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Jigsaw

10

module my.module {

requires java.base;

requires transitive javax.ws.rs.api;

exports org.my.module.package;

exports org.my.module.package to moduleName;

uses org.my.module.package.InterfaceName;

provides org.my.module.package.InterfaceName with

org.my.module.package.ImplName;

}

Page 11: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Jigsaw

• BuildingwithoutanymodificaCons– ResultsinCNFE(someJAX-Bclass),whichisexpected– Canbefixedby–XaddReads(orotherversionofthisparameters)– “unnamedmodule”•  JigsawisusedonlyforJDKitself

– Goal:MakeJerseyMavenmodulesJigsawmodules.

11

Page 12: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

• Mapping– Mavenmodule(groupId:arCfactId)toJigsawmodulename– MavendependenciestoJigsaw“requires”– ExporCngpackages– META-INF/services/*toprovidesXwithY;

• DeclaringServiceinterfaces

•  Jerseyhas170+modules…

12

BacktoJersey

Page 13: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

• Mavenmodule(groupId:arCfactId)toJigsawmodulename– groupId.arCfactId+(s/-/./g)

• META-INF/services/*toprovidesXwithY;•  ExporCngpackages– Exportallfornow

13

BacktoJersey

Page 14: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

• MavendependenciesmappingtoJigsaw“requires”– Mavendependencyscopes:compile,provided,runCme,opConal,system,..– Jigsawrequirescanbe:transiCve,staCc

•  ThereisnodirectmappingforMavensopConalandprovidedscopes•  Easywayoutistomapalldependenciesto“transiCve”,whichmeans“requirestransiCve”– Okfornow,we’llgetbacktothatlater

14

BacktoJersey

Page 15: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

• Classpath– Goodoldclasspath,modelledasthe“unnamedmodule”– Requireseverything,exportsnone

• Modulepath– Whenamodule(jar,exploded,..)isonmodulepath,itistreatedasamodule– Whenajarwithoutmodule-info.javaisonmodulepath,itistreatedasanautomaCcmodule•  Exportsallpackages,Requiresallmodulesonthemodulepath(*)•  Namederivedfromthejarname

15

ClasspathvsModulepath

Page 16: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

• HowtobuildJava9module?– javac–target9–source9–p$CP–mp$MP$(find.-name"*.java”)

• Mavensupport–compilerpluginversion“3.6-jigsaw-SNAPSHOT”– Putdependenciesonthemodulepathinsteadofclasspath

16

BacktoJersey

--class-path <path>, -classpath <path>, -cp <path> Specify where to find user class files and annotation processors --module-path <path>, -p <path>, -modulepath <path> Specify where to find application modules

Page 17: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

17

PlaAormmodules

Page 18: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

18

PlaAormmodules

Page 19: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

•  Trivialbuildissues– Add“requires”forjavapla@ormmodules•  java.logging,java.naming,java.acCvaCon,java.xml.bind,java.desktop,java.management

– OSGibundlepluginandotherstuff•  Exclude,itwon’tworkanyway•  hTp://openjdk.java.net/projects/penrose/•  “ThegoalistoexploreandimplementinteroperabilitybetweenOSGiandJigsaw.”

– Mavenshadeplugin– JAXBMavenplugin

•  TestcompilaCon(let’sskipitfornow)

19

BacktoJersey

Page 20: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

•  Singlepackagecanbeprovidedonlybyasinglemodule

20

BacktoJersey–Servletdependencies

jersey-container-servlet

jersey-container-servlet-core

javax.servlet-api:3.0.1[provided]

servlet-api:2.4[provided]

jersey-server javax.ws.rs.apijersey-common

Page 21: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

•  Singlepackagecanbeprovidedonlybyasinglemodule

21

BacktoJersey–Servletdependencies

jersey-container-servlet-3x

jersey-container-servlet-corejavax.servlet-api:3.0.1[provided]servlet-api:2.4[provided]

jersey-server javax.ws.rs.apijersey-common

jersey-container-servlet-2x

Page 22: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

•  Singlepackagecanbeprovidedonlybyasinglemodule– Having2moduleswhichexportsamepackageisanerror

•  appengine.apijar(automaCcmodule)includesjavax.acIvaIon,[email protected]– ThisisanogoinJigsaw

• Weld(2.2.14.Final)–  [ERROR]…/module-info.java:moduleXreadspackageorg.jboss.weld.contextfrombothweld.core.implandweld.api

– SCllthesameissue

22

Splitpackageissue

Page 23: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

•  JavaEEAPI– CombinaConofallJavaEEspecAPIs

23

BacktoJersey–JavaEEAPIversus<anyspec>(javax.ws.rs.apiinthiscase)

javax/annotaConjavax/annotaCon/securityjavax/annotaCon/sqljavax/batchjavax/decoratorjavax/ejbjavax/eljavax/enterprisejavax/enterprise/concurrentjavax/enterprise/contextjavax/enterprise/deployjavax/enterprise/event

javax/enterprise/injectjavax/enterprise/uCljavax/facesjavax/injectjavax/interceptorjavax/jmsjavax/jsonjavax/jwsjavax/mailjavax/managementjavax/persistencejavax/resource

javax/securityjavax/servletjavax/transacConjavax/validaConjavax/websocketjavax/ws/rsjavax/xml/bindjavax/xml/registryjavax/xml/rpcjavax/xml/soapjavax/xml/ws…(lotsofsub-packages)

Page 24: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

24

JavaEEAPIjarversus<anyspec>(javax.ws.rs.apiinthiscase)

UserApplicaCon

ApplicaConServer

javax:javaee-api:7.0

javax.websocket:javax.websocket-api

javax.inject:javax.inject

javax.batch:javax.batch-api

javax.ws.rs:javax.ws.rs-api

Page 25: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

25

JavaEEAPIjarversus<anyspec>(javax.ws.rs.apiinthiscase)

UserApplicaCon(Jigsawmodule)

ApplicaConServer

javax:javaee-api:7.0

javax.websocket:javax.websocket-api

javax.inject:javax.inject

javax.batch:javax.batch-api

javax.ws.rs:javax.ws.rs-api

requiresjavaee.apiautomaCcmodule

requiresjavax.websocket.api;requiresjavax.inject;requiresjavax.ws.rs.api;…

Page 26: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

26

JavaEEAPIjarversus<anyspec>(javax.ws.rs.apiinthiscase)

modulejavaee-api(aggregatormodule,noclasses!)

javax.websocket:javax.websocket-api

javax.batch:javax.batch-api

javax.ws.rs:javax.ws.rs-api

requirestransientjavax.batch.api

Page 27: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

• PartofJavaEEAPIwhichisincludedintheJDK– SimilarlyasJAX-B,JAX-WS,Corba,TransacCons,…

•  Jerseydependsonjavax.annotaCon-api:1.2•  JDKincludesversion<1.2(modulejava.annotaCons.common)• @[email protected]•  java.se.eerequiresjava.annotaCons.common

27

BacktoJersey–javax.annotaIon–“commonannotaIons”

Page 28: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Build

•  Jerseyuseshk2asDIframework•  exportspackageName;doesn’tguaranteeaccesstoprivateobjects/fields– Itusedto..LastweekJ

• Mavenwarplugin– XStreamserializaConlibrary

28

exportsprivate

Page 29: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

ServiceLoader

• META-INF/services– usesX;//Xisaninterface– providesXwithY//Xisaninterface,YisanimplementaConclass

•  Jerseyuseslightlymorecomplex– InternalAPIforlookingupclasses(addingimplementaConsininjecConfwbindingphase)•  Classesarelookedupfromdifferentmodule->missinguses->cannotbedeclaredsincetheifacenameisnotknown

– ReflecConfortherescue– Class.getModule().addUses(…)

29

Page 30: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Whathavewebuilt?

30

Page 31: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

BuildSummary

•  126modules– CausaliCes•  Bundles•  AllWarexamples•  OSGiandmulCmoduletests

•  Let’strytoruntheexample!– Mavenexecplugin– IDEsupport– …?

31

Page 32: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Run

•  Let’srunhelloworldexample!

32

Page 33: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Test

• AutomatedtesCng• Mavencompileplugin– Brokenwithlatestjdkbuild

• Mavensurefireplugin– Doesn’tseemtobereadyyet

•  Fullmanualapproachsincenow

33

Page 34: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Jlink

•  ToolwhichproducesopCmizedrunCmeforspecificusecase• PackagingminimalsetfromJDKwiththeapplicaCon– $jlink--module-path$JAVA_HOME/jmods/:"$MP"--add-modulesorg.glassfish.jersey.examples.helloworld--output./jlink-test– Error:module-info.classnotfoundforjavax.annotaCon.apimodule

•  Jlinkrequiresallmodulestobenamedmodules– L

34

Page 35: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Packaging

•  Jerseyprovidesjax-rs-ribundle• What’sabundle?– Fatjar

•  ExecutableFatJar– L

•  ExecutableUberJar!– Whatthehellisanuberjar?

35

Bundles..

Page 36: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

UberJAR

• Originallyajar,whichhasalldependenciesin/lib– ClasspathelementinMETA-INF/MANIFEST.MF

• WhenappliedtoJigsaw– Eachmodulehasitsowndirectory– NewmainclassdefiniCon(module/class)– ModuleFinderimplementaCon

36

Bundles..

Page 37: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

UberJAR&Jlink

• CreateJlinkimagewithsubsetofpla@ormmodulesandusethattorunouruberjar– jlink--module-path=$JAVA_HOME/jmods--add-modulesjava.logging,java.naming,java.acCvaCon,java.xml.bind,java.desktop,java.management--output./jlink

37

Page 38: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

TODO

• UserequirestransiIveonlywhererequired– Onlywhenthedependencyisexposedinexportedpackage

•  exportsXtoY;– Exportinternalpackagesstrictlytoorg.glassgish.jersey.*modules– Yisrequiredtobeonthemodulepath

• DistribuConpackages– UsemulC-releasesupportinJARfiles– DistributeJava9enabledJerseyJARs

38

Page 39: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Mostofthecreditsgoesto…

• AlexBuckley• AlanBateman

• WeretogetlatestJigsawbuild– hTps://jdk9.java.net/jigsaw/

39

Page 40: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Wasitworthit?

•  Java9issCllevolving– Non-compaCblechanges– Missingtoolingsupport

•  Java9readyproject• Noshareableresults

40

Page 41: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Contacts/QA

• PavelBucek([email protected])•  Jersey/JAX-RSRI:hTp://jersey.java.net– [email protected]

FeelfreetoaskanyquesConsnoworcontactmelater.

41

Page 42: Pitfalls of migrating projects to JDK 9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| 42

Page 43: Pitfalls of migrating projects to JDK 9
Page 44: Pitfalls of migrating projects to JDK 9