73
(+ ) 55 fonctionnalités de Java 7 dont vous n'avez (probablement) pas encore entendu parler par David Delabassée @delabassee 1

55 new things in Java 7 - Devoxx France

Embed Size (px)

DESCRIPTION

"(+) 55 fonctionnalités de Java 7 dontvous n'avez (probablement) pasencore entendu parler"David DelabasséeDevoxx France - Avril 2012

Citation preview

Page 1: 55 new things in Java 7 - Devoxx France

(+) 55 fonctionnalités de Java 7 dont vous n'avez (probablement) pas

encore entendu parlerpar David Delabassée

@delabassee

1

Page 2: 55 new things in Java 7 - Devoxx France

About me...

• David Delabassée

- ... Sun, Oracle

- Devoxx (Belgium) Steering

• @delabassee

2

Page 3: 55 new things in Java 7 - Devoxx France

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.

3

Page 4: 55 new things in Java 7 - Devoxx France

Java 7

• InvokeDynamic

• Fork/Join

• NIO.2

• Project Coin

• ...

4

Page 5: 55 new things in Java 7 - Devoxx France

5

Project Coin

Page 6: 55 new things in Java 7 - Devoxx France

Binary Literals1: int mask = 0b101010101010;2: aShort = (short)0b1010000101000101;3: long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;

1: HAPPY_FACE = { 2: (short)0b0000011111100000; 3: (short)0b0000100000010000; 4: (short)0b0001000000001000; 5: (short)0b0010000000000100; 6: (short)0b0100000000000010; 7: (short)0b1000011001100001; 8: (short)0b1000011001100001; 9: (short)0b1000000000000001;10: (short)0b1000000000000001;11: (short)0b1001000000001001;12: (short)0b1000100000010001;13: (short)0b0100011111100010;14: (short)0b0010000000000100;15: (short)0b0001000000001000;16: (short)0b0000100000010000;17: (short)0b0000011111100000; }

6

Page 7: 55 new things in Java 7 - Devoxx France

Underscores in Numeric Literals

7

• Valid

• Invalid

int mask = 0b1010_1010_1010;long big = 9_223_783_036_967_937L;long creditCardNumber = 1234_5678_9012_3456L;long socialSecurityNumber = 999_99_9999L;float pi = ! 3.14_15F;long hexBytes = 0xFF_EC_DE_5E;long hexWords = 0xCAFE_BFFE;

float pi1 = 3_.1415F;long ssn = 999_99_9999_L;int x1 = _52;int x2 = 0_x52;

float pi2 = 3._1415F;

int x1 = 52_;int x2 = 0x_52;

Page 8: 55 new things in Java 7 - Devoxx France

Strings in Switch

8

