Find JSRs
Submit this Search


Ad Banner
 
 
 
 

Summary  |  Proposal  |  Detail (Summary & Proposal)  |  Nominations
JSRs: Java Specification Requests
JSR 236: Concurrency Utilities for JavaTM EE

Stage Access Start Finish
Final Release Download page 28 May, 2013  
Final Approval Ballot View results 16 Apr, 2013 29 Apr, 2013
Proposed Final Draft Download page 28 Feb, 2013  
Public Review Ballot View results 05 Feb, 2013 18 Feb, 2013
Public Review Download page 03 Jan, 2013 04 Feb, 2013
Early Draft Review Download page 15 Nov, 2012 15 Dec, 2012
Expert Group Formation   16 Dec, 2003 10 Apr, 2012
JSR Review Ballot View results 02 Dec, 2003 15 Dec, 2003
Status: Final
JCP version in use: 2.9
Java Specification Participation Agreement version in use: 2.0


Description:
Concurrency Utilities for Java EE provides a simple, standardized API for using concurrency from application components without compromising container integrity while still preserving the Java EE platform's fundamental benefits.

Expert Group Transparency:
  Public Communications
  Issue Tracking

Team

Specification Leads
  Anthony Lai Oracle
Expert Group
  Adam Bien Cyril Bouteille Andrew Evers
  IBM
: Fred Rowe
Doug Lea Oracle
: Anthony Lai
  Oracle
: Naresh Revanuru
Oracle
: Marina Vatkina
Red Hat
: Marius Bogoevici
  Red Hat
: David Lloyd
Contributors
       

Updates to the Original JSR

The following information has been updated from the original proposal.

2013.02.28:

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


2012.04.02:
Identification | Request | Contributions

Section 1. Identification

Specification Lead: Anthony Lai

E-Mail Address: anthony.lai@oracle.com

Telephone Number: +1 650 506 1058

Fax Number: -


Section 2: Request

2.1 Please describe the proposed Specification:

The Concurrency Utilities for Java EE provides asynchronous capabilities to Java EE application components, largely through extending the Concurrency Utilities API developed under JSR-166.

JavaTM Platform, Enterprise Edition (Java EE) server containers such as the enterprise bean or web component container do not allow using common Java SE concurrency APIs such as java.util.concurrent.ThreadPoolExecutor, java.lang.Thread,java.util.concurrent.ScheduledThreadPoolExecutor or java.util.Timer directly.

The server containers provide runtime support for Java EE application components (such as servlets and Enterprise JavaBeansTM (EJBTM)). They provide a layer between application component code and platform services and resources. All application component code is run on a thread managed by a container and each container typically expects all access to container-supplied objects to occur on the same thread.

It is because of this behavior that application components are typically unable to reliably use other Java EE platform services from a thread that is not managed by the container. Java EE Product Providers (see chapter 2.11 of the Java Platform Enterprise Edition Specification) also discourage the use of resources in a non-managed way, because it can potentially undermine the enterprise features that the platform is designed to provide such as availability, security, and reliability and scalability.

When used within managed environments, this API is a much better alternative to existing Java SE APIs:

java.util.Timer, java.lang.Thread and the thread pool creation APIs from the Java SE concurrency utilities (JSR-166) in the java.util.concurrent package should never be used within managed environments, as it creates threads outside the purview of the container. .
javax.management.timer.Timer is tightly coupled with the JMX framework and does not provide a sufficiently user-friendly or independent API.

The Concurrency Utilities for Java EE specification thus provides a clean, simple, independent API by building on JSR-166, making it appropriate for use within any Java EE container.

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

JavaTM Platform, Enterprise Edition 7 (Java EE 7)

2.3 The Executive Committees would like to ensure JSR submitters think about how their proposed technology relates to all of the Java platform editions. Please provide details here for which platform editions are being targeted by this JSR, and how this JSR has considered the relationship with the other platform editions.

This specification is targeted for Java EE 7 Platform. It extends the custom execution framework in JSR 166: Concurrent Utilities in Java SE platform making them suitable for use in Java EE platform.

2.4 Should this JSR be voted on by both Executive Committees?

No. Just the SE/EE Executive Committee

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

