41
Java 7: What’s Next? Alex Miller, BEA Systems

Java 7: What’s Next? Alex Miller, BEA Systems. Java 7 Proposals Java Modularity Superpackages Java Module System

  • View
    232

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

Java 7:What’s Next?

Alex Miller, BEA Systems

Page 2: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Java 7 Proposals

Java Modularity Superpackages Java Module System Java Kernel

Swing Swing App Framework Bean Binding Bean Validation

Generics and Types Generic Reification Type Annotations Short instance creation

NIO 2 XML Support Property Support Closures invokedynamic Date & Time API Units & Quantities JMX

JMX 2.0 Remote API Connector

Javadoc

Page 3: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Java Modularity

Superpackages (JSR 294) Java Module System (JSR 277) Java Kernel (no JSR)

Page 4: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Superpackages (JSR 294)

src/com/foo/super-package.java:

superpackage com.foo {member package com.foo.api, com.foo.model, com.foo.util;export com.foo.api; // Make api package public

}

Page 5: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Java Module System (JSR 277)

Page 6: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Module Definition Metadata/MODULE-INF/METADATA.module:

name=com.wombat.webservice

extensible-metadata=[@Version(”1.0”)]

members=[com.wombat.webservice.MainApp, com.wombat.webservice.PrivateClassA, com.wombat.webservice.PrivateInterfaceB]

imports=[ImportModule(org.foo.xml, @VersionConstraint(”1.3.0”)),

ImportModule(org.foo.soap, @VersionConstraint(”2.0.0+”))]

class-exports=[com.wombat.webservice.MainApp]

Page 7: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Java Kernel

Reorganize JRE into kernel + optional modules, load dynamically

Compete with Flex, Silverlight

Page 8: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Swing Enhancements

Swing Application Framework (JSR 296) Bean Binding Framework (JSR 295) Bean Validation Framework (JSR 303)

Page 9: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Swing Application FrameworkJSR 296

SingleFrameAppliction

SingleFrameAppliction

ApplicationApplication

initialize(String[] args)startup()shutdown()exit()

initialize(String[] args)startup()shutdown()exit()

ApplicationContextApplicationContext

getInstance()getInstance()

ActionManagerAction

Manager

ResourceManager

ResourceManager

SessionStorageSessionStorage

TaskTask

SwingWorkerSwingWorker

ApplicationActionMapApplicationActionMap

TaskMonitor

TaskMonitor TaskServiceTaskService

*

@Action@Action

LocalStorageLocal

Storage

ResourceMap

ResourceMap

ResourceConverterResourceConverter

Page 10: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Swing App Framework Demo

Page 11: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Bean Binding Framework JSR 295 Use a Binding to bind properties of two beans together:Binding binding = new Binding(source, "sourcePath",

target, "targetPath");binding.bind(); Once bound, changes on either source or target are

reflected on the other Changes go through a BindingConverter and a

BindingValidator along the way The JSP expression language (EL) is used to specify

conversions