1: int NbrDay(String s, int year) { 2: switch(s) { 3: case "April": case "June": 4: case "September": case "November": 5: return 30; 6: 7: case "January": case "March": case "May": 8: case "July": case "August": case "December": 9: return 31;10: 11: case "February”:12: ...13: default:14: ...15: }

Page 9: 55 new things in Java 7 - Devoxx France

Automatic Resource Management

9

1: try (InputStream in = new FileInputStream(src);2: OutputStream out = new FileOutputStream(dest))3: {4: byte[] buf = new byte[8192];5: int n;6: while (n = in.read(buf)) >= 0)7: out.write(buf, 0, n);8: }

• New java.lang.AutoCloseable interface• Anything with a void close() method is a candidate

Page 10: 55 new things in Java 7 - Devoxx France

10

Page 11: 55 new things in Java 7 - Devoxx France

Suppressed Exceptions

11

New Throwable.getSupressed() method

1: java.io.IOException 2: at Suppress.write(Suppress.java:19) 3: at Suppress.main(Suppress.java:8) 4: Suppressed:  java.io.IOException 5: at Suppress.close(Suppress.java:24) 6: at Suppress.main(Suppress.java:9) 7: Suppressed:  java.io.IOException 8: at  Suppress.close(Suppress.java:24) 9: at  Suppress.main(Suppress.java:9)

Page 12: 55 new things in Java 7 - Devoxx France

Multi Catch

12

1: //...2: catch (IOException ex) {3: logger.log(ex);4: throw ex;5: } catch (SQLException ex) {6: logger.log(ex);7: throw ex;8: }

1: //...2: catch (IOException|SQLException ex) {3: logger.log(ex);4: throw ex;5: }

Page 13: 55 new things in Java 7 - Devoxx France

Multi Catch

13

1: try { 2: !... 3: } catch (SpecificException ex) { 4: // Do something very specific! 5: throw ex; 6: } catch (AnException | MyException | ZeException ex) { 9: ! // Do something more generic...10: ! throw ex;11: }

Page 14: 55 new things in Java 7 - Devoxx France

More Precise Rethrow

14

1: // pre Java 7 "imprecise rethrow" 2: // must use "throws Exception" 3: public static void imprecise() throws Exception { 4: try { 5: ! ! // Code that may throw either 6: !! // FirstException or SecondException 7: ! } catch (Exception e) { 8: throw e; 9: }10: }

Page 15: 55 new things in Java 7 - Devoxx France

More Precise Rethrow

15

1: // Java 7 precise rethrow. 2: // No longer "throws Exception" 3: public static void precise() throws FirstException, SecondException { 4: try { 5: !! // Code that may throw either 6: !! // FirstException or SecondException 7: } catch (Exception e) { 8: throw e; 9: }10: }

Page 16: 55 new things in Java 7 - Devoxx France

Diamond <>

16

Map<Ville,List<Client>> map = new HashMap<Ville,List<Client>>();Map<Ville,List<Client>> map = new HashMap<>(); Map<Dep,Map<Ville,List<Client>>> map = new

HashMap<Dep,Map<Ville,List<Client>>>();Map<Dep,Map<Ville,List<Client>>> map = new HashMap<>(); Map<Pays,Map<Dep,Map<Ville,List<Client>>>> map = new

HashMap<Pays,Map<Dep,Map<Ville,List<Client>>>>();Map<Pays,Map<Dep,Map<Ville,List<Client>>>> map = new HashMap<>();

Page 17: 55 new things in Java 7 - Devoxx France

17

IONIO.2

Page 18: 55 new things in Java 7 - Devoxx France

18

File Navigation Helpers

Key navigation Helper Types:• Class java.nio.file.Files

- Static methods to operate on files, directories and other types of files• Class java.nio.file.Paths

- Static methods to return a Path by converting a string or URI• Interface java.nio.file.Path

- Used for objects that represent the location of a file in a file system

Typical use case:• Use Paths to get a Path• Use Files to do stuff

Page 19: 55 new things in Java 7 - Devoxx France

19

File Navigation Helpers 1: Path p1 = Paths.get("/tmp/foo"); 2: Path p2 = Paths.get(URI.create("file:///Users/joe/FileTest.java")); 3: Path p3 = Paths.get(System.getProperty("user.home"),"logs", "foo.log"); 4: Path p4 = Paths.get("/home/joe/foo"); 5: Path p5 = ("c:\\data\\test.dta"); 6: Path p6 = Paths.get("Test.java").toAbsolutePath(); 7: 8: Path fileName = listing.geFileName(); 9: Path parent = p2.getParent();10: Path root = p2.getRoot();11: Path subRep = p2.subPath(0,2);12: 11: File file = aPathPath.toFile(); // ‘legacy’ java.io.File

Page 20: 55 new things in Java 7 - Devoxx France

20

Filesjava.nio.file.Files class

• Static methods to operate on files, directories and other types of files- Read/Write, Copy, & Delete- Create Files, Directories & Links- Use of system “temp” directory- Attributes – Modified/Owner/Permissions/Size- Determining the file content type- Determining the file type (ex. isExecutable, isSymLink)- etc.

1: Files.move(src, dst, StandardCopyOption.ATOMIC_MOVE);2: Files.copy(src, dst,3: !! StandardCopyOption.COPY_ATTRIBUTES,4: !! StandardCopyOption.REPLACE_EXISTING);5: String type = Files.probeContentType(path);

Page 21: 55 new things in Java 7 - Devoxx France

21

Files Helper Class DirectoryStream iterate over entries

• Scales to large directories• Uses less resources• Smooth out response time for remote file systems• Implements Iterable and Closeable for productivity

Filtering support• Build-in support for glob, regex and custom filters Class

1: Path srcPath = Paths.get(“/home/regis/src”);2: 3: try (DirectoryStream<Path> dir = 4: ! ! srcPath.newDirectoryStream(“*.java”)) {5: ! for (Path file : dir)6: ! ! System.out.println(file.getName());7: }

Page 22: 55 new things in Java 7 - Devoxx France

22

Symbolic LinksPath and Files are “link aware”

1: Path newLink = Paths.get(...); 2: Path existingFile = Paths.get(...); 3: try { 4: Files.createLink(newLink, existingFile); 5: } catch (IOException x) { 6: System.err.println(x); 7: } catch (UnsupportedOperationException x) { 8: ! //Some file systems or some configurations 9: !! ! //may not support links10: System.err.println(x);11: }

Page 23: 55 new things in Java 7 - Devoxx France

23

Walking A File Tree• FileVisitor interface makes walking a file tree for search, or performing

actions, trivial.• SimpleFileVisitor implements preVisitDirectory(T dir, BasicFileAttributes attrs); visitFile(T dir, BasicFileAttributes attrs); visitFileFailed(T dir, IOException exc); postVisitDirectory(T dir, IOException exc);

Page 24: 55 new things in Java 7 - Devoxx France

24

Walking A File Treepublic static class PrintFiles extends SimpleFileVisitor<Path> {@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attr) {

if (attr.attr.isRegularFile()) {System.out.format("Regular file: %s ", file);

} else if {System.out.format("Not a regular file: %s ", file);

}return CONTINUE;

}}

Path startingDir = ...;PrintFiles pf = new PrintFiles();Files.walkFileTree(startingDir, pf);

Page 25: 55 new things in Java 7 - Devoxx France

25

Watching a Directory• Create a WatchService “watcher” for the filesystem• Register a directory with the watcher• “Watcher” can be polled or waited on for events- Events raised in the form of Keys- Retrieve the Key from the Watcher- Key has filename and events within it for create/delete/modify

• Ability to detect event overflows

Page 26: 55 new things in Java 7 - Devoxx France

26

Custom FileSystems• FileSystems class is factory to FileSystem (interface)• Java 7 allows for developing custom FileSystems:- Memory based based file systems- Fault tolerant distributed file systems- Replacing or supplementing the default file system provider- etc.

• Two steps:- Implement java.nio.file.spi.FileSystemProvider 

- URI, Caching, File Handling, etc.- Implement java.nio.file.FileSystem

- Roots, RW access, file store, etc.

Page 27: 55 new things in Java 7 - Devoxx France

27

zip FileSystem ProviderFully-functional and supported NIO.2 filesystem provider for zip and jar files

1: Map<String, String> env = new HashMap<>(); 2: !env.put("create", "true"); 3: !// locate file system by using the syntax 4: !// defined in java.net.JarURLConnection 5: !URI u= URI.create("jar:file:/foo/zipfs/zipfstest.zip"); 6: !try (FileSystem z = FileSystems.newFileSystem(u, env)) { 7: !! Path externalFile = Paths.get("/foo/sample.txt"); 8: !! Path pathInZipfile = z.getPath("/sample.txt"); 9: !// copy a file into the zip file 10: !externalTxtFile.copyTo(pathInZipfile); 11: }12: ...

Page 28: 55 new things in Java 7 - Devoxx France

28

URLClassLoader.close() 1: // create a class loader loading from "foo.jar" 2: URL url = new URL("file:foo.jar"); 3: URLClassLoader loader = new URLClassLoader (new URL[] {url}); 4: Class cl = Class.forName ("Foo", true, loader); 5: Runnable foo = (Runnable) cl.newInstance(); 6: foo.run(); 7: loader.close(); 8: 9: // foo.jar gets updated somehow10: loader = new URLClassLoader (new URL[] {url});11: cl = Class.forName ("Foo", true, loader);12: foo = (Runnable) cl.newInstance();13: 14: // run the new implementation of Foo15: foo.run();

Page 29: 55 new things in Java 7 - Devoxx France

29

SDP & SCTP

• Infiniband- High throughput, low latency streamed connections- Remote Direct Memory Access- Solaris & Linux

Page 30: 55 new things in Java 7 - Devoxx France

30

ConcurrencyJSR166y

Page 31: 55 new things in Java 7 - Devoxx France

31

Divide and Conquer

if (my portion of the work is small enough) do the work directly

else split my work into two pieces invoke the two pieces

Page 32: 55 new things in Java 7 - Devoxx France

32

Fork Join Framework - Pools

ForkJoinPool - Service for running ForkJoinTasks• aFjp.execute(aTask); // async• aFjp.invoke(aTask); // wait• aFjp.submit(aTask); // async + future

• ForkJoinPool(); // default to platform• ForkJoinPool(int n); // # concurrent threads• ForJoinPool(n,aThreadFactory,exHandler,FIFOtasks); //

Create your own thread handler, exception handler, and boolean on task ordering (default LIFO)

Page 33: 55 new things in Java 7 - Devoxx France

33

Fork Join Framework - TasksForkJoinTask - The abstract base class for:• RecursiveAction- A recursive resultless task- Implements compute() abstract method

• RecursiveTask- Similar to RecursiveAction but returns a result

1: ForkJoinPool p = new ForkJoinPool();2: MyTask mt = new MyTask(n); // implements compute3: p.submit(mt);4: while (!mt.isDone()) {/*THUMPER!*/ }5: System.out.println(mt.get());

Page 34: 55 new things in Java 7 - Devoxx France

34

Fork Join Framework - Compute()• RecursiveAction - ex. increment an entire array

1: protected void compute() {2: if (hi - lo < THRESHOLD) {3: for (int i = lo; i < hi; ++i) array[i]++; }4: else {5: int mid = (lo + hi) >>> 1;6: invokeAll(new IncrementTask(array, lo, mid),7: new IncrementTask(array, mid, hi));}

• RecursiveTask - ex. Fibonacci numbers1: protected Integer compute() {2: if (n <= 1) return n;3: Fibonacci f1 = new Fibonacci(n - 1);4: Fibonacci f2 = new Fibonacci(n - 2); 5: f1.fork(); f2.fork(); 6: return f2.join() + f1.join();}

Page 35: 55 new things in Java 7 - Devoxx France

35

TransferQueue

• TransferQueue interface• Extension to BlockingQueue• Implemented by LinkedTransferQueue• Additional Benefits:- Adds methods:

transfer(E e), tryTransfer(E e), tryTransfer(E e, long timeout), hasWaitingConsumer(), getWaitingConsumerCount()

- Allows for smarter queues to be built – sidestep the data structure if it’s known there are consumers waiting.

Page 36: 55 new things in Java 7 - Devoxx France

36

ConcurrentLinkedDeque

• Unbound concurrent deque based on linked nodes- Like a Queue, but allows front and rear removal of elements

• Concurrent insert, remove and access on multiple threads• Iterators are weakly consistent

Page 37: 55 new things in Java 7 - Devoxx France

37

Concurrent Random Numbers

• Existing RNG becomes unwitting source of contention between threads in concurrent apps

• Expected more needs of concurrent RNG with advent of Fork Join Framework

Class java.util.ThreadLocalRandomThreadLocalRandom.current().nextDouble(…)ThreadLocalRandom.current().nextInt (…)ThreadLocalRandom.current().nextLong(…)

Page 38: 55 new things in Java 7 - Devoxx France

38

Phasers

• Barrier similar to CountDownLatch and CyclicBarrier• Used for many threads to wait at common barrier point• How is Phaser an improvement?- Dynamic add/remove “parties” to be sync’d- Better deadlock avoidance- Arrival “counting” and phase advance options, etc- Termination api’s - Tiering (tree structure)- Rather than sync 100 threads, sync 2x50 then 2x.

Page 39: 55 new things in Java 7 - Devoxx France

39

ClassLoader – Deadlock Avoidance

• Acyclic class loader delegation model• Custom classLoaders were prone to deadlock

• Java 7 new locking mechanism to avoid deadlock• Java 7 “parallel capable” classloader

Page 40: 55 new things in Java 7 - Devoxx France

40

Client

Page 41: 55 new things in Java 7 - Devoxx France

41

Standardize Nimbus Look and Feel• Better than Metal for cross platform look-and-feel• Introduced in Java SE 6u10, now part of Swing• Not the default L&F• Scalable Java 2D impl

Page 42: 55 new things in Java 7 - Devoxx France

42

JLayer

1: // wrap your component with JLayer2: JLayer<JPanel> layer = new JLayer<JPanel>(panel);3: // custom ui provides all extra functionality4: layer.setUI(myLayerUI);5: // add the layer as usual component6: frame.add(layer);

Page 43: 55 new things in Java 7 - Devoxx France

43

Mixing of AWT and Swing (*)

(*) As of 6u12 and 7u1, some caveats for scroll bars

Page 44: 55 new things in Java 7 - Devoxx France

44

Translucent Windows• Private API added in 6u10, made public in Java 7• Support (based on platform) for:- Uniform Translucency- Per Pixel Translucency- Per Pixel Transparency

1: // simple uniform:2: aWindow.setOpacity(0.5f);3: 4: // Per pixel g2d is the g2d of a Jpanel on paintComponent(g)5: Paint p = new GradientPaint(0.0f, 0.0f, new Color(R, G, B,0), 0.0f,

6: getHeight(), new Color(R, G, B, 255), true);7: g2d.setPaint(p);8: g2d.fillRect(0, 0, getWidth(), getHeight());

Page 45: 55 new things in Java 7 - Devoxx France

45

Xrender-based Java 2D

• Improved Graphics Performance, modern X11• Off by default (backward compatibility)

• Quiet:" -Dsun.java2d.xrender=true

• Verbose (log on stdout if successful or not) -Dsun.java2d.xrender=true

Page 46: 55 new things in Java 7 - Devoxx France

46

OpenType/CFF Fonts

• Java Platform must support TrueType fonts, other font technologies is implementation dependent

• Java 7 adds support for “Compact Font Format” - OpenType/CFF

Page 47: 55 new things in Java 7 - Devoxx France

47

Better Support for Linux Fonts• Five logical fonts since Java 1.0:- Serif, Sans-serif, Monospaced, Dialog, and DialogInput- Must map to physical font on your system

• No consistency in fonts in Linux• Required editing fontconfig.properties• Java 7 on Linux (and Solaris 11) uses system “libfontconfig”

Page 48: 55 new things in Java 7 - Devoxx France

48

HSV/HSL on JColorChooser

Page 49: 55 new things in Java 7 - Devoxx France

49

Other Client Stuff

• Shaped windows• Handling multiple files selection in the FileDialog class• Mouse- java.awt.Toolkit.areExtraMouseButtonsEnabled()- java.awt.event.MouseWheelEvent.getPreciseWheelRotation()

• java.awt.PrintJob dialogbox • ...

Page 50: 55 new things in Java 7 - Devoxx France

50

Deployment

Page 51: 55 new things in Java 7 - Devoxx France

51

Embedding JNLP File in Applet Tag• Saves a network round trip first time applet is loaded• Base64 Encode the JNLP contents into a Javascript call

<script src="http://www.java.com/js/deployJava.js"></script><script>

var attributes = {} ; <!-- Base64 encoded string trunc’d below for readability --> var parameters =

{jnlp_href: 'dynamictree-applet.jnlp', jnlp_embedded: 'PCEtLSAKLyoKICogQ29weX ... HA+Cg==' } ; deployJava.runApplet(attributes, parameters, '1.7');

</script>

Page 52: 55 new things in Java 7 - Devoxx France

52

Ability to detect applet init status on load 1: <script> 2: function registerAppletStateHandler() { 3: !switch (drawApplet.status) { 4: !case 1: <!–- applet is loading --> 5: !! drawApplet.onLoad = onLoadHandler; 6: !case 2: <!–- applet is loaded --> 7: !case 3: <!–- error --> 8: !! document.getElementById("mydiv") 9: !! ! .innerHTML =“No need to onload"; 10: !}11: }

1: <!–- assume java.com/js/deployJava.js is loaded ->2: var parameters = {java_status_events: 'true'};3: <!–- set other params like jnlp->4: deployJava.runApplet(attributes, parameters, '1.7');5: ...6: </script>

1: function onLoadHandler(){2: ! document.getElementById("mydiv“)3: ! .innerHTML = "Applet loaded"; 4: ! draw(); 5: }

Page 53: 55 new things in Java 7 - Devoxx France

53

Draggable Applet Decoration

• Applet decoration settings apply equally to in browser and out of browser launches – borderless, etc.

Page 54: 55 new things in Java 7 - Devoxx France

54

Other JNLP New Stuff• Partially signed JNLP- Simplifies build and deployment in some scenarios- External JNLP file may differ from one embedded in jar

• Targeting resources to particular version of OS<resources os="Windows\ Vista Windows\ 7"> <jar href=“legacySound.jar"/> </resources>

• Better “install” preferences of an application- For example, attribute to determine if app appears on “Add or Remove

Programs panel”

Page 55: 55 new things in Java 7 - Devoxx France

55

VM

Page 56: 55 new things in Java 7 - Devoxx France

56

Updates to Experimental GC – G1• “Garbage First” intended to replace(*) Concurrent Mark-Sweep (CMS) in

Hotspot at some future release• G1 is included for experimentation in Java 7• Key benefits:- More predictably “soft real-time” – temporal configuration- High throughput

• Basics:- Heap partitioned into equal-sized heap regions- Compacts as it proceeds – looks for regions with no live objects for

immediate reclamation

(*) not an official forward looking statement

Page 57: 55 new things in Java 7 - Devoxx France

57

Tiered Compilation• Hotspot has 2 JIT’s “client” and “server”- Client starts fast, but let optimizations – best for clients- Server starts slower, but provides better optimizations

• Java 7 adds Tiered Compiliation- JIT the code first with “client”, and if it’s really hot code, recompile with “server”- Has been around for a while, but not with a great implementation

-server -XX:+TieredCompilation

• Image from Rémi Forax showing the DaCapo Jython benchmark.http://www.java.net/blogs/forax

Page 58: 55 new things in Java 7 - Devoxx France

58

Compressed OOPS by default

• From 32bit to 64bit system grow the heap by ~1.5x due to bigger ordinary object pointers

• Memory is cheap, bandwidth and cache is not!• Compressed OOPS:- Managed 32 bit pointers (similar heap sizes for 32/64 bit apps)- Scaled (8 x 4GB chunks) added to a 64 bit base

• Useful for heaps up to 32GB- Turned off when –Xmx > 32g

Page 59: 55 new things in Java 7 - Devoxx France

59

Support for Dynamically Typed Languages• JSR 292: Supporting Dynamically Typed Languages on the Java Platform

- invokedynamic• Method Handle- Ability to call a method- Implement a subclass of java.lang.invoke.MethodHandle- Typesafe!

Page 60: 55 new things in Java 7 - Devoxx France

60

I10N & L8N

Page 61: 55 new things in Java 7 - Devoxx France

61

Unicode 4 Unicode 6• Unicode standard was originally 16 bit• 16 bits not sufficient for Unicode 6, but backward compatibility needs to be

maintained• Use String “U+hex” to express char in Unicode • Unicode 6.0 adds thousands of new characters• Support for properties and data files (mostly interesting to Japanese Telcos and

Indic scripts)• Full Unicode 6.0 REGEX support!

Page 62: 55 new things in Java 7 - Devoxx France

62

Extensible Currency Codes• ISO 4217 Defines Currency Codes• Possible to supersede default currencies with <JAVA_HOME>/lib/

currency.properties file• Allows for supporting global changes without updating Java• Format: ISO 3166 Country code = ISO 4217 Codes

# Sample currency property if Canada adopts USD# CA=CAD,124,2 is default ISO 4217 codeCA=USD,840,2

Page 63: 55 new things in Java 7 - Devoxx France

63

Number Shaper Enhancements • NumericShaper used to map numbers to non Latin char sets (since 1.4)• NumericShaper traditionally used an int bitmask for defaults- Fine when there were only 19 defaults- In Java 7 there are 34 (> 32 bits!!)

• Java 7 now has an Enum NumericShaper.Range• Backward compatibility maintained, new API’s added for Enum use where

desired

Page 64: 55 new things in Java 7 - Devoxx France

64

Locale – Categories

• Default Locale can be set independently for format resources (dates, numbers, currencies) and display resources (menus and dialogs)

• Ex. Application for Japanese audience who deal with US financial transactions://Enum Locale.Category – DISPLAY and FORMAT//Default no arg get/set is DISPLAYLocale.setDefault(DISPLAY, Locale.JAPAN);Locale.setDefault(FORMAT, Locale.US);

Page 65: 55 new things in Java 7 - Devoxx France

65

Locale – BCP47 extensionsJava 7 confirms to IETF BCP 47 (refs UTS #35)

• Specify extensions to a Locale (get/set)• i.e., de-DE-co-phonebk• No guarantee the underlying platform can honor extension

Key Description Example Example Description

ca calendar algorithm ca-buddhist Thai Buddhist calendarco collation type co-pinyin Pinyin ordering for Latink* collation parameters kf-upper Donald before donaldcu currency type cu-usd U.S. dollarsnu number type nu-jpanfin Japanese financial numerals

tz timezone tz-aldav Europe/Andorrava common variant type va-posix POSIX style locale variant

Page 66: 55 new things in Java 7 - Devoxx France

66

Miscellaneous

Page 67: 55 new things in Java 7 - Devoxx France

67

JDBC 4.1

• Try-with-resources statement to automatically close resources of type Connection, ResultSet, and Statement

try (Statement stmt = con.createStatement()) { //... }

• RowSet 1.1 introduces RowSetFactory and RowSetProvider//Factory options (impl) set on cmd line or metainfmyRowSetFactory = RowSetProvider.newFactory(); myRs = myRowSetFactory.createJdbcRowSet(); myRs.setUrl("jdbc:myDriver:myAttribute"); //etcmyRs.setCommand("select COF_NAME, SUP_ID, PRICE, SALES from COFFEES"); myRs.execute();

Page 68: 55 new things in Java 7 - Devoxx France

68

Java DB Enhancements

• JDK 7 includes Java DB 10.8.1.2• New Since JDK 6- BOOLEAN data type- Table truncation- Query plan browsing

- Automatic calc of index stats- Unicode database names- Improved interrupt handling

- Can now interrupt connection threads- MAX optimization (faster!)- XML operator portability

Page 69: 55 new things in Java 7 - Devoxx France

69

Security

• Native Elliptic Curve Cryptography provider (ECDSA/ECDH)- ECC offers equivalent security with smaller key sizes, faster computations

and lower power consumption.• Transport Layer Security Updates- TLS 1.1 (RFC 4346) & TLS 1.2 (RFC 5246 ) support- TLS Renegotiation- CertPath and TLS algorithm disabling

• etc.

Page 70: 55 new things in Java 7 - Devoxx France

70

Java XML Technology Enhancements

• JAXP 1.4.5- Bug fixes and performance improvements

• JAX-WS 2.2.4- Bug fixes and performance improvements

• JAXB 2.2.3- Bug fixes and performance improvements

Page 71: 55 new things in Java 7 - Devoxx France

71

JavaDoc Improvements

• Section 508 accessibility guidelines- Captions, headings, etc.

• Previously, JavaDoc wrote to an OutputStream on the fly meaning it built the document sequentially, imposing limitations

• Now uses internal “HTMLTree” classes- Generates compliant HTML- Allows for more advancements in the future

• Removes limitation of only being able to execute only once in any VM- Was fine when used as a command line tool- Continuous build, etc, made it necessary to address this!

Page 72: 55 new things in Java 7 - Devoxx France

72

CSS for JavaDoc

Page 73: 55 new things in Java 7 - Devoxx France

73