Printed: Jul 14, 2024

Standard Format

Expert Group

Summary  |  Proposal  |  Detail (Summary & Proposal)  |  Nominations
JSRs: Java Specification Requests
JSR 107: JCACHE - Java Temporary Caching API

Stage Access Start Finish
Maintenance Review Ballot 2 View results 05 Mar, 2019 11 Mar, 2019
Maintenance Draft Review 2 Download page 31 Jan, 2019 02 Mar, 2019
Maintenance Review Ballot View results 05 Dec, 2017 11 Dec, 2017
Maintenance Draft Review Download page 19 Oct, 2017 18 Nov, 2017
Final Release Download page 18 Mar, 2014  
Final Approval Ballot View results 04 Mar, 2014 17 Mar, 2014
Proposed Final Draft Download page 24 Oct, 2013  
Public Review Ballot View results 27 Aug, 2013 09 Sep, 2013
Public Review Download page 05 Jul, 2013 26 Aug, 2013
Early Draft Review Download page 23 Oct, 2012 22 Nov, 2012
Expert Group Formation   20 Mar, 2001 04 Apr, 2001
JSR Review Ballot View results 06 Mar, 2001 19 Mar, 2001
Status: Maintenance
JCP version in use: 2.11
Java Specification Participation Agreement version in use: 2.0

Specifies API and semantics for temporary, in memory caching of Java objects, including object creation, shared access, spooling, invalidation, and consistency across JVM's.

Expert Group Transparency:
  Public Communications
  Issue Tracking


Specification Leads
  Joseph Fialli Oracle
  Gregory Robert Luck Luck, Gregory Robert
  Brian Oliver Oracle
  Cameron Purdy Oracle
Expert Group
  Apache Software Foundation
: Jon Stevens
Chang, Bongjae Cotton III, Ben D.
: Ben D. Cotton III
  Fujitsu Limited
: Toshio Takeda
Gardner, Ryan
: Ryan Gardner
Goldman Sachs & Co.
: William Newport
: Christoph Engelbert
: Greg Pavlik
Hightower, Richard
: Richard Hightower
: Brian Martin
: Gabe Montero
Gregory Robert Luck
  Millidge, Stephen
: Stephen Millidge
Mossakowski, David
: David Mossakowski
: Yannis Cosmadopoulos
: Joseph Fialli
: Brian Oliver
: Andy Piper
: Cameron Purdy
Red Hat
: Pete Muir
Red Hat
: Galder Zamarreno
  Seovic, Aleksandar
: Aleksandar Seovic
Software AG
: Chris Dennis
TmaxSoft, Inc.
: chang paek
: Jens Wilke

List of JCACHE compatible implementations

Updates to the Original JSR

The following updates have been made to the original proposal on the dates shown.

The Maintenance Leads moved the JSR to JCP 2.11.

Joe Fialli has taken over as Maintenance Lead for Oracle.

Name: Joe Fialli

e-mail address:

telephone number: +1 781-442-0795


Please provide a description of the business terms for the Specification, RI and TCK that will apply when this JSR is final.

The JSR moved to JCP 2.9.

2.19 Please describe the communications channel you have established for the public to observe Expert Group deliberations, provide feedback, and view archives of all Expert Group communications.

There are two channels for feedback. First is via the JSR 107 forum. Secondly is via raising issues in the Issue Tracker.
New nominations will be distributed to the Expert Group via, and details of Expert Group nominations will be provided to the public via the forum of the mailing list, which is also the EG communication archive.

2.20 What is the URL of the Issue Tracker that the public can read, and how does the public log issues in the Issue Tracker?

2.21 Please provide the location of the publicly accessible document archive you have created for the Expert Group.

For specification documentation:
For source code:


Please provide a description of the business terms for the Specification, RI and TCK that will apply when this JSR is final.

Note that this information has been updated since this update.

Final Specification license
Final RI license
Final TCK license


Specification Leads: Brian Oliver (Oracle), Cameron Purdy (Oracle), Greg Luck

E-Mail Addresses:,,

Telephone Numbers: +1 781 640 6842, +1 781 442 0145, +61 7 3368 2122

Fax Numbers: -, -, -

Yannis Cosmadopoulos was added as co-Spec Lead.

The Specification Lead and Expert Group changed the JSR to JCP version 2.7.

Greg Luck became co-Spec Lead.

Cameron Purdy took over as Specification Lead.

Original Java Specification Request (JSR)

Identification | Request | Contributions | Additional Information

Submitting Member:Oracle Corporation

Name of Contact Person: David Clay, Oracle Corporation

E-Mail Address:

Telephone Number: 503-525-8025

Fax Number: 503-276-2400

Specification Lead: Jerry Bortvedt

E-Mail Address:

Telephone Number: 503-525-8023

Fax Number: 503-276-2400

Note that the above information has been updated from this original proposal.

Initial Expert Group Membership:
(Please provide company or organization names. Note that expert group members must have signed the JSPA.)

Jerry Bortvedt, Oracle Corporation
Jun Wang, Oracle Corporation

Section 2: Request

2.1 Please describe the proposed Specification:

Caching is a tried and true method for dramatically speeding up applications. Applications often use temporary data which are expensive to create, but have a lifetime over which they can be reused. For example, a servlet might create a web page from data obtained from multiple databases, network connections, and expensive computations; the sets of data might be reusable over the same or different periods of time.

The JCACHE specification standardizes in process caching of Java objects in a way that allows an efficient implementation, and removes from the programmer the burden of implementing cache expiration, mutual exclusion, spooling, and cache consistency.

Objects whose type is not known until runtime can be cached, but only those which implement the serializable interface can be spooled.

2.2 What is the target Java platform? (i.e., desktop, server, personal, embedded, card, etc.)

Can be used on any Java platform. Particularly useful on server platforms, such as a servlet container.

2.3 What need of the Java community will be addressed by the proposed specification?

What need of the Java community will be addressed by the proposed specification? The primary goal of JCACHE is to allow developers to write as little code as possible to solve a very common problem.

2.4 Why isn't this need met by existing specifications?

There are no existing specifications which deal with automatic creation and refresh of temporary, in-process data shared across threads.

JNDI provides an interface for looking up objects by name, and an interface (the SPI) which could be used for a caching implementation. However, the application would be required to check expiration of retrieved objects after each look up, and sychronize creation and binding of a new object. Per object cache attributes (e.g., expiration time) would require introduction of an additional level of indirection: the application would look up a cache handle and use one of its methods to access the associated object.

java.util.Hashtable provides a way of looking up cached objects by name, but has no way to materialize objects in the cache without application enforcement of expiration and mutual exclusion. The granularity of Hashtable locking is the whole table, which affects application scalability when multiple threads access the HashTable. HashTable also has no underlying spooling capability.

JavaSpaces and Enity Enterprise Java Beans deal with caching of persistent, transactional data. Cached data do not always come from data stores; they may be the result of an expensive computation or a remote procedure call. Also, these interfaces do not deal with efficient handling of expiration and refresh of cached data.

Enterprise Java Beans are designed primarily for remote access to objects. Although an in-process implementation of EJB is possible, the application code would still have to make all of the additional calls required for remote object access. EJB's must be pre-defined by the application, and do not have any concept of shared access or expiration.

javax.servlet.http.HttpSession allows named objects of arbitrary type to be cached, but does not have the concept of sharing, invalidation, per object expiration, automatic loading, or spooling.

2.5 Please give a short description of the underlying technology or technologies:

An application begins by creating a cache name space and associating a cache loader with it. The cache loader is application code which materializes application objects to be cached. Following this simple initialization, concurrent threads may retrieve objects from the cache. If the object does not exist or has expired, the cache loader is invoked. When the cache meets it memory limit, its replacement policy decides which objects should be spooled to disk and when.

An application may optionally associate a set of attributes with a name space or with individual cached objects. Examples of attributes are time to live, expiration date, and whether an object can be spooled.

Applications may also explicitly create, replace, remove, or invalidate objects in the cache. Using a cache event listener, the application may interpose before cache actions whether invoked by the cache system or explicitly by the application.

Changes to the cached objects may be sychronized across multiple JVM's on multiple hosts. However, the application designer must carefully weigh the advantages of the performance cost against the functionality gain.

2.6 Is there a proposed package name for the API Specification? (i.e., javapi.something, org.something, etc.)

javax.util.jcache in j2ee (although it could be useful in j2se)

2.7 Does the proposed specification have any dependencies on specific operating systems, CPUs, or I/O devices that you know of?


2.8 Are there any security issues that cannot be addressed by the current security model?


2.9 Are there any internationalization or localization issues?


2.10 Are there any existing specifications that might be rendered obsolete, deprecated, or in need of revision as a result of this work?


2.11 Please describe the anticipated schedule for the development of this specification.

4 weeks after JSR approval. Release preliminary specification, including API
+ 2 weeks Comments on first draft due
+ 2 weeks 2nd draft released
+ 1 week Comments on 2nd draft due
+ 1 week 3rd draft released (if necessary)
+ 1 week Comments on 3rd draft due (if necessary)
+ 1 week Participant draft released

Note that this JSR has been updated since this original proposal.

Section 3: Contributions

3.1 Please list any existing documents, specifications, or implementations that describe the technology. Please include links to the documents if they are publicly available.

Functional Specification for Object Caching Service for Java (OCS4J), 2.0

3.2 Explanation of how these items might be used as a starting point for the work.

Basic functionality is described. However, the documented API excludes spooling and includes extraneous functionality such as pooling which would probably not be included in JCACHE.

Section 4: Additional Information (Optional)

4.1 This section contains any additional information that the submitting Member wishes to include in the JSR.

This section contains any additional information that the submitting Member wishes to include in the JSR. The Oracle Java caching system has been in use internally in Oracle products for about 2 years. It has proved to be popular among developers.