Page 12: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Bean ValidationJSR 303 Here’s an example from Hibnerate Validator that may be evocative (although I have no

idea what JSR 303 will actually look like:

public class Address { @NotNull private String line1; private String line2; private String zip; private String state;

@Length(max = 20) @NotNull private String country;

@Range(min = -2, max = 50, message = "Floor out of range") public int floor;

}

Page 13: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Reification of Generics

class NewCollection<class E> extends Collection<E> { ... }

class NewList<class E> extends NewCollection<E>, List<E> { ... }

Page 14: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Annotations on Java TypesJSR 308 for generic type arguments to parameterized classes:

Map<@NonNull String, @NonEmpty List<@Readonly Document>> files; for generic type arguments in a generic method or constructor invocation:

o.<@NonNull String>m("..."); for type parameter bounds and wildcards:

class Folder<F extends @Existing File> { ... }Collection<? super @Existing File>

for class inheritance:class UnmodifiableList<T> implements @Readonly List<@Readonly T> { ... }

for throws clauses:void monitorTemperature() throws @Critical TemperatureException { ... }

for typecasts:myString = (@NonNull String) myObject;

for type tests:boolean isNonNull = myString instanceof @NonNull String;

for object creation:new @NonEmpty @Readonly List<String>(myNonEmptyStringSet)

Page 15: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Short instance creation

public static void main(String[] args) { map := new HashMap<String, Integer>(); for(word : args) {

freq := map.get(word); map.put(word, (freq==null) ? 1 : freq+1);

} System.out.println(map); }

public static void main(String[] args) {

final map = new HashMap<String, Integer>(); for(final word : args) {

final freq = map.get(word); map.put(word, (freq==null) ? 1 : freq+1);

} System.out.println(map); }

Page 16: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

NIO 2 (JSR 203)

Major features: New filesystem interface

Permissions File attributes Pluggable implementations Escape to filesystem-specific APIs

API for asynchronous I/O on sockets and files Completion of socket channels (multicast, options,

etc)

Page 17: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

NIO 2 – File System API

FileSystemsFileSystems FileSystemFileSystem

FileReferenceFileReference

FileSystemProvider

FileSystemProvider

WatchableWatchable

WatchServiceWatchServiceCloseableCloseable

PathReferencePathReferenceBackingFileSystem

BackingFileSystem PathPath

FileSystemAttributeViewFileSystem

AttributeViewFileFile

DiskSpaceAttributeView

DiskSpaceAttributeView

DirectoryDirectory

WatchKeyWatchKey

FileIdFileId

WatchEventWatchEvent

FilesFiles

Page 18: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

NIO 2: Copying a File

PathReference source = PathReference.from(“spongebob.jpg”);

PathReference target = PathReference.from(“squarepants.jpg”);

int flags = CopyFlag.COPY_ATTRIBUTES | CopyFlag.REPLACE_EXISTING;

source.copyTo(target, flags);

Page 19: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

NIO 2 – Accessing file permissions

PathReference ref = PathReference.from("foo.txt");PosixFileAttributeView view =

ref.newFileAttributeView(PosixFileAttributeView.class); PosixFileAttributes attrs = view.readAttributes(); int perms = attrs.getPermissions();

// prints "-rw-r--r-- alice bandits" System.out.format("%s\t%s\t%s%n", PosixFilePermission.toString(perms),

attrs.getOwner(), attrs.getGroup());

// deny others perms &= ~OTHERS_READ & ~OTHERS_WRITE & ~OTHERS_EXECUTE;view.updatePermissions(perms);

// change groupUserPrincipal cops = view.lookupPrincipalByGroupName("cops");

view.updateOwners(null, cops);

Page 20: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

XML Support: Construction

void addReviewer(XML feature,

String reviewer,

String time) {

feature.add(<reviewed>

<who>{ reviewer }</who>

<when>{ time }</when>

</reviewed>);

}

Page 21: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

XML Support: Data Coder

package java.xml;abstract class DataCoder {

String encode(Object o);String encode(Object o, String type);<T> T decode(String data, Class<T> c);<T> T decode(String data, Class<T> c, String type);boolean supports(Class<?> c);boolean supports(Class<?> c, String type);

static final DataCoder JAVA;static final DataCoder XSD;

}

Page 22: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

XML Support: Datacoder example

void addReviewer(XML feature,

String reviewer,

Timestamp time) {

DataCoder dc = DataCoder.XSD;

feature.add(<reviewed>

<who>{ reviewer }</who>

<when>{ dc.encode(time) }</when>

</reviewed>);

}

Page 23: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

XML Support: Navigation

void rejectOpenFeatures(XML featureList) {

List<XML> fs = featureList.findAll( “feature[state!=‘approved’]”);

for(XML f : fs) {

f.get(“state”).set(“rejected”);

}

}

Page 24: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Property Support

New keyword proposal:public class Point {

property double x;property double y;

}Point p = new Point(1, 2);System.out.println(p.x + " " + p.y);

New accessor syntax proposal:Point p = new Point();p->X = 56;p->Y = 87;int z = p->X;

Also ideas around annotations, code gen, and various other syntaxes

Page 25: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Closures - Abstraction

void validateWithMax(Stat[] stats, final int max) throws InvalidStatException { for(Stat stat : stats) { if(! (stat.value() <= max)) {

throw new InvalidStatException(); }

} }

void validateWithMin(Stat[] stats, final int min) throws InvalidStatException { for(Stat stat : stats) { if(! (stat.value() >= min)) { throw new InvalidStatException(); } }}

Page 26: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Closures – Inner Classes

void validateWithMax(Stat[] stats, final int max) throws InvalidStatException {validate( stats, new Validator() {

public boolean isValid(Stat stat) { return stat.value() <= max; }} ); }

void validateWithMin(Stat[] stats, final int min) throws InvalidStatException {validate( stats, new Validator() { public boolean isValid(Stat stat) { return stat.value() >= min; }

} ); }