There is commonly a need to perform application-level work concurrently or periodically using different threads of execution. For example, a Servlet or JSP may need to pull data from several back end data sources or services before rendering HTML. This API will provide a means by which an application can specify the work that can be executed concurrently. Java EE implementations commonly implement this functionality in vendor-specific ways, hindering application portability.

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

There is presently no standard API for application-level concurrent programming within managed environments such as Servlets and EJBs. java.lang.Thread, java.util.Timer and thread pool creation APIs from JSR-166 should not be used within these environments, and the JCA WorkManager API is only appropriate for use within Resource Adapters.

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

This API can be implemented with existing Java APIs for concurrent programming, including JSR-166.

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

javax.enterprise.concurrent

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

Q2 2012: Expert Group Formed
Q3 2012: Release Community Draft
Q4 2012: Release Public Review Draft
Q1 2013: Final Release

2.15 Provide detailed answers to the transparency checklist, making sure to include URLs as appropriate:

- Is the schedule for the JSR publicly available, current, and updated regularly?
Yes.

- Can the public read and/or write to a wiki for the JSR?
java.net/projects/concurrency-ee-spec project users list is used for this purpose.

- Is there a publicly accessible discussion board for the JSR that you read and respond to regularly?
java.net/projects/concurrency-ee-spec project users list is used for this purpose.

- Have you spoken at conferences and events about the JSR recently?
No

- Are you using open-source processes for the development of the RI and/or the TCK?
Yes, the RI will be done using open-source processes.

- What are the Terms of Use required to use the collaboration tools you have prepared to use with the Expert Group, so that prospective EG members can judge whether they are compatible with the JSPA?
The terms of use are those on java.net: http://www.java.net/javanet-web-site-terms-use

- Does the Community tab for my JSR have links to and information about all public communication mechanisms and sites for the development of my JSR?
Yes

2.16 Please describe how the RI and TCK will be delivered, i.e. as part of a profile or platform edition, or stand-alone, or both. Include version information for the profile or platform in your answer.

The RI and TCK will be made available in stand-alone form at the time of the final release. There will most likely be earlier versions of the RI and TCK that are developed as this JSR progresses.

The RI will be generic to any particular container and not use any proprietary interfaces, and therefore should work with existing container implementations.

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

Specification license
RI license
TCK license

Note that this information has been updated again.

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.

The Expert Group will conduct business on jsr236-experts@concurrency-ee-spec.java.net mailing list which is publicly readable.

The public can subscribe to the users@concurrency-ee-spec.java.net mailing list.

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?

http://java.net/jira/browse/concurrency_ee_spec

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

http://java.net/projects/concurrency-ee-spec/downloads





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.

The following specifications and draft specifications will serve as input into the expert group: http://www.ibm.com/developerworks/library/specification/j-commonj-sdowmt/index.html
http://gee.cs.oswego.edu/dl/concurrencyee-interest/index.html

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

These specifications will be used as a starting point for expert group discussion.




2009.09.22:

Specification Leads: Naresh Revanuru, Frederick Rowe
Oracle, IBM

E-Mail Address: naresh.revanuru@oracle.com, frowe@us.ibm.com

Telephone Number: +1 415 402 7566, +1 919 678 0504

Fax Number: +1 408 570 8901, -

2008.06.17:
The name of the JSR was changed from "Timer for Application Servers" to "Concurrency Utilities for Java EE".

Specification Leads: Naresh Revanuru & Chris D. Johnson

E-Mail Address: naresh.revanuru@oracle.com & cdjohnson@us.ibm.com

Telephone Number: +1 415 402 7566 & +1 507 253 1801

Fax Number: +1 408 570 8901 & +1 507 253 4456 P>Supporting this JSR:

Oracle
IBM Corp.

2.1 Please describe the proposed Specification:

JavaTM Platform, Enterprise Edition (Java EE and formally known as J2EETM) server containers such as the enterprise bean or web component container do not allow using common Java SE concurrency APIs such as java.util.concurrent.ThreadPoolExecutor, java.lang.Thread, java.util.concurrent.ScheduledThreadPoolExecutor or java.util.Timer directly.

The server containers provide runtime support for Java EE application components (such as servlets and Enterprise JavaBeansTM (EJBTM)). They provide a layer between application component code and platform services and resources. All application component code is run on a thread managed by a container and each container typically expects all access to container-supplied objects to occur on the same thread.

It is because of this behavior that application components are typically unable to reliably use other Java EE platform services from a thread that is not managed by the container. Java EE Product Providers (see chapter 2.10 of the Java 2 Enterprise Edition Specification) also discourage the use of resources in a non-managed way, because it can potentially undermine the enterprise features that the platform is designed to provide such as availability, security, and reliability and scalability.

When with managed environments, this API is a much better alternative to existing Java SE APIs:

  • java.util.Timer, java.lang.Thread and the Java SE concurrency utilities (JSR-166) in the java.util.concurrency package should never be used within managed environments, as it creates threads outside the purview of the container.
  • javax.management.timer.Timer is tightly coupled with the JMX framework and does not provide a sufficiently user-friendly or independent API.
The Concurrency Utilities for Java EE specification thus provides a clean, simple, independent API by building on JSR-166, making it appropriate for use within any Java EE container.

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

JavaTM Platform, Enterprise Edition 1.4 or later.

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

There is commonly a need to perform application-level work concurrently or periodically using different threads of execution. For example, a Servlet or JSP may need to pull data form several back end data sources or services before rendering HTML. This API will provide a means by which an application can specify the work that can be executed concurrently.

J2EE implementations commonly implement this functionality in vendor-specific ways, hindering application portability.

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

There is presently no standard API for application-level concurrent programming within managed environments such as Servlets and EJBs. java.lang.Thread, java.util.Timer and JSR-166 should not be used within these environments, and the JCA WorkManager API is only appropriate for use within Resource Adapters.

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

This API can be implemented with existing Java APIs for concurrent programming, including JSR-166.

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

javax.util.concurrent

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

Summer 2008: Expert Group Formed

Summer 2008: Release Community Draft

Fall 2008: Release Public Review Draft

Winter 2008: Final Release

Because this is a small API, we believe this rapid schedule should be achievable.

2.13 Please describe how the RI and TCK will de delivered, i.e. as part of a profile or platform edition, or stand-alone, or both. Include version information for the profile or platform in your answer.

The RI and TCK will be made available in stand-alone form at the time of the final release. There will most likely be earlier versions of the RI and TCK that are developed as this JSR progresses.

The RI will be generic to any particular container and not use any proprietary interfaces, and therefore should work with existing container implementations.

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

The Specification will be offered under royalty-free terms and thus be freely implementable. This license will comply with the terms defined by the JSPA. For an approximation of the Specification license, please see the license statements included in the specifications listed in section 3.1.

The intention is to develop the RI and TCK as open source under Apache license, version 2.0, (see http://www.apache.org/licenses) and the binary form of the TCK under licenses of a form of the draft licenses included as Exhibit A in section 4.1.

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.

The following specifications and draft specifications will serve as input into the expert group:
http://www.ibm.com/developerworks/library/specification/j-commonj-sdowmt/index.html
http://dev2dev.bea.com/wlplatform/commonj/twm.html
http://gee.cs.oswego.edu/dl/concurrencyee-interest/index.html

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

These specifications will be used as a starting point for expert group discussion.

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

Exhibit A

Technology Compatibility Kit License Agreement

BY DOWNLOADING OR USING THE SOFTWARE AND/OR DOCUMENTATION DESCRIBED IN EXHIBIT A HERETO (COLLECTIVELY THE "SOFTWARE"), YOU AGREE TO THE FOLLOWING TERMS AND CONDITIONS ("AGREEMENT"). IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT, YOU MAY NOT DOWNLOAD OR USE THE SOFTWARE.

License Grant. You are hereby granted a personal, non-transferable and non-sublicenseable, nonexclusive, world-wide, royalty free license to use the JSR __ Technology Compatibility Kit (including software and documentation) (the "TCK") solely for the purpose of testing compliance with the relevant portions of specifications or standards to which it applies (the "Specification"). You may not modify or create derivative works of any of the TCK except as is necessary to fulfill the purpose described above. You may not distribute copies of the TCK to other parties for any purpose, including for the purpose of allowing such other party to use the TCK. Nor may you modify or incorporate the TCK into any other software.

No Warranties. The TCK contained herein is provided on an "AS IS" basis and to the maximum extent permitted by applicable law, this material is provided AS IS AND WITH ALL FAULTS, and the developers of this material hereby disclaim all other warranties and conditions, either express, implied or statutory, including, but not limited to, any (if any) implied warranties, duties or conditions of merchantability, of fitness for a particular purpose, of accuracy or completeness of responses, of results, of workmanlike effort, of lack of viruses, and of lack of negligence. ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT WITH REGARD TO THIS MATERIAL.

Limitation of Liability. IN NO EVENT WILL ANY AUTHOR, DEVELOPER, LICENSOR, OR DISTRIBUTOR OF THIS MATERIAL BE LIABLE TO ANY OTHER PARTY FOR THE COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT, INDIRECT, PUNITIVE, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT RELATING TO THIS MATERIAL, WHETHER OR NOT SUCH PARTY HAD ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.

Covenant Not to Assert. As a material condition to this license you hereby agree, to the extent that you have any patents which cover the use of the TCK in any manner permitted under this License, not to assert any such patents against the developers or distributors of the TCK or any other parties who have entered into a license substantially similar to this License for the licensed use of the TCK.

Reciprocity. You may have, or may have in the future, the ability to license specifications and/or test suites developed or distributed pursuant to the Java Community Process ("Java Materials"). You acknowledge that under this license you are receiving the TCK under reasonable royalty-free terms. While you are not obligated to make Java Materials available, if you do so and do not license them under reasonable royalty-free terms, the licensor reserves the right to revoke this license upon reasonable notice. In the event this occurs, the licensor will make available to you a substitute license under commercial terms, including possibly royalties and other restrictions. For the purpose of this paragraph, terms are not reasonable terms if they are more restrictive than this license or if they discriminate against any individual or group of JCP members or against implementers of independent implementations or open source implementations.

Compatibility Claims. You may not claim that any version or release of software passes the TCK, and therefore is compatible with the Specification, unless it is capable of passing the most current version of the TCK available 120 days prior to the date of its first shipment to customers. You will make available information regarding the version of the TCK passed, upon request. You agree that any claims regarding compliance with the Specification will be factually accurate and will not be misleading.

General.

No other rights are granted by implication, estoppel or otherwise.

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

Your rights under this Agreement shall terminate if you fail to comply with any of the material terms or conditions of this Agreement and do not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If your rights under this Agreement terminate, you agree to cease use of the TCK immediately and cease making any claims of compatibility regarding the Specification based on the use of the TCK.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

Exhibit B

NOTE: participants in this expert group must sign a supplemental license agreement to enable an external specification, which has already been published with royalty free patent grants for essential claims, to remain in sync with any enhancements done by the expert group while the expert group completes its work. To that end, the supplemental agreement changes the timing of some of the IP grants that EG members must make. The agreement may be downloaded here.


Original Java Specification Request (JSR)

Identification | Request | Contributions | Additional Information

Section 1. Identification

Submitting Member: BEA Systems, Inc. and IBM Corporation

Name of Contact Person: Stephan Zachwieja & Mike Edwards

E-Mail Address: sjz@bea.com & mike_edwards@uk.ibm.com

Telephone Number: +1 908 580 3032 & +44 1962 818014

Fax Number: +1 908 580 3030 & +44 1962 818999


Specification Lead: Stephan Zachwieja & Chris D. Johnson

E-Mail Address: sjz@bea.com & c1johnso@us.ibm.com

Telephone Number: +1 908 580 3032 & +1 507 253 1801

Fax Number: +1 908 580 3030 & +1 507 253 4456


Initial Expert Group Membership:

BEA Systems, Inc.
IBM Corp.

Supporting this JSR:

BEA Systems, Inc.
IBM Corp.



Section 2: Request

2.1 Please describe the proposed Specification:

The Timer API for Application Servers provides a Timer API for use within managed environments such as application servers conforming to JavaTM 2 Enterprise Edition (J2EE), within components such as Servlets, EJBs, and JCA Resource Adapters. The Timer API enables applications to schedule timer and receive timer notification callbacks with an application-specified listener.

When with managed environments, this API is a much better alternative to java.util.Timer and the JMX Timer, the two standardized APIs in Java:

    * java.util.Timer should never be used within managed environments, as it creates threads outside the purview of the container. Further, there is no clean way of subclassing java.util.Timer to avoid thread creation, as all constructors create and start a thread.

    * The JMX Timer is tightly coupled with the JMX framework and does not provide a sufficiently user-friendly or independent API.

The J2EE Timer thus provides a clean, simple, independent API that is appropriate for use within any J2EE container.

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

JavaTM 2 Platform, Enterprise Edition 1.4

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

There is currently no standard timer API appropriate for use within managed environments. Today, J2EE vendors commonly implement this functionality in vendor-specific ways, hindering application portability.

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

java.util.Timer cannot be used within managed environments because it creates and starts threads outside the purview of the container. Furthermore, it cannot be subclassed in an acceptable fashion such that a thread is not created in the java.util.Timer constructors.

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

Timers are well-understood and widely implemented technology.

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

javax.timer, javax.util, or javax.util.timer

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

No

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

No

2.9 Are there any internationalization or localization issues?

No

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

The J2EE Connector Architecture Specification, version 1.5 should be modified in the future to use this specification rather than improperly using java.util.Timer.

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

Winter 2003: Expert Group Formed
Spring 2004: Release Community Draft
Spring 2004: Release Public Review Draft
Summer 2004: Final Release

Because this is a small API, we believe this rapid schedule should be achievable.

2.12 Please describe the anticipated working model for the Expert Group working on developing this specification.

E-mail, teleconferences, and infrequent face-to-face meetings. The environment of the expert group will be totally non-confidential. We will also use or create an open mailing list for discussions by other interested people outside the expert group. As the outbound licenses will be Royalty Free, expert group members will need to ensure that their contributions are similarly made on that basis. Non-EG contributors to the mailing list will also be requested to provide that assurance. Precise details of the leadership processes of the expert group (for example: running calls, decision making, issue resolution) will be discussed by the leaders once the group's size and dynamics are known.

2.13 Please describe how the RI and TCK will de delivered, i.e. as part of a profile or platform edition, or stand-alone, or both. Include version information for the profile or platform in your answer.

The RI and TCK will be made available in stand-alone form at the time of the final release. There will most likely be earlier versions of the RI and TCK that are developed as this JSR progresses.

The RI will be generic to any particular container and not use any proprietary interfaces, and therefore should work with existing container implementations.

IBM will be responsible for developing the TCK, although contributions from any Expert Group member would be welcome.

2.14 Please state the rationale if previous versions are available stand-alone and you are now proposing in 2.13 to only deliver RI and TCK as part of a profile or platform edition (See sections 1.1.5 and 1.1.6 of the JCP 2 document).

N/A

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

The Specification will be offered under royalty-free terms and thus be freely implementable. This license will comply with the terms defined by the JSPA. For an approximation of the Specification license, please see the license statements included in the specifications listed in section 3.1.

The intention is to release the RI and TCK under licenses of a form of the draft licenses included as Exhibit A and Exhibit B in section 4.1, respectively. At this stage it is expected that IBM and BEA will strive to use a common license for the RI and similarly for the TCK.





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.

The following specification will serve as input into the expert group:
http://dev2dev.beasys.com/technologies/commonj/timer/index.jsp
http://www.ibm.com/developerworks/library/j-commonj-sdowmt/

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

This specification will serve as a starting point for expert group discussion.



Section 4: Additional Information (Optional)

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

Exhibit A
Reference Implementation License

BY DOWNLOADING OR USING THE SOFTWARE AND/OR DOCUMENTATION DESCRIBED IN EXHIBIT A HERETO (COLLECTIVELY THE "SOFTWARE"), YOU AGREE TO THE FOLLOWING TERMS AND CONDITIONS ("AGREEMENT"). IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT, YOU MAY NOT DOWNLOAD OR USE THE SOFTWARE.

License Grant. International Business Machines Corporation or one of its subsidiaries collectively ("IBM") hereby grants you (an individual or an entity) a non-exclusive, non-transferable, worldwide, royalty free license to modify and prepare derivative works of the Software and to use, reproduce, distribute object code versions of, display, and perform the Software and such derivative works. The above license includes the right to sublicense the above rights to third parties acting on your behalf. To the extent IBM provides you with error corrections, upgrades, enhancements, additions, improvements, extension or other modifications to the Software such error corrections, upgrades, enhancements, additions, improvements, extension or other modifications shall be considered Software and shall be subject to the terms and conditions of this Agreement.
You agree not to remove any of the copyright statements or disclaimers contained in the Software. You agree to defend, indemnify, hold harmless IBM and its suppliers from and against any claims, lawsuits, demands, liabilities, damages, costs and expenses including, without limitation, attorney fees, in any way related to, connected with, or arising out of, your use, modification, reproduction, distribution and/or sublicensing of the Software.

Compatibility Claims. You agree that you will distribute, or sublicense others to distribute, the Software and derivative works thereof only if you or such third party have tested the Software and derivative works thereof with the applicable JSR __ TCK and such Software and derivative work have complied with the relevant portions of such TCK. You may not claim that the Software or derivative works thereof pass the applicable TCK, and therefore is compatible with the applicable JSR __ specification, unless it is capable of passing the most current version of the TCK available 120 days prior to the date of shipment. You will make available information regarding the version of the TCK passed, upon request. Additional rules, if any, regarding your ability to make claims regarding your use of the TCK or any result there from can be found at __________________. As a condition to your license, you agree to abide by all such rules.

Support. Although IBM may try to answer technical support questions you may have regarding your use of the Software, IBM has no obligation to provide error corrections, upgrades, enhancements, additions, improvements, extension or other modifications to the Software or to provide any end user or technical support for the Software. You shall be responsible for any and all maintenance, end-user support and technical support with respect to the Software.

No Warranties. THE SOFTWARE AND ANY SUPPORT ARE PROVIDED ?AS IS? WITHOUT WARRANTY OR CONDITION OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL WARRANTIES AND CONDITIONS, EXPRESS, IMPLIED, AND STATUTORY ARE HEREBY DISLCAIMED. THE ENTIRE RISK ARISING OUT OF THE USE OR PERFORMANCE OF THE SOFTWARE AND SUPPORT REMAINS WITH YOU.
No Liability. IN NO EVENT WILL IBM OR ITS SUPPLIERS BE LIABLE FOR ANY LOST PROFITS, LOST SAVINGS, LOST REVENUE, LOST DATA, PROCUREMENT OF SUBSTITUE GOODS, OR FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES, EVEN IF IBM OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES OR DAMAGES. IN ADDITION IBM AND ITS SUPPLIERS WILL NOT BE LIABLE FOR ANY DAMAGES CLAIMED BY YOU BASED ON ANY THIRD PARTY CLAIM.

Some jurisdictions do not allow the exclusion of implied warranties, or the limitation for consequential damages, so the above may not apply to you.
Note to U.S. Government Users - Documentation related to Restricted Rights - Use, duplication, or disclosure is subject to restrictions set forth in GSA ADP Schedule Contract with IBM Corporation.

Covenant Not to Assert. To the extent that you have any patents which cover the use of the Software in any manner permitted under this Agreement, you hereby agree not to assert any such patents against the developers or distributors of the Software or any other parties who have entered into a license substantially similar to this Agreement for the licensed use of the Software.
Reciprocity. You may have, or may have in the future, the ability to reference implementations developed or distributed pursuant to the Java Community Process ("Java Materials"). You acknowledge that under this license you are receiving the Software under reasonable royalty-free terms. While you are not obligated to make Java materials available, if you do so and do not license them under reasonable royalty-free terms, the licensor reserves the right to revoke this license upon reasonable notice. In the event this occurs, the licensor will make available to you a substitute license under commercial terms, including possibly royalties and other restrictions. For the purpose of this paragraph, terms are not reasonable terms if they are more restrictive than this license or if they discriminate against any individual or group of JCP members or against implementers of independent implementations or open source implementations.

General.

You agree to comply with applicable export laws and regulations.

No other rights or licenses are granted by implication, estoppel or otherwise.

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

Your rights under this Agreement shall terminate if you fail to comply with any of the material terms or conditions of this Agreement and do not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all your rights under this Agreement terminate, you agree to cease use of the Software immediately.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

This Agreement is the only understanding and agreement we have with respect to the Software. It supersedes all other communications, understandings or agreements (oral or written) that we may have had with respect to the Software prior to this Agreement. Only a written agreement signed by both of us can modify this Agreement.

Exhibit B

Technology Compatibility Kit License Agreement

BY DOWNLOADING OR USING THE SOFTWARE AND/OR DOCUMENTATION DESCRIBED IN EXHIBIT A HERETO (COLLECTIVELY THE ?SOFTWARE?), YOU AGREE TO THE FOLLOWING TERMS AND CONDITIONS (?AGREEMENT?). IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT, YOU MAY NOT DOWNLOAD OR USE THE SOFTWARE.

License Grant. You are hereby granted a personal, non-transferable and non-sublicenseable, nonexclusive, world-wide, royalty free license to use the JSR __ Technology Compatibility Kit (including software and documentation) (the ?TCK?) solely for the purpose of testing compliance with the relevant portions of specifications or standards to which it applies (the ?Specification?). You may not modify or create derivative works of any of the TCK except as is necessary to fulfill the purpose described above. You may not distribute copies of the TCK to other parties for any purpose, including for the purpose of allowing such other party to use the TCK. Nor may you modify or incorporate the TCK into any other software.
No Warranties. The TCK contained herein is provided on an "AS IS" basis and to the maximum extent permitted by applicable law, this material is provided AS IS AND WITH ALL FAULTS, and the developers of this material hereby disclaim all other warranties and conditions, either express, implied or statutory, including, but not limited to, any (if any) implied warranties, duties or conditions of merchantability, of fitness for a particular purpose, of accuracy or completeness of responses, of results, of workmanlike effort, of lack of viruses, and of lack of negligence. ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT WITH REGARD TO THIS MATERIAL.

Limitation of Liability. IN NO EVENT WILL ANY AUTHOR, DEVELOPER, LICENSOR, OR DISTRIBUTOR OF THIS MATERIAL BE LIABLE TO ANY OTHER PARTY FOR THE COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT, INDIRECT, PUNITIVE, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT RELATING TO THIS MATERIAL, WHETHER OR NOT SUCH PARTY HAD ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.

Covenant Not to Assert. As a material condition to this license you hereby agree, to the extent that you have any patents which cover the use of the TCK in any manner permitted under this License, not to assert any such patents against the developers or distributors of the TCK or any other parties who have entered into a license substantially similar to this License for the licensed use of the TCK.
Reciprocity. You may have, or may have in the future, the ability to license specifications and/or test suites developed or distributed pursuant to the Java Community Process ("Java Materials"). You acknowledge that under this license you are receiving the TCK under reasonable royalty-free terms. While you are not obligated to make Java Materials available, if you do so and do not license them under reasonable royalty-free terms, the licensor reserves the right to revoke this license upon reasonable notice. In the event this occurs, the licensor will make available to you a substitute license under commercial terms, including possibly royalties and other restrictions. For the purpose of this paragraph, terms are not reasonable terms if they are more restrictive than this license or if they discriminate against any individual or group of JCP members or against implementers of independent implementations or open source implementations.
Compatibility Claims. You may not claim that any version or release of software passes the TCK, and therefore is compatible with the Specification, unless it is capable of passing the most current version of the TCK available 120 days prior to the date of its first shipment to customers. You will make available information regarding the version of the TCK passed, upon request. You agree that any claims regarding compliance with the Specification will be factually accurate and will not be misleading.

General.
No other rights are granted by implication, estoppel or otherwise.

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

Your rights under this Agreement shall terminate if you fail to comply with any of the material terms or conditions of this Agreement and do not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If your rights under this Agreement terminate, you agree to cease use of the TCK immediately and cease making any claims of compatibility regarding the Specification based on the use of the TCK.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting