project jigsaw: under the hoodjava.base java.logging java.sql java.corba myapp mylib java virtual...

56
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Project Jigsaw: Under The Hood Alex Buckley Java Platform Group, Oracle August 2016

Upload: others

Post on 23-May-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Project Jigsaw: Under The Hood

Alex Buckley Java Platform Group, Oracle August 2016

Page 2: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

JDK 9 At A Glance

• Module System

• Modular JDK

• Language enhancements

• Library enhancements

• Tool enhancements

2

Page 3: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

JDK 9 At A Glance

• Module System

• Modular JDK

• Language enhancements

• Library enhancements

• Tool enhancements

3

Page 4: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Project Jigsaw: Under The Hood

Part I: Accessibility and Readability

Part II: Different Kinds of Modules

Part III: Loaders and Layers

Part IV: The Road Ahead

4

Page 5: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Part I: Accessibility and Readability

5

Page 6: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Accessibility (JDK 1 – JDK 8)

• public

• protected

• <package>

• private

6

Page 7: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Accessibility (JDK 9 –)

• public to everyone

• public but only to specific modules

• public only within a module

• protected

• <package>

• private

7

Page 8: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

‘public’ no longer means “accessible”.

8

Page 9: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

The result:

9

Page 10: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Accessibility and Module Declarations

10

// src/java.sql/module-info.java

module java.sql {

exports java.sql;

exports javax.sql;

exports javax.transaction.xa;

}

Page 11: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Loader 1

class P.C class Q.D accesses

Accessibility and Class Loaders

delegates Loader 2

class Q.D

Loader 1

class P.C class Q.D no access

no delegation Loader 2

class Q.D

11

Page 12: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Loader 1

class P.C class Q.D accesses

Accessibility and Class Loaders

delegates Loader 2

class Q.D

Loader 1

class P.C class Q.D no access

no delegation Loader 2

class Q.D

12

Page 13: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Loader 1

Module X

One Loader, Many Modules

13

Module Y

class Q.D accesses?

class P.C

Page 14: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

The Role of Readability

14

Loader 1

Module X Module Y

class Q.D accesses

class P.C

reads

Page 15: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

The Role of Readability

15

module X {

requires Y;

}

module Y {

exports Q;

}

Module X Module Y

exports

reads

class Q.D accesses

class P.C

Page 16: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Readability in the JDK Module Graph

module java.sql {

requires java.logging;

exports java.sql;

}

module java.logging {

exports java.util.logging;

}

package java.util.logging;

public class Logger {

...

}

package java.sql;

import java.util.logging.Logger;

public class DriverManager {

new Logger() {..} }

16

Page 17: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Readability in the JDK Module Graph

module java.sql {

requires java.logging;

exports java.sql;

}

module java.logging {

exports java.util.logging;

}

package java.util.logging;

public class Logger {

...

}

package java.sql;

import java.util.logging.Logger;

public interface Driver {

Logger getParentLogger(); }

17

Page 18: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Readability in the JDK Module Graph

module java.sql {

requires java.logging;

exports java.sql;

}

module java.logging {

exports java.util.logging;

}

module myapp {

requires java.sql;

requires java.logging;

}

18

Page 19: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Readability in the JDK Module Graph

module java.sql {

requires public java.logging;

exports java.sql;

}

module java.logging {

exports java.util.logging;

}

module myapp {

requires java.sql;

requires java.logging;

}

19

Page 20: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Readability in the JDK Module Graph

20

module java.sql {

requires public java.logging;

exports java.sql;

}

module java.logging {

requires public logextras;

exports java.util.logging;

}

module logextras { … }

module myapp {

requires java.sql;

requires java.logging;

}

Page 21: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Direct and Implied Readability

• X reads Y if:

– X requires Y

or

– X reads Q, and Q requires public Y

Module X

requires Y

Module Y reads

Module X

requires Q

Module Q

requires public Y

reads Module Y

reads

reads

21

Page 22: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 22

void doSomething(Class<?> c) {

Method[] ms = c.getDeclaredMethods();

ms[0].invoke(…);

}

Core Reflection

Page 23: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 23

Core Reflection

setAccessible(true)

Page 24: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Summary of Part I: Accessibility and Readability

• Accessibility used to be a simple check for ‘public’ or “same package”.

• In JDK 9, accessibility strongly encapsulates module internals.

• Accessibility relies on readability, which can be direct or implied.

• Accessibility is enforced by the compiler, VM, and Core Reflection.

24

Page 25: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Part II: Different Kinds of Modules

25

Page 26: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Named Modules

26

java.base java.sql

jdk.compiler jdk.javadoc

Named modules

guava.jar junit.jar

glassfish.jar hibernate.jar

classpath

Page 27: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Unnamed module

The Unnamed Module

27

java.base java.sql

jdk.compiler jdk.javadoc

Named modules

guava.jar junit.jar

glassfish.jar hibernate.jar

Page 28: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Unnamed module

The Unnamed Module

28

java.base java.sql

jdk.compiler jdk.javadoc

Named modules

guava.jar junit.jar

glassfish.jar hibernate.jar

Page 29: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Automatic Modules

29

Unnamed module

java.base java.sql

jdk.compiler jdk.javadoc

Named modules

guava junit.jar

glassfish.jar hibernate.jar

Page 30: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Automatic Modules

30

Unnamed module

java.base java.sql

jdk.compiler jdk.javadoc

Named modules

guava junit.jar

glassfish.jar hibernate.jar

Page 31: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Automatic Modules

31

Unnamed module

java.base java.sql

jdk.compiler jdk.javadoc

Named modules

guava junit.jar

glassfish.jar hibernate.jar

myapp

Page 32: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Summary of Part II: Different Kinds of Modules

• Explicit named modules (java.sql)

• Automatic named modules (guava)

• Unnamed module (a.k.a. classpath)

• Lots of readability “for free” to help with migration.

32

Page 33: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Part III: Loaders and Layers

33

Page 34: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Class loading doesn’t change.

34

Page 35: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Application loader Platform loader Bootstrap loader

Class Loading in JDK 9

Java Virtual Machine

35

Page 36: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Application loader Platform loader Bootstrap loader

Class Loading in JDK 9

java.base java.logging java.sql java.corba jdk.compiler guava

Java Virtual Machine

36

junit.jar glassfish.jar

Page 37: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Application loader Platform loader Bootstrap loader

Modular Class Loading on JDK 9

Java Virtual Machine

37

Module System

Loader A

A.jar

Loader B

B.jar

Loader C

C.jar

Page 38: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Application loader Platform loader Bootstrap loader

Modular Class Loading in JDK 9

java.base java.logging java.sql java.corba jdk.compiler guava

Java Virtual Machine

38

junit.jar glassfish.jar

Java Platform Module System

Page 39: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Boot layer

Layers

39

Java Platform Module System

Java Virtual Machine

Application loader Platform loader Bootstrap loader

java.base java.logging java.sql java.corba jdk.compiler guava

Page 40: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Layer Creation

String moduleName -> {

switch (moduleName) {

case “java.base”:

case “java.logging”:

return BOOTSTRAP_LDR;

default:

return APP_LDR;

}

}

(1) (2)

40

Page 41: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Boot layer

Layers and the VM

41

Application loader Bootstrap loader

Java Platform Module System

java.base java.logging jdk.compiler guava

Java Virtual Machine

java.base java.logging java.sql java.corba jdk.compiler guava

Platform loader

java.sql java.corba

Page 42: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 42

Well-formed Graphs

Page 43: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Well-formed Graphs

• A module must read only one module that exports a package called P.

43

Module X

requires Y requires Z

Module Y

exports P

reads

Module Z

exports P

reads

Page 44: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Well-formed Maps

• Different modules with the same package must map to different loaders.

44

String moduleName -> {

switch (moduleName) {

case “java.base”:

case “java.logging”:

return BOOTSTRAP_LDR;

default:

return APP_LDR;

}

}

Page 45: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

ClassLoader2

Well-formed Maps

• Loader delegation must respect module readability.

45

ClassLoader1

Module X Module Y

class Q.D accesses

class P.C

reads

delegates

Page 46: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Layers of Layers

46

Boot layer

Application loader Platform loader Bootstrap loader

Java Platform Module System

Java Virtual Machine

Page 47: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Layers and Versions

47

Boot layer

Application loader Platform loader Bootstrap loader

Java Platform Module System

java.base java.logging java.sql java.corba myapp mylib

Java Virtual Machine

Hadoop layer

Loader 16

guava@11 hadoop

JavaScript layer

Loader 23

guava@18 closure- compiler

Loader 17

jackson@1

Loader 24

jackson@2

Page 48: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Summary of Part III: Loaders and Layers

• Modules do a better job of encapsulation than class loaders, but class loaders are still necessary.

• Layers control the relationship between modules and class loaders.

• Assuming class loaders respect the module graph, the system is safe by construction – no cycles or split packages.

48

Page 49: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Summary of Summaries

• Strong encapsulation of modules by the compiler, VM, Core Reflection.

• Unnamed and automatic modules help with migration.

• The system is safe by construction – no cycles or split packages.

49

Page 50: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Part IV: The Road Ahead

50

Page 51: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Incompatible Changes in JDK 9

• java.util.{logging,jar}, java.awt[.dnd].peer

• org.omg.CORBA, javax.rmi, javax.xml.{bind,ws}, javax.annotation

• java[.vm][.specification].version

51

• sun.misc

• sun.net.www, sun.security.x509, com.sun.org.apache.xerces.internal.jaxp

• rt.jar, tools.jar, -Xbootclasspath/p

Page 52: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Incompatible Changes in JDK 9

• java.util.{logging,jar}, java.awt[.dnd].peer

• org.omg.CORBA, javax.rmi, javax.xml.{bind,ws}, javax.annotation

• java[.vm][.specification].version

52

• sun.misc

• sun.net.www, sun.security.x509, com.sun.org.apache.xerces.internal.jaxp

• rt.jar, tools.jar, -Xbootclasspath/p

Page 53: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Advice for Frameworks

53

Modularize nothing

Modularize the framework

Accept modular input

Modularize the framework and the input

Page 54: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Preparing for JDK 9

• JDK 8: Run jdeps –jdkinternals MyApp.jar

• JDK 9: Early Access binaries at http://jdk9.java.net/

• JEP 261: Module System

• JEP 260: Encapsulate Most Internal APIs

• JEP 223: New Version String Scheme

• JEP 220: Modular Run-Time Images

• JEP 200: The Modular JDK

54

Page 55: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

Safe Harbor Statement

The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

55

Page 56: Project Jigsaw: Under The Hoodjava.base java.logging java.sql java.corba myapp mylib Java Virtual Machine Hadoop layer Loader 16 hadoop guava@11 JavaScript layer Loader 23 guava@18