interface Validator { boolean isValid(Stat stat); }void validate(Stat[] stats, Validator validator) {

for(Stat stat : stats) {if(! validator.isValid(stat)) { throw new InvalidStatException(); }

}}

Page 27: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Closure Proposals

BGGA – Gilad Bracha, Neal Gafter, James Gosling, Peter von der Ahe

CICE – “Concise Instance Creation Expressions” Josh Bloch, Bob Lee, Doug Lea

FCM – “First Class Methods” / JCA “Java Control Abstraction” Stephen Colebourne, Stefan Schulz, Ricky Clarkson

Page 28: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Closures - CICE

void validateWithMax(Stat[] stats, int max) throws InvalidStatException {

validate( stats,

Validator(Stat stat) {

return stat.value() <= max;

} );

}

The Validator interface and validate() method are unchanged.

Page 29: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Closures - BGGA

void validateWithMax(Stat[] stats, int max) throws InvalidStatException {validate(stats, {Stat stat =>

stat.value() <= max});

}

void validate(Stat[] stats, {Stat stat => boolean} block) {for(Stat stat : stats) {

if(! block.invoke(stat)) {throw new InvalidStatException();

}}

}

Page 30: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Closures - FCM

void validateWithMax(Stat[] stats, final int max) throws InvalidStatException {validate( stats,

#(boolean(Stat stat)) { return stat.value() <= max;

} );}

void validate(Stat[] stats, #(boolean(Stat)) block) {for(Stat stat : stats) {

if(! block.invoke(stat)) {throw new InvalidStatException();

}}

}

Page 31: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Closures – Control Constructs

File file = ...;FileReader reader = null;try { reader = new FileReader(file); reader.read…

} finally { if (reader != null) { try { reader.close(); } catch (IOException e) { // ignore }}

Page 32: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Closures - JCA

File file = ...;usingFileReader(FileReader reader : file) { reader.read…}

public static void usingFileReader(#(void(FileReader)) block : File file) throws IOException { FileReader reader = null; try { reader = new FileReader(file); block.invoke(reader); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { } }}

Page 33: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Closures - BGGA

File file = ...;usingFileReader(FileReader reader : file) { reader.read…}

public static <T,throws E extends Exception>T usingFileReader(File file, {=>T throws E} block) throws E { FileReader reader = null; try { reader = new FileReader(file); return block.invoke(reader); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { } }}

Page 34: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

invokedynamic

Page 35: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Date / Time API

Page 36: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Units and Quantities (JSR 275)UnitUnit

DerivedUnitDerivedUnit

ProductUnitProductUnit

SISI

BaseUnitBaseUnit

AlternateUnitAlternateUnit TransformedUnitTransformedUnit

UnitFormatterUnitFormatter

NonSINonSI

ConverterConverter

MultiplyConverterMultiplyConverter AddConverterAddConverter LogConverterLogConverter

DimensionDimension

Page 37: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Units Example

// Conversion between units.KILO(METER).getConverterTo(MILE).convert(10) 6.2137119223733395 // Retrieval of system unit (identifies the measurement type). REVOLUTION.divide(MINUTE).getSystemUnit() rad/s // Dimension checking (allows/disallows conversions) ELECTRON_VOLT.isCompatible(WATT.times(HOUR)) true

// Retrieval of unit dimension (depends upon the current model).ELECTRON_VOLT.getDimension() [L]²·[M]/[T]²

Page 38: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

JMX

JMX 2.0 (JSR 255)Retrofit with genericsUse annotationsMake Open MBeans easier to useGeneralize monitors to support non-simple

typesCascaded/federated MBean servers

Web services connector (JSR 262)

Page 39: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Javadoc (JSR 260)

New tags for examples, etc New categorizations of method types,

bean properties, etc Update the old school look

Page 40: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Miscellaneous

BigDecimal operator supportBigDecimal a = …BigDecimal b = …BigDecimal s = a + b;

Allow String literals in switch case blocksswitch(stooge) {

case ‘Moe’: …

Comparison support for enumsJACK < QUEEN

Page 41: Java 7: What’s Next? Alex Miller, BEA Systems.  Java 7 Proposals Java Modularity  Superpackages  Java Module System

http://tech.puredanger.com/java7

Thanks!

My blog: http://tech.puredanger.com Java 7: http://tech.puredanger.com/java7