Gustavo Muñoz - justavo, kanchenjungo, zipi

Java Specification Request 270
Java SE 6 “Mustang” Release Contents
Early Draft Review
2005/12/20
Mark Reinhold, editor
Sun Microsystems

This specification defines the feature set for the next major release of the Java Standard Edition platform, code-named “Mustang,” which is currently targeted to ship in mid-2006.

Mustang is one of an ongoing series of Java SE feature releases. The goal is to ship feature releases on a regular 18–24 month cycle, with each release including a combination of quality improvements and new features.

This “umbrella” JSR does not itself define specific features; rather it enumerates features defined in other JSRs or through the concurrent maintenance review of the Java SE platform specification.

The Mustang release is still under development. At this point in time the JSR 270 Expert Group has approved all of the features listed in this document for inclusion in the release.

The final release is expected to include all of these features, but it is possible for an approved feature to be dropped. The EG could, for example, determine that a feature is too costly to implement. The final release could also include additional features that are identified and approved by the EG in response to feedback from the Java community. The final version of this specification will, in any case, reflect the actual content of the release.

Please send comments on this specification to mustang-jsr-comments@sun.com.

Copyright © 2005 Sun Microsystems, Inc., 4150 Network Circle,
Santa Clara, California 95054, U.S.A. All rights reserved.
1
Themes 

The feature set for Mustang is driven, in large part, by a set of themes.

The themes describe the main focal points of the release. Some themes are fairly abstract guiding principles; others are more concrete in that they identify particular problem areas, significant new feature sets, or specific target market segments.

The themes are not prioritized, except that the first one is the most important.

Compatibility As the platform has matured, yet continued to evolve, many community members have naturally come to expect that their investments in Java-based systems, whether large or small, will be preserved. Any program running on a previous release of the platform must also run—unchanged—on Mustang. (There are exceptions to this general rule but they are exceedingly rare, and they typically involve serious issues such as security.)

Ease of Development The Java SE 5 release made significant improvements to the developer experience with the introduction of generic types, annotations, and other language features, along with some important API simplifications. There’s more work to be done here, particularly in the areas of database access and support for scripting languages, and in underlying technologies such as source-code compilation, annotation processing, and support for better GUI design-time tools.

Diagnosability, Monitoring, & Management The Java SE platform is in regular production use as the foundation for mission-critical applications. To work well in such settings requires good support for remote monitoring, management, and diagnosis. The Java SE 5 release made progress in this area with the introduction of JMX, the Java Management Extensions, and JVMTI, the new Java Virtual Machine Tools Interface. Further improvements are needed, however; e.g., the ability to diagnose a long-running application that started without special monitoring flags, and the ability to inspect the content of a running application’s heap.

Enterprise Desktop Rich client applications have lately regained some prominence as developers have run up against the limitations of browser-based thin clients. For use in the enterprise, however, the platform is still lacking in some key areas, e.g., integration with native desktop facilities, text printing, and table display and manipulation.

XML & Web Services The Java SE 5 release, as originally proposed, was intended to include a full Web Services client stack. That work unfortunately could not be completed in time for that release, and in the meantime XML and Web Services have only increased in their importance to many members of the community.

Transparency Developers in the community have expressed a clear desire for more insight into the evolution of the Java SE platform. Many would like to review the platform specification and test the reference implementation even while work on these artifacts is in progress. Some would like to become yet more involved and contribute their own enhancements and bug fixes.

Not every feature in the release is associated with a theme. The themes outline the primary focal points of the release, but they are not meant to be exhaustive. JSR 202, e.g., the Class File Specification Update, is an important feature yet it’s not bound to any particular theme.

Not every theme, likewise, translates into a set of features. The first theme, Compatibility, captures a critical constraint on the further evolution of the platform. The last theme, Transparency, captures a broad desire that will be implemented not by any particular feature set but rather by changes in how Sun interacts with the community during the development of the platform specification and the reference implementation.

2
Component JSRs 

Each of the large new components of the Mustang release is specified in its own separate JSR. Smaller additions and changes will be specified in the concurrent JCP maintenance review of the platform specification. All features, JSRs and otherwise, are described in more detail below, but for ease of reference the component JSRs are enumerated here along with their JCP status at the time of writing.

105XML Digital-Signature APIs Final Release
173Streaming API for XML (StAX) Final Release
181Web-Services Metadata Final Release
199Java Compiler API Early Draft Review
202Java Class-File Specification Update Public Review
221JDBC 4.0 Early Draft Review
222Java Architecture for XML Binding (JAXB) 2.0 Proposed Final Draft
223Scripting for the Java Platform Public Review
224Java API for XML-Based Web Services (JAX-WS) 2.0 Proposed Final Draft
250Common Annotations Proposed Final Draft
269Pluggable Annotation-Processing API Early Draft Review

The original submission of this umbrella JSR mentioned three potential component JSRs that will not, as it turns out, be part of Mustang.

  • JSR 260, the Javadoc Tag Update, will not be included because the JSR 260 Expert Group was unable to reach consensus on a number of critical issues in time for the Mustang release.
  • JSR 268, the Java Smart-Card I/O API, will not be included because the JSR 270 Expert Group concluded that it would not be of sufficiently wide interest in the Mustang time frame.
  • The “JAXP.next” JSR will not be included because it was never submitted. Minor changes to the JAXP 1.3 API will be handled in a maintenance review of JSR 206.
3
Definitions 

Features vs. enhancements Additions to the Java SE platform specification are categorized as either features or enhancements. A feature is, roughly speaking, an addition of which at least one of the following statements is true:

  • It requires two or more weeks of engineering effort to design and implement,
  • It’s significant in size (e.g., a JSR), or
  • It’s in high demand by the Java community.

Any addition that’s not a feature is considered an enhancement.

There’s obviously quite a bit of room for interpretation in reading the above definition. In order to maximize the visibility of platform revisions we have generally tended to consider borderline items to be features rather than enhancements.

This specification only lists the features being proposed for the Mustang release. The enhancements will be documented in the concurrent Java SE maintenance review.

Areas and components Each feature is classified by the area and component of the platform that contains it. For Mustang the areas and components are:

clientDesktop and other user-interface components
2d2D Graphics
awtAbstract Window Toolkit (java.awt)
i18nInternationalization (java.text, etc.)
swingSwing UI Toolkit (javax.swing)
coreCore platform components
General core features
debugDebugging
libsLibraries (java.lang, java.io, java.util, etc.)
m&mMonitoring & Manageability (java.lang.management, etc.)
netNetworking (java.net, etc.)
secSecurity (java.security, etc.)
toolsTools (javac)
eeComponents shared with the Java EE platform
General enterprise features
jdbcJava Database Connectivity (java.sql, etc.)
xmlXML & Web Services (javax.xml, javax.ws)

For brevity a specific component is often identified by the pair consisting of its area name and its component name, separated by a forward slash. The short name of the Monitoring & Manageability component, e.g., is “core/m&m.”

Priorities Each feature is also classified by priority, a rough measure of how important it is to complete the feature in order for the release to be successful. The priorities are:

  • A Release Driver (RD) is a feature that’s critical to the success of the release.
  • A Group Driver (GD) is a feature that’s very important to the success of the release.
  • A Target of Opportunity (TO) is just what it says. If time and resources allow a TO to be completed in the reference implementation then it will be included in the final platform specification.

The Release and Group Drivers together make up the committed features of the release.

Identification numbers Finally, for ease of reference each feature has a unique three-digit identification number, which is displayed in the rightmost column of the various feature listings in this specification. These numbers have no intrinsic meaning.

4
Features sorted by area and component 
GIF image writer client / 2dTO269
Access to desktop helper applications client / awtTO239
Fast splash screens client / awtTO137
Improved modal dialogs client / awtTO058
System-tray support client / awtGD006
Pluggable locale data client / i18nGD048
Resource-bundle enhancements client / i18nTO096
Unicode string normalization client / i18nTO101
Baseline/gap APIsclient / swingTO134
Improve Swing drag-&-drop client / swingTO188
JTabbedPane: Tabs as componentsclient / swingTO196
JTable sorting, filtering, and highlightingclient / swingGD200
SwingWorkerclient / swingTO202
Text-component printing client / swingTO193
JSR 223: Scripting for the Java Platform core / GD028
Access to heap contents core / debugTO216
Attach-on-demandcore / debugGD282
Multiple simultaneous agentscore / debugTO284
JSR 202: Java Class-File Specification Update core / libsRD010
Array reallocation core / libsTO379
Collections: Deques core / libsTO398
Collections: Sorted sets and maps with bidirectional navigation core / libsTO397
Critical file-I/O enhancements core / libsGD002
Floating point: Add core IEEE 754 recommended functions core / libsTO294
java.util.concurrent updates core / libsGD364
Password prompting core / libsGD003
Reflective access to parameter namescore / libsTO402
Service-provider lookup core / libsTO083
Generalized lock monitoring core / m&mTO136
Generalized MBean descriptors core / m&mGD371
Generic annotations for MBean descriptor contentscore / m&mTO373
MXBeans core / m&mGD372
Internationalized domain names core / netTO107
Internationalized resource identifierscore / netTO108
Programmatic access to network parameterscore / netTO115
Simple HTTP cookie manager core / netTO119
JSR 105: XML Digital-Signature APIs core / secRD022
JSR 199: Java Compiler API core / toolsRD027
JSR 269: Pluggable Annotation-Processing API core / toolsRD009
JSR 250: Common Annotations ee / GD368
JSR 221: JDBC 4.0 ee / jdbcRD025
JSR 173: Streaming API for XML (StAX) ee / xmlRD024
JSR 181: Web-Services Metadata ee / xmlRD399
JSR 222: Java Architecture for XML Binding (JAXB) 2.0 ee / xmlRD021
JSR 224: Java API for XML-Based Web Services (JAX-WS) 2.0 ee / xmlRD020
JavaBeans Activation Framework (JAF) 1.1ee / xmlRD378
5
Features sorted by priority 
Release drivers (RD)
JSR 202: Java Class-File Specification Update core / libs010
JSR 105: XML Digital-Signature APIs core / sec022
JSR 199: Java Compiler API core / tools027
JSR 269: Pluggable Annotation-Processing API core / tools009
JSR 221: JDBC 4.0 ee / jdbc025
JSR 173: Streaming API for XML (StAX) ee / xml024
JSR 181: Web-Services Metadata ee / xml399
JSR 222: Java Architecture for XML Binding (JAXB) 2.0 ee / xml021
JSR 224: Java API for XML-Based Web Services (JAX-WS) 2.0 ee / xml020
JavaBeans Activation Framework (JAF) 1.1ee / xml378
Group drivers (GD)
System-tray support client / awt006
Pluggable locale data client / i18n048
JTable sorting, filtering, and highlightingclient / swing200
JSR 223: Scripting for the Java Platform core / 028
Attach-on-demandcore / debug282
Critical file-I/O enhancements core / libs002
java.util.concurrent updates core / libs364
Password prompting core / libs003
Generalized MBean descriptors core / m&m371
MXBeans core / m&m372
JSR 250: Common Annotations ee / 368
Targets of opportunity (TO)
GIF image writer client / 2d269
Access to desktop helper applications client / awt239
Fast splash screens client / awt137
Improved modal dialogs client / awt058
Resource-bundle enhancements client / i18n096
Unicode string normalization client / i18n101
Baseline/gap APIsclient / swing134
Improve Swing drag-&-drop client / swing188
JTabbedPane: Tabs as componentsclient / swing196
SwingWorkerclient / swing202
Text-component printing client / swing193
Access to heap contents core / debug216
Multiple simultaneous agentscore / debug284
Array reallocation core / libs379
Collections: Deques core / libs398
Collections: Sorted sets and maps with bidirectional navigation core / libs397
Floating point: Add core IEEE 754 recommended functions core / libs294
Reflective access to parameter namescore / libs402
Service-provider lookup core / libs083
Generalized lock monitoring core / m&m136
Generic annotations for MBean descriptor contentscore / m&m373
Internationalized domain names core / net107
Internationalized resource identifierscore / net108
Programmatic access to network parameterscore / net115
Simple HTTP cookie manager core / net119
6
Feature details 

This JSR does not itself define specific features, as noted earlier. As a convenience to the reader, however, links to relevant online draft specifications, or to entries in Sun’s public bug database, are provided when such documents exist. These links are not a normative part of this specification.

In the list that follows each feature is identified by a header line consisting of its name on the left and its component and area, priority, and identification number on the right.

client / 2d · TO · 269
GIF image writer  

GIF is a very common image format but, due to IP issues, the platform has never supported writing GIF files. Now that the relevant patent has expired we should fix this long-standing sore spot.

No new classes or methods are required here; the bulk of the changes merely revise the specification of the javax.imageio package to require support for writing the GIF format.

client / awt · TO · 239
Access to desktop helper applications  

Allow Java applications to access helper applications registered in the native desktop. An application should be able to display an arbitrary URL in a new window in the user’s preferred browser, launch the user’s preferred mail composer to create and send a mail message, and display files via viewer programs chosen by MIME type or file extension (e.g., Acrobat Reader for PDF files).

client / awt · TO · 137
Fast splash screens  

Splash screens are a standard part of modern GUI applications. Their primary purpose is to provide feedback to the user that the application is starting up. By employing a polished and professional splash screen, an application can occupy the user’s attention and assure the user that the application will soon be ready. Second, splash screens can provide marketing information. Finally, splash screens are sometimes required for legal reasons to present copyright information, third party logos, etc.

It is possible to employ Swing or AWT to create splash screens for Java applications today. The main purpose of a splash screen is to provide feedback during application startup, however, so the delay between the moment an application is launched and the moment when the splash screen appears should be minimal. Before a pure Java splash screen can be displayed the application loads and initializes the JVM, the AWT subsystem, perhaps Swing, and also possibly some application-dependent libraries. This imposes a multi-second delay, so a pure Java splash screen cannot satisfy these timing requirements.

This feature will implement initial splash-screen display in native code, prior to the actual launching of the VM. It will support GIF, JPEG and PNG format images, including transparency (GIF, PNG) and animation (GIF). Splash-screen images can be specified on the command line or, more usually, in a header in the application’s JAR manifest file. The splash screen will be removed automatically when the application displays its first window.

This feature will also provide a simple Java API for controlling the splash screen once the application has started.

This feature will not have any impact on startup time if the splash screen is not used.

client / awt · TO · 058
Improved modal dialogs  

From its introduction AWT has only offered one type of modal dialog: Whenever a dialog window is displayed then all windows in the application are blocked. Other toolkits and platforms offer different dialog modalities, which developers are now expecting. OS X, e.g., makes extensive use of window-level modality, in which only the parent window of a modal dialog is blocked.

Another important missing feature is the ability to exempt a particular window from being blocked by modal dialogs at all. A widely distributed help system for java applications, JavaHelp, has been suffering from this problem for years. Modal dialogs shown from the application completely disable the help window, thereby making it useless.

client / awt · GD · 006
System-tray support  

Every modern desktop has a “system tray” or equivalent where native applications can display icons to notify the user of application events or allow access to extra functionality for applications that don’t have to be constantly visible in main window on the desktop. System-tray support is one of the key user-interface elements whose absence makes Java applications look less appealing than native applications.

This feature will define a cross-platform API for system trays that can be reasonably implemented on all known windowing systems.

client / i18n · GD · 048
Pluggable locale data  

Third parties need to be able to add support for new locales to the JRE. This feature will define a new set of “pluggability” APIs so that an existing JRE can be augmented with additional locale data.

The getAvailableLocales methods of most existing locale-sensitive classes will return any newly-added locales, and their getInstance methods will return appropriately-localized objects. The data behind the following classes will be extensible:

java.text: BreakIterator, Collator, DateFormat, DateFormatSymbols, DecimalFormat, DecimalFormatSymbols, NumberFormat
java.util: Currency, Locale, TimeZone (text only, not zone data)

The main benefit of such extensibility is that third parties will be able to provide support for locales for which Java SE platform implementors lack the necessary expertise.

This feature will not revise the java.util.Calendar class along similar lines since that class is not well-suited to supporting non-Gregorian calendars. Pluggable locale support for calendars may be considered in a future release if and when a more general date/time API is introduced.

client / i18n · TO · 096
Resource-bundle enhancements  

The ResourceBundle class is in need of several minor enhancements:

  • A way to remove a bundle from the cache so that it can be reloaded, e.g., in a long-running application;
  • A way to support bundles in arbitrary non-standard formats, e.g., XML;
  • A way for developers to define their own bundle search strategies; and
  • A way to define resource bundles without having to declare them as public classes.

This feature will address these requirements by breaking the current fixed bundle-loading process into its constituent parts so that applications can customize the behavior of each part via callback methods. The bundle cache and its behavior, which was previously implicit, will also be made explicit as well as customizable.

client / i18n · TO · 101
Unicode string normalization  

An API for normalizing Unicode strings. The ability to transform Unicode strings into one of the standard normal forms is important for text processing and for supporting various external standards such as internationalized domain names and XML canonicalization.

client / swing · TO · 134
Baseline/gap APIs 

To enable the creation of GUI layouts that are independent of any particular look-&-feel, and to enable more intuitive layout managers and development tools, this feature will extend Swing to provide APIs for

  • Determining the preferred distances (i.e., gaps) between components depending upon the guidelines for a given look-&-feel, and for
  • Determining the position of text baselines and arranging for components to be aligned vertically on their text baselines.
client / swing · TO · 188
Improve Swing drag-&-drop  

Currently it’s difficult for programmers to use drag-&-drop with Swing—only a small handful of Swing components have easy-to-use drag-&-drop support. There are two major problems:

  • A drop location is indicated by moving the selection around within the component under which drag-&-drop is occurring. This fires unnecessary selection events, is not customizable, and is hardly ever what the user wants.
  • Swing provides no support at all for customizing what data can be inserted at what locations in the component. User code is provided very few details about the actual transfer when asked whether or not it can accept it, it’s only asked once (not based on position in the component), and it’s given the same sparse information when it’s time to import the data.

This feature will define new APIs to allow user code to specify one of several new drop modes on components that support drops. This will provide more flexible ways to insert data and will allow drop locations to be indicated without affecting selection. Drop locations will be calculated based on the drop mode and will be returned to user code during drag-&-drop operations.

client / swing · TO · 196
JTabbedPane: Tabs as components 

Currently tabs can contain only an icon, text, or HTML. Many modern applications, e.g., Mozilla, now support a richer user experience with tabbed panes that can only be done in Swing if we allow arbitrary components to be added to a tabbed pane. This will make it possible, e.g., to have both a text label and a close button on each tab.

client / swing · GD · 200
JTable sorting, filtering, and highlighting 

It’s very common for developers—especially in the corporate world—to want to sort, filter, and highlight the contents of JTables. It’s unnecessarily hard to do so, however, hence developers typically wind up either rolling their own or using a third-party sorting framework. This feature will add this missing functionality to Swing.

client / swing · TO · 202
SwingWorker 

To effectively create a Swing application one needs to use multiple threads, especially when interacting with remote resources such as databases or web services. Swing is not thread safe, however, which makes this a daunting and arduous task.

The SwingWorker class makes multi-threaded Swing programming much easier. It was originally published on java.sun.com more than six years ago and since that time many developers have requested that it be integrated into the platform.

client / swing · TO · 193
Text-component printing  

It’s presently difficult, though possible, to print the contents of a Swing text component as a document rather than as a printed rendering of the component itself. This feature will integrate basic printing support into the JTextComponent class.

core / – · GD · 028
JSR 223: Scripting for the Java Platform  

A large percentage of Java developers also use scripting languages. While the Java language is suitable for many tasks, and especially for writing robust, long-lived applications, scripting languages are useful for many other tasks.

JSR 223 defines a framework for connecting interpreters of arbitrary scripting languages to Java programs. It includes facilities for locating the available scripting engines, invoking scripts from Java code and vice versa, and making Java application objects visible to scripts. The framework is divided into two parts, the Scripting API and an optional Web Scripting Framework. This feature will incorporate just the Scripting API into this version of the Java SE platform.

There will be no requirement that any particular scripting language be supported by the platform; implementors may choose to include support for the scripting language(s) of their choice as they see fit.

core / debug · TO · 216
Access to heap contents  

To support the implementation of leak detectors and other kinds of heap-analysis tools this feature will extend JVMTI, the Java Virtual Machine Tools interface, and JDWP, the Java Debug Wire Protocol, to support the retrieval of information about all instances of a given class, and all objects referring to a particular instance, within a running virtual machine.

core / debug · GD · 282
Attach-on-demand 

Sometimes it’s necessary to connect a monitoring, debugging, or profiling tool to a running virtual machine that was not started with any of the special command-line flags that enable such connections.

This feature will extend the JVMTI and java.lang.instrument specifications to support the starting of agents in an already-running VM.

core / debug · TO · 284
Multiple simultaneous agents 

Both JVMTI and java.lang.instrument were designed to support multiple simultaneous independent tool agents. If more than one such agent is attempting to insert instrumentation, however, then they will interfere with each other. These existing interfaces are also flawed in that they model the process of instrumenting a class as a replacement operation, so it’s not always possible for a transformer to access the original bytecodes of the class it’s transforming nor is it possible to safely remove instrumentation once a tool’s task is finished.

This feature will address these problems by extending these interfaces to support an event-based retransformation operation.

core / libs · RD · 010
JSR 202: Java Class-File Specification Update  

An update to the Java class-file format to add support for the “split verification” architecture pioneered in the Java ME platform (see JSRs 30 and 139). This technique enables improved performance as well as a higher level of confidence in the Java security model since the runtime verification logic is itself easier to prove correct.

core / libs · TO · 379
Array reallocation  

It’s often the case that arrays cannot be sized accurately before they are filled. This implies a resizing operation via the System.arrayCopy method, which is not statically type-safe and whose order of arguments is notoriously difficult to remember. If the initial allocation of the array is generous enough, moreover, the copy operation might be performed infrequently enough to make testing haphazard, raising the likelihood of post-release bugs.

This feature will add convenience methods to the java.util.Arrays class that will make it easier to expand, or contract, the size of an array by providing operations that both allocate a new array and copy data in from an existing array.

core / libs · TO · 398
Collections: Deques  

Users have long wanted the ability to have bi-directional variants of queues and lists, along with iterators that visit their elements in a descending direction.

This feature will define two new interfaces, Deque and BlockingDeque, along with basic implementations. It will also retrofit existing interfaces and classes to support these new interfaces where appropriate.

This is a community contribution from past members of the JSR 166 Expert Group.

core / libs · TO · 397
Collections: Sorted sets and maps with bidirectional navigation  

Users want sorted collections (sets and maps) with more capabilities, in particular the ability to search bidirectionally, and to find elements strictly less than or greater than a given element.

This feature will extend each of the existing SortedSet and SortedMap interfaces with a new interface, NavigableSet and NavigableMap, respectively, and provide concurrent implementations of these new interfaces. It will also retrofit existing interfaces and classes to support these new interfaces where appropriate.

This is a community contribution from past members of the JSR 166 Expert Group.

core / libs · GD · 002
Critical file-I/O enhancements  

Developers have long been asking for a way to discover the amount of free space in a filesystem and for methods to manipulate file attributes. These requests will eventually be addressed fully by JSR 203, but in the meantime the lack of even basic functionality in these areas is causing lots of frustration.

As an interim measure this feature will add a handful of new methods to the java.io.File class to support

  • The discovery of the amount of free disk space, in bytes, in the filesystem partition named by a given File instance; and
  • The examination and modification of simple cross-platform file attributes including readability, writability, and executability.
core / libs · TO · 294
Floating point: Add core IEEE 754 recommended functions  

The Java math libraries do not include many of the IEEE 754 recommended low-level functions for manipulating and examining floating-point values. These functions are needed for both implementing and testing floating-point libraries. This feature will add the core IEEE-recommended functions scalb, getExponent, nextAfter, nextUp, and copySign for both float and double types.

core / libs · GD · 364
java.util.concurrent updates  

Several members of the JSR 166 Expert Group have continued working to refine and extend the interfaces and classes defined by that specification. This feature will integrate a set of minor fixes and additions including, but not limited to:

5057341 TimeUnit needs additional enum constants for longer durations
5073546 Minor ConcurrentHashMap constructor spec tweaks
6237968 Add AbstractQueuedLongSynchronizer
6267833 Incorrect method signature ExecutorService.invokeAll()
6275329 Add lazySet methods to atomic classes
6277663 Improve extensibility of thread pools
6330307 Improve CopyOnWriteArraySet, CopyOnWriteArrayList equals methods
core / libs · GD · 003
Password prompting  

Many Java applications require the ability to prompt for a password without revealing the password on the screen. GUI applications can do this today, but command-line applications cannot, at least not without resorting to native code and JNI.

This feature will define a new API for interactive console I/O that can disable character echoing while reading passwords.

core / libs · TO · 402
Reflective access to parameter names 

Practical experience with annotations has identified situations in which it’d be useful to be able to access the names of method and constructor parameter names. This is particularly relevant to JSRs 181 (Web-Services Metadata) and 224 (JAX-WS 2.0), but it may also be of use in other JSRs such as 255(JMX 2.0) and 274 (Design-Time API for JavaBeans).

This feature will provide access to the names of constructor and method parameters at runtime via the reflection API. To do this effectively will probably require the introduction of a new core annotation, or perhaps a meta-annotation, to identify constructors and methods whose parameter names should be recorded in class files. Otherwise this feature would only work with class files containing full debug information; such class files are larger than is desirable in production settings.

core / libs · TO · 083
Service-provider lookup  

The JAR file format was extended in J2SE 1.3 to support a standard way of specifying pluggable “service providers.” Many subsystems in the platform now use this mechanism, including image I/O, input methods, naming, networking, new I/O, printing, security, sound, and XML. Many of these subsystems use an implementation-internal utility class for looking up services and instantiating providers; there is no standard API offering such functionality.

This feature will refine the internal utility class as needed and then promote it into the java.util package. This will make it easier for both internal and external developers to make use of the JAR-file service-provider feature, which has become very widely used.

core / m&m · TO · 136
Generalized lock monitoring  

Existing facilities for diagnosing synchronization problems, and in particular the ThreadInfo class, only report information about object monitors; they do not report on the java.util.concurrent locks introduced in the J2SE 5 release. This will make the diagnosis of synchronization problems much more difficult as applications begin to make use of these new types of locks.

This feature will extend the existing monitoring APIs to provide diagnostic information about all types of monitors and locks.

core / m&m · GD · 371
Generalized MBean descriptors  

Additional metadata about a Model MBean can be provided via Descriptors. A descriptor can be attached to a ModelMBeanInfo object to describe the MBean itself as well as to instances of the various ModelMBean*Info classes to describe the components of the MBean.

This feature will generalize the specification so that descriptors can be associated with all types of MBeans, not just Model MBeans. This will make it much easier to communicate various kinds of metadata such as

  • Resource bundle names and keys that localize descriptions and other text in an MBeanInfo object,
  • Constraints on attribute and parameter values,
  • Units and other descriptive information, and
  • Additional metadata from other, related management models (e.g., SNMP OIDs or CIM qualifiers).
core / m&m · TO · 373
Generic annotations for MBean descriptor contents 

Feature 371 proposes adding descriptor support to all types of MBeans. This allows instances of MBeanInfo and associated classes to include arbitrary extra information beyond the fixed fields that are currently defined.

Given that descriptors will be available for Standard MBeans, and that the MBeanInfo class for a Standard MBean is derived from a Java interface, it would be convenient to be able to add annotations to the Java interface to define the descriptor contents. This would provide an immediate way for a tool that generates Standard MBeans from an existing management model to include information from the model in the generated MBean interfaces, rather than in separate files, and for clients of the generated MBeans to retrieve this information in an obvious way.

This feature will define a generic mechanism by which users can define custom annotations that map to specific descriptor fields.

core / m&m · GD · 372
MXBeans  

A persistent problem with JMX modeling is that one often needs a type that is an atomic snapshot of a collection of values, e.g., ThreadInfo, but clients of the model cannot be required to have that type present—especially since the type might change between versions.

Open MBeans are one solution to this problem but they are, unfortunately, difficult to use. The J2SE 5 release introduced the notion of MXBeans, but these were only implemented for the platform’s built-in MBean server. This feature will add full support for MXBeans to the base JMX infrastructure.

core / net · TO · 107
Internationalized domain names  

Domain names on the Internet are moving beyond ASCII. This feature will add support for internationalized domain names as specified by RFCs 3490, 3491, and 3492.

core / net · TO · 108
Internationalized resource identifiers 

URIs on the Internet are moving beyond ASCII too. This feature will add support for internationalized resource identifiers as specified by RFCs 3986 and 3987.

core / net · TO · 115
Programmatic access to network parameters 

Many applications need more information about the capabilities and current state of the underlying system’s network interfaces than is currently provided. This feature will extend the existing NetworkInterface class to include, at least, the following kinds of information:

  • Broadcast address
  • Subnet mask
  • MAC/hardware address
  • MTU size
  • State (i.e., up or down)
  • Is multicast supported?
  • Is this the loopback interface?
  • Is this interface’s address dynamic?
  • Is this a subinterface (i.e., a virtual address)?
core / net · TO · 119
Simple HTTP cookie manager  

J2SE 5 introduced a CookieHandler API so that applications could control how cookies are managed on the client side of an HTTP connection. No implementations of this abstract class were provided, however, so application developers were left to roll their own.

This feature will define a simple implementation of the CookieHandler API that’s sufficiently customizable to meet the needs of most applications.

core / sec · RD · 022
JSR 105: XML Digital-Signature APIs  

The XML Signature standard is a key part of Web Services Security. It’s therefore required by JSR 224 (JAX-WS 2.0), though it’s also useful in its own right.

core / tools · RD · 027
JSR 199: Java Compiler API  

This JSR will define a service-provider API that allows a Java program to select and invoke a Java language compiler programmatically, retrieve errors and other messages in a structured fashion, and access the dependency information computed by the compiler. This will fulfill a longstanding request from many Java tools vendors.

The specification will not mandate the inclusion of a Java language compiler in a Mustang JRE; it will merely permit it.

core / tools · RD · 009
JSR 269: Pluggable Annotation-Processing API  

This JSR will define a standard API to support the processing of JSR 175 annotations.

As with JSR 199, the Java Compiler API, the specification will not require that a Mustang JRE support annotation processing; it will merely permit it.

ee / – · GD · 368
JSR 250: Common Annotations  

JSR 250 will define a small set of common annotations that will be available for use in other specifications. Some of the annotations are specific to the Java EE platform. This feature will incorporate just those annotations that are relevant to the Java SE 6 platform and are of use in other component JSRs such as JSR 224 (JAX-WS 2.0).

ee / jdbc · RD · 025
JSR 221: JDBC 4.0  

JDBC 4.0 is the latest revision of the core Java database access standard. The highlights of this version are:

  • Automatic driver loading via the Java SE service-provider mechanism;
  • Annotations that ease the development of applications that manipulate data in relational (table) form rather than via an object/relational mapping;
  • Support for SQL ROWIDs;
  • Enhanced support for BLOBs and CLOBs;
  • SQL/XML support, as defined in SQL:2003; and
  • Improved connection management.

This feature will integrate JDBC 4.0 into the Java SE platform.

ee / xml · RD · 024
JSR 173: Streaming API for XML (StAX)  

JSR 173 defines a streaming-parser API for XML. Streaming parsers, also called “pull” parsers, offer performance competitive with existing SAX parsers but an interface that’s much easier to use. StAX is also a foundational technology for JSR 222 (JAXB 2.0) and JSR 224 (JAX-WS 2.0).

ee / xml · RD · 399
JSR 181: Web-Services Metadata  

JSR 181 defines a simplified programming model for Web Services based upon a set of annotations. These annotations are used by JSR 224 (JAX-WS 2.0).

ee / xml · RD · 021
JSR 222: Java Architecture for XML Binding (JAXB) 2.0  

JSR 222 is a major revision of the JAXB 1.1 specification. Its primary goals are

  • Full support for W3C XML Schema;
  • The ability to bind existing Java classes, which may include customizing annotations, to an XML schema generated from those classes;
  • Simplified bindings that leverage the language features introduced in Java SE 5; and
  • The portability of JAXB-generated classes across different implementations.

This feature will integrate JAXB 2.0 into the Java SE platform.

ee / xml · RD · 020
JSR 224: Java API for XML-Based Web Services (JAX-WS) 2.0  

JSR 224 is a major revision of the JAX-RPC 1.1 specification. Its primary goals are

  • Full integration with JSR 222 (JAXB 2.0);
  • Support for the latest Web Services standards, including SOAP 1.2, WSDL 2.0, and the WS-I Basic Profile 1.1;
  • Improved ease-of-development via annotations that will simplify the most common development scenarios;
  • Support for client-side asynchronous operations; and
  • The portability of JAX-WS-generated classes across different implementations.

This feature will incorporate the core and client portions of the JAX-WS 2.0 specification into the Java SE platform.

ee / xml · RD · 378
JavaBeans Activation Framework (JAF) 1.1 

The JAF is a simple data typing and registry framework. It provides standard services for determining the MIME type of an arbitrary piece of binary data, encapsulating access to it, discovering the operations available on it, and instantiating an appropriate bean to perform those operations.

The JAF is required by JSR 224 (JAX-WS 2.0), though it’s also useful in its own right.

PROCESS NOTE: The JAF specification predates the Java Community Process. Some minor revisions were recently proposed under JSR 925.