CINXE.COM

The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 277

<!-- ** BEGIN: header.jsp ** //--> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <link href="/includes/css/menu.css" rel="stylesheet" type="text/css"></link> <link href="/includes/css/style.css" rel="stylesheet" type="text/css"></link> <!--[if lt IE 6]><link href="/includes/css/style5.css" rel="stylesheet" type="text/css" ></link><![endif]--> <!--[if gte IE 5]><link href="/includes/css/style6.css" rel="stylesheet" type="text/css" ></link><![endif]--> <link href="/includes/css/tabs.css" rel="stylesheet" type="text/css"></link> <script type="text/javascript" src="/includes/scripts/tabs.js"></script> <script type="text/javascript" src="/includes/scripts/menu.js"></script> <title>The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 277</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script>!function(a){var e="https://s.go-mpulse.net/boomerang/",t="addEventListener";if("False"=="True")a.BOOMR_config=a.BOOMR_config||{},a.BOOMR_config.PageParams=a.BOOMR_config.PageParams||{},a.BOOMR_config.PageParams.pci=!0,e="https://s2.go-mpulse.net/boomerang/";if(window.BOOMR_API_key="UE9G5-FVEGY-MA38N-LMMNY-SBQP2",function(){function n(e){a.BOOMR_onload=e&&e.timeStamp||(new Date).getTime()}if(!a.BOOMR||!a.BOOMR.version&&!a.BOOMR.snippetExecuted){a.BOOMR=a.BOOMR||{},a.BOOMR.snippetExecuted=!0;var i,_,o,r=document.createElement("iframe");if(a[t])a[t]("load",n,!1);else if(a.attachEvent)a.attachEvent("onload",n);r.src="javascript:void(0)",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="width:0;height:0;border:0;display:none;",o=document.getElementsByTagName("script")[0],o.parentNode.insertBefore(r,o);try{_=r.contentWindow.document}catch(O){i=document.domain,r.src="javascript:var d=document.open();d.domain='"+i+"';void(0);",_=r.contentWindow.document}_.open()._l=function(){var a=this.createElement("script");if(i)this.domain=i;a.id="boomr-if-as",a.src=e+"UE9G5-FVEGY-MA38N-LMMNY-SBQP2",BOOMR_lstart=(new Date).getTime(),this.body.appendChild(a)},_.write("<bo"+'dy onload="document._l();">'),_.close()}}(),"".length>0)if(a&&"performance"in a&&a.performance&&"function"==typeof a.performance.setResourceTimingBufferSize)a.performance.setResourceTimingBufferSize();!function(){if(BOOMR=a.BOOMR||{},BOOMR.plugins=BOOMR.plugins||{},!BOOMR.plugins.AK){var e=""=="true"?1:0,t="",n="bdpnbeqxgqugaz2c7crq-f-fb42c5ee0-clientnsv4-s.akamaihd.net",i="false"=="true"?2:1,_={"ak.v":"39","ak.cp":"1164872","ak.ai":parseInt("695954",10),"ak.ol":"0","ak.cr":1,"ak.ipv":4,"ak.proto":"http/1.1","ak.rid":"a5a163fc","ak.r":41725,"ak.a2":e,"ak.m":"dscx","ak.n":"essl","ak.bpcip":"8.222.208.0","ak.cport":58540,"ak.gh":"23.52.40.93","ak.quicv":"","ak.tlsv":"tls1.2","ak.0rtt":"","ak.0rtt.ed":"","ak.csrc":"-","ak.acc":"reno","ak.t":"1732442275","ak.ak":"hOBiQwZUYzCg5VSAfCLimQ==V+LJRyzBMHB/ZA2irxjxRD+XXXalJEaXInmv+x1RqZgbRHpNLqu3k66uZqauo12WG3J3Phm4k9i9jM32mwQ067eEhmaPvfcTffRstr30AXN4CN0xjQl/KNtSrXHPgMw6kSKF1J7pwgBf8vFGjWOX3wzmDJCFBW42BWslrfaRSmv0hGkcpCwA+3Q+2uxYCb02xEwg+JxoWDd3hjJbPXVXKfD7ZdxMaJlAL2c9RN3ePpYWxMLbuBAvmZpNn3UJjgtnzcgW5F809fOB1AntgGbjqkgC/r3JiQK2wIu63WWglSgzdMw3lchqks24R6mMNUDQDaybk6+r4URkVk4NpO+V/PKOJecq44+rkx8kYKqZ/IgWw5QEDbKdjsBXgZI+macqtMjR0Ayx6EjqcQZvaFZmNjFBhA0JsLWJCkmCXP5zZoA=","ak.pv":"21","ak.dpoabenc":"","ak.tf":i};if(""!==t)_["ak.ruds"]=t;var o={i:!1,av:function(e){var t="http.initiator";if(e&&(!e[t]||"spa_hard"===e[t]))_["ak.feo"]=void 0!==a.aFeoApplied?1:0,BOOMR.addVar(_)},rv:function(){var a=["ak.bpcip","ak.cport","ak.cr","ak.csrc","ak.gh","ak.ipv","ak.m","ak.n","ak.ol","ak.proto","ak.quicv","ak.tlsv","ak.0rtt","ak.0rtt.ed","ak.r","ak.acc","ak.t","ak.tf"];BOOMR.removeVar(a)}};BOOMR.plugins.AK={akVars:_,akDNSPreFetchDomain:n,init:function(){if(!o.i){var a=BOOMR.subscribe;a("before_beacon",o.av,null,null),a("onbeacon",o.rv,null,null),o.i=!0}return this},is_complete:function(){return!0}}}}()}(window);</script></head> <body onload="P7_initPM(0,1,0,0,-1)"> <a name="top"></a> <div id="header"> <div id="logo"> <a href="/en/home/index"><img src="/images/spacer.gif" alt="Java Community Process" height="81" width="151"></a> </div> <div id="tools"> <div class="search"> <form name="search" action="/en/jsr/summary" method="get" onsubmit="return validate_search()"> <input name="id" value="Search JSRs" size="16" class="form" onfocus="nullify_if_equal(this, 'Search JSRs')" type="text"> <a href="javascript:document.search.submit()" onclick="return validate_search()"><img src="/images/button_go.gif" width="21" height="16" border="0" alt="Submit this Search" name="sub_search"></a> </form> </div> <div class="tools"> <a href="/en/press/pressroom">Press Room</a> &nbsp;|&nbsp; <a href="http://java.com/java/download/index.jsp?cid=jdp78399">Get Java Here</a> &nbsp;|&nbsp; <!-- <a href="javascript:void(0)">Print Format</a> &nbsp;|&nbsp;&nbsp; --> </div> </div> <div style="clear: right;"></div> <div class="topbar"><img src="/images/spacer.gif" alt="" height="3" width="154"></div> <div id="update"> </div> </div> <!-- ** BEGIN: Content Table ** //--> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <!-- ** BEGIN: Navigation Column ** //--> <td width="150" id="leftcontent" valign="top"> <!-- Navigation Placeholder //--> <div class="bar"><img src="/images/hr_dots1.gif" alt="" height="3" width="150"></div> <!-- begin find JSRs form --> <!-- IMPORTANT! do not convert this form to Struts < html : form > tag. javascript change of form.action property fails. --> <img src="/images/hd_find-jsrs.gif" alt="Find JSRs" height="18" width="150"> <form name="findjsr" action="/en/jsr/summary" method="get" class="pt5" onsubmit="return validate_findjsr()"> <input name="id" size="18" class="form" value="Search JSRs" onfocus="nullify_if_equal(this, 'Search JSRs')" type="text"> <a href="javascript:document.findjsr.submit()" onclick="return validate_findjsr()"><img src="/images/button_go.gif" width="21" height="16" border="0" alt="Submit this Search" name="sub_search"></a> </form><br><br> <!-- ** Menu Start ** //--> <ul id="p7PMnav"> <li><a href="/en/jsr/platform">JSRs by Platform</a></li> <li><a href="/en/jsr/tech">JSRs by Technology</a></li> <li><a href="/en/jsr/stage">JSRs by Stage</a></li> <li><a href="/en/jsr/ec">JSRs by Committee</a></li> <li><a href="/en/jsr/all">List of All JSRs</a></li> <!--end find JSRs form --> <div style="clear: both;"><img src="/images/spacer.gif" alt="" height="25" width="1"></div> <!--begin my JCP --> <img src="/images/hd_my-jcp.gif" alt="My JCP" height="18" width="150"> <form name="login" method="get" action="/en/user/login" > <input name="Sign-in" type="submit" title="Sign-in" value="Sign-in" /> </form> <div style="clear:both"><img src="/images/global/spacer.gif" width="1" height="3" alt=""></div> <div class="noNav"> <a href="/en/user/register">Register for Site</a> </div> <div class="bar"><img src="/images/hr_dots1.gif" alt="" height="3" width="150"></div> <div class="noNav" style="color: #666666; padding: 0;"> Use of JCP site is subject to the <a href="/en/home/terms" style="display:inline;padding: 0">JCP Terms of Use</a> and the <a href="http://www.oracle.com/us/legal/privacy/index.html" style="display:inline;padding: 0" href="">Oracle Privacy Policy</a> </div> <div style="clear:both"><img src="/images/global/spacer.gif" width="1" height="25" alt=""></div> <!--begin JCP info --> <img src="/images/hd_jcp-info.gif" alt="JCP Info" height="18" width="150"> <li><a href="/en/procedures/overview" class="p7PMtrg">About JCP</a> <ul> <li><a href="/en/procedures/overview">Program Overview</a></li> <li><a href="/en/procedures/jcp2">JCP Process Document</a></li> <li><a href="/en/whatsnew/calendar">Calendar</a></li> <li><a href="/en/participation/members">JCP Members</a></li> <li><a href="/en/participation/committee">Executive Committee</a></li> <li><a href="/en/whatsnew/elections">Elections</a></li> </ul> </li> <li><a href="/en/participation/overview" class="p7PMtrg">Get Involved</a> <ul> <li><a href="/en/participation/overview">Overview</a></li> <li><a href="/en/participation/membership">Becoming a JCP Member</a></li> <li><a href="/java-in-education">Java in Education</a></li> </ul> </li> <li><a href="/en/resources/contents" class="p7PMtrg">Community Resources</a> <ul> <li><a href="/en/resources/contents">Overview</a></li> <li><a href="/en/resources/tutorials">Tutorials</a></li> <li><a href="/en/resources/multimedia">JCP Podcasts</a></li> <li><a href="/en/resources/guide">Spec Lead Guide</a></li> <li><a href="/en/resources/tdk">TCK Tool & Info</a></li> <li><a href="/en/resources/license_reference">License Reference</a></li> </ul> </li> <li><a href="/en/press/pmo" class="p7PMtrg">Community News</a> <ul> <li><a href="/en/press/pmo">News</a></li> <li><a href="/en/press/news/awards/awards_main">Programs &amp; Awards</a></li> <li><a href="/en/press/releases">Press Releases</a></li> <li><a href="/en/press/success">Success Stories</a></li> </ul> </li> <li><a href="/en/introduction/faq">FAQ</a></li> <li><a href="/en/resources/contacts">Contact Us</a></li> <div style="clear: both;"><img src="/images/spacer.gif" alt="" height="25" width="1"></div> <!--[if lte IE 6]><style>#p7PMnav a{height:1em;}#p7PMnav li{height:1em;float:left;clear:both;width:100%}</style><![endif]--> <!--[if IE 6]><style>#p7PMnav li{clear:none;}</style><![endif]--> <!--[if IE 7]><style>#p7PMnav a{zoom:100%;}#p7PMnav li{float:left;clear:both;width:100%;}</style><![endif]--> </ul> <!--begin ad space --> <div class="ads"> <a href="http://java.com/java/download/index.jsp?cid=jdp78399" target="_blank"><img style="display: ;" src="/images/ad_banner2.gif" alt="Ad Banner" border="1" height="70" width="150"></a> </div> <!--end ad space --> <!-- ** Menu End ** //--> &nbsp;<br> &nbsp;<br> &nbsp;<br> &nbsp;<br> <img src="/images/common/trans.gif" alt="" width="1" height="150"><br> </td> <!-- ** END: Navigation Column ** //--> <!-- ** BEGIN: Gutter Column ** //--> <td width="10" nowrap><img src="/images/common/trans.gif" alt="" width="10" height="1"></td> <!-- ** END: Gutter Column ** //--> <!-- ** BEGIN: Content Column ** //--> <td width="100%" valign="top"> <script type="text/javascript"> String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,""); } String.prototype.ltrim = function() { return this.replace(/^\s+/,""); } String.prototype.rtrim = function() { return this.replace(/\s+$/,""); } function validate_search() { if (document.search.id.value == "Search JSRs" || document.search.id.value.trim().length == 0) { alert("Search terms must be entered first"); return false; } return true; } function validate_findjsr() { if (document.findjsr.id.value == "Search JSRs" || document.findjsr.id.value.trim().length == 0) { alert("Search terms must be entered first"); return false; } return true; } function nullify_if_equal(field, str) { // alert("val=" + field.value); if (field.value == str) { field.value = ""; } } </script> <!-- ** END: header.jsp ** //--> <!-- BEGIN NAVIGATION TABS --> <div id="p7TP1"> <div class="p7TP_tabs"> <div id="p7tpb1_1" class="down"><a class="down">JSR</a></div> <div><a href="/en/egc/view?id=277">Community</a></div> <div><a href="/en/eg/eghome?id=277">Expert Group</a></div> <br class="p7TPclear" /> </div> <div class="p7TPcontent"> <div id="p7tpc1_1"> <a href="summary?id=277">Summary</a> &nbsp;|&nbsp; <a href="proposalDetails?id=277">Proposal</a> &nbsp;|&nbsp; <span>Detail (Summary &amp; Proposal)</span> </div> </div> <!--[if lte IE 6]><style type="text/css">.p7TPpanel div,.p7TPpanel a{height:1%;}.p7TP_tabs a{white-space:nowrap;}</style><![endif]--> </div> <script type="text/javascript"> P7_initTP(1,0); </script> <!-- END NAVIGATION TABS --> <div class="anybar"><img src="/images/global/bar_green.gif" alt="" width="12" height="4"></div> <div class="header2">JSRs: Java Specification Requests</div> <div class="header1">JSR 277: Java<font size="-2"><sup>TM</sup></font> Module System</div> <div class="anybar"><img src="/images/global/bar_green.gif" alt="" width="12" height="4"></div> <br> <!-- ********************************************** --> <!-- JSR Status information --> <!-- ********************************************** --> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td id="centercontent" valign="top"> <tr> <td> <table class="tbl" cellpadding="4" cellspacing="1" width="100%"> <tr valign="top"> <td class="bdtl">Stage</td> <td class="bdtl">Access</td> <td class="bdtl">Start</td> <td class="bdtl">Finish</td> </tr> <tr class="bgw" valign="top"> <td>Withdrawn </td> <td>&nbsp;</td> <td>20 Jan, 2016</td> <td>&nbsp;</td> </tr> <tr class="bgw" valign="top"> <td>Early Draft Review </td> <td><a href="http://jcp.org/aboutJava/communityprocess/edr/jsr277/index.html">Download page</a></td> <td>11 Oct, 2006</td> <td>13 Nov, 2006</td> </tr> <tr class="bgw" valign="top"> <td>Expert Group Formation </td> <td>&nbsp;</td> <td>28 Jun, 2005</td> <td>31 Aug, 2005</td> </tr> <tr class="bgw" valign="top"> <td>JSR Review Ballot </td> <td><a href="results?id=3238">View results</a></td> <td>14 Jun, 2005</td> <td>27 Jun, 2005</td> </tr> </table> </td> </tr> </td> </tr> </table> <!-- ********************************************** --> <!-- JCP Version --> <!-- ********************************************** --> <span style="padding: 10px; display: block;"> <b> Status: </b><a href="/en/introduction/glossary#status"><font color=red><span title="A JSR that was withdrawn from the JCP by the Specification Lead before Final Release.">Withdrawn</span></font></a><br> <b> Reason:</b> Withdrawn at the request of the Specification Lead. Superseded by JSR 376.<br> <b>JCP version in use:</b> <a href="/procedures/jcp2_6"> 2.6</a><br> <b>Java Specification Participation Agreement version in use:</b> 2.0<br> <br><br> <b>Description</b>:<br> The specification defines a distribution format and a repository for collections of Java code and related resources. It also defines the discovery, loading, and integrity mechanisms at runtime. <br><br> <!-- ********************************************** --> <!-- JSR Comments Email excluding JSR 900 and up --> <!-- ********************************************** --> <b> Please direct comments on this JSR to the Spec Lead(s) </b> <br> </span> <!-- ****************************************** --> <div id="p7TP52"> <div class="p7TP_tabs2"> <div><span>Team</span></div> <br class="p7TPclear" /> </div> </div> <table bgcolor="#f2f2f2" border="0" cellpadding="5" cellspacing="1" width="100%"> <tr valign="top"> <td colspan="3"><span class="header4">Specification Leads</span></td> </tr> <tr valign="top"> <td width="20" nowrap>&nbsp;</td> <td>Alex&nbsp;Buckley</td> <td>Oracle</td> </tr> <tr valign="top"> <td colspan="4" class="spacerw"><img src="/images/global/spacer.gif" alt="" height="1" width="1"></td> </tr> <tr valign="top"> <td colspan="3"><span class="header4">Expert Group</span></td> </tr> <tr valign="top"> <td width="20" nowrap>&nbsp;</td> <!-- Gutter //--> <td>Apache Software Foundation</td> <td>Bock, David W</td> <td>Google Inc.</td> </tr> <tr valign="top"> <td width="20" nowrap>&nbsp;</td> <!-- Gutter //--> <td>Hall, Richard S.</td> <td>IBM</td> <td>Lea, Doug</td> </tr> <tr valign="top"> <td width="20" nowrap>&nbsp;</td> <!-- Gutter //--> <td>Leuck, Daniel</td> <td>Oracle</td> <td>Pullara, Samuel</td> </tr> <tr valign="top"> <td width="20" nowrap>&nbsp;</td> <!-- Gutter //--> <td>Red Hat</td> <td>SAP SE</td> <td>SAS Institute Inc.</td> </tr> <tr valign="top"> <td width="20" nowrap>&nbsp;</td> <!-- Gutter //--> <td>Sun Microsystems, Inc.</td> </tr> </tr> </table> <!-- ********************************************** --> <!-- Expert Group Status --> <!-- ********************************************** --> <table cellpadding="0" cellspacing="0" border="0"> </table> <!-- ****************************************** --> <!-- ********************************************** --> <!-- JSRProposal Info --> <!-- ********************************************** --> <p> This JSR has been <a href="/en/introduction/glossary#status"><font color=red><span title="A JSR that was withdrawn from the JCP by the Specification Lead before Final Release.">Withdrawn</span></font></a><br> <b> Reason:</b> Withdrawn at the request of the Specification Lead. Superseded by JSR 376.<br> <br> This JSR has been <a href="/en/jsr/stage?listBy=withdrawn">withdrawn</a>. <P> <HR> <P> <a name="updates"><font size="+2">Updates to the Original JSR</font></a><p> The following updates have been made since <a href="#orig">the original request</a>. <P> <P><B>Supporting this JSR:</B> </P> <P>BEA Systems<BR> Capgemini<BR> Doug Lea<BR> Fujitsu Limited<BR> Intel<BR> JBoss<BR> Oracle<BR> SouJava<BR> Sun Microsystems</p> <H4>2.1 Please describe the proposed Specification:</H4> <P> Java Archives (JARs) are widely used as both the distribution and execution format for Java applications. The JAR format dates back to the mid-1990s, and it has not scaled particularly well in either of these roles. JAR files are hard to distribute, hard to version, and hard to reference in general. <P> Distributing a simple Java application is considered to be a complicated task by many developers because it often involves creating a native installer to package multiple JARs into a distribution unit, and it sometimes involves converting the application into a Java applet or JNLP (Java Network Launching Protocol) application for web-based deployment. <P> There is no built-in versioning support in the JAR format. There is no reliable mechanism for expressing, resolving, and enforcing the dependency of one JAR upon another. Referencing a JAR, moreover, involves specifying it in the classpath. Since the path of a JAR may change during deployment, developers are forced to fix up all the references to the deployed JARs as part of the deployment process. <P> Developers also find it quite difficult to deploy installed Java extensions (a.k.a optional packages) because they can easily run into issues like versioning conflict and namespace collision. Java extensions can currently only be installed into a specific Java Runtime Environment (JRE); it is basically impossible to arrange for an installed extension to be shared across multiple JRE installations. <P> The specification of the Java Module System should define an infrastructure that addresses the above issues. Its components are likely to include: <P> o A distribution format (i.e., a Java module) and its metadata as a unit of delivery for packaging collections of Java code and related resources. The metadata would contain information about a module, the resources within the module, and its dependencies upon other modules. The metadata would also include an export list to restrict resources from being exposed outside the module unintentionally. The metadata may allow subset of exposed resources to be used by other modules selectively. <P> o A versioning scheme that defines how a module declares its own version as well its versioned dependencies upon other modules. <P> o A repository for storing and retrieving modules on the machine with versioning and namespaces isolation support. <P> o Runtime support in the application launcher and class loaders for the discovery, loading, and integrity checking of modules. <P> o A set of support tools, including packaging tools as well as repository tools to support module installation and removal. <P> We also expect the Java Module System to expose the public Java SE APIs as a virtual module in order to prevent unwanted usage of the private APIs in the implementation. <H4>2.2 What is the target Java platform? (i.e., desktop, server, personal, embedded, card, etc.)</H4> <P>Java SE. <H4>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.</H4> <P>This JSR is submitted to the Java SE EC although we expect the functionality in this JSR to be heavily used by Java EE. <H4>2.6 Why isn't this need met by existing specifications?</H4> <P> The existing specifications are inadequate to addresses the following issues: <P> 1. No uniform deployment model for Java application and extensions. <P> The Java Network Launching Protocol (JNLP, JSR 56) defines a protocol and API that enables Java applications to be deployed on the web. A JNLP descriptor is simply an XML file that describes a collection of resources on the web and the launching options for deploying an application or extension. A JNLP descriptor is completely unbounded with respect to the resources on the web; there is no concept of distribution unit. Because a JNLP descriptor describes resources on the web, it contains hardcoded URLs to the resources, and it is difficult to redistribute the application from different hosts (e.g., for load-balancing) or to deploy from a different target (e.g., Intranet server or CD install). Resource versioning in JNLP is arbitrary, and it does not tie to the actual version of the resource. Finally, in order to take advantage of JNLP, an application or extension must be converted to run in a JNLP client container; this makes JNLP unsuitable as a general application deployment model. <P> The Java Platform, Enterprise Edition (Java EE) specification defines WARs (web application archive) and EARs (enterprise application archive) as packaging formats for Java EE-based applications. These packaging formats were designed for deployment with Java EE containers (i.e., web containers and EJB containers). They cannot be retrofitted for general application deployment purpose. <P> The Java EE specification also mandates explicit support for referencing dependent JARs through the "Class-Path:" manifest entry in the Java EE module. However, the "Class-Path:" entry requires dependent JARs to be referenced through either relative or full file system paths, and there is no built-in versioning support. Therefore, the "Class-Path:" entry is not a sufficient solution to address the JAR referencing problem. <P> In addition, the Java EE specification mandates explicit support for referencing installed extensions through the "Extension-List:" manifest entry in the Java EE module. However, the "Extension-List:" entry only supports extension dependency based on the minimum version of a specification or the minimum version of an implementation, and there is no support for exact version or version range. Thus, the "Extension-List:" entry is not a sufficient solution to address the JAR referencing problem. <P> The R3 version of the Open Services Gateway Initiative (OSGi) specification defines a framework that enables the deployment of service-oriented applications (called bundles). However, the framework only supports package dependency based on the minimum version of a specification, and there is no support for exact version or version range. The framework also supports package dependency based on an implementation, but there is no support for versioning. Moreover, the framework must choose one bundle that will be the provider of the exported package for all bundles which have dependencies on that package, so it is impossible to support more than one version of shared package at runtime. Besides, the selection of exported package provider is anonymous, and there is no way to influence the selection. Because the versioning semantics in the OSGi R3 framework is simplistic, it is not a sufficient solution to address the JAR referencing problem. <P> 2. No means to resolve versioning conflicts and namespace collision among Java extensions in a JRE. <P> The Java Extension Architecture defines how JARs may be referenced through the "Class-Path:" entry in the JAR manifest as bundled extensions, and how JARs may be referenced from {java.home}/lib/ext as installed extensions. Unfortunately, the extension mechanism loads all JARs in the extension directory into the same extension classloader at runtime regardless of whether or not they are actually referenced by the application. As a result, if classes in a referenced JAR have a versioning conflict or namespace collision with classes in some other extension JARs, there is no simple way to resolve the problem. <P> 3. No means to share Java extensions among different JREs on the same system. <P> The Java Extension Architecture allows JARs to be referenced from {java.home}/lib/ext as installed extensions. However, the location is JRE specific, so each JRE may have its own set of installed extensions, and maintaining consistency of installed extensions among JREs on a system is very tedious. <H4>2.7 Please give a short description of the underlying technology or technologies:</H4> <P>The Java SE platform already includes support for the JAR format, class-loader delegation, standard extensions, code signing, and verification. <H4>2.12 Are there any existing specifications that might be rendered obsolete, deprecated, or in need of revision as a result of this work?</H4> <P>The intent is to encourage developers to migrate away from the {java.home}/lib/ext directory as part of Java SE 7. <H4>2.13 Please describe the anticipated schedule for the development of this specification.</H4> <P>The intention is to deliver this JSR as a component of Java SE 7 (code name "Dolphin"). Early Draft Review would occur in the first half of 2006, Public Review in the first half of 2007, and Proposed Final Draft in the second half of 2007. <H4>2.16 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. </H4> <P>This JSR and its RI and TCK are intended to be part of the Java SE 7 RI and TCK, respectively. <H4>2.18 Please provide a description of the business terms for the Specification, RI and TCK that will apply when this JSR is final.</H4> <P>The RI and TCK will be delivered and licensed as part of the RI and TCK for Java SE 7. <P><HR><P> <a name="orig"><font size="+2">Original Java Specification Request (JSR)</font></a><p> <FONT SIZE="-1"> <!-- BEGIN-SUB TOPICS --> <A HREF="#1"> Identification</A> | <A HREF="#2"> Request</A> | <A HREF="#3"> Contributions</A> | <A HREF="#4"> Additional Information</A> <BR> <!-- END-SUB TOPICS --> </FONT> <P> <!-- BEGIN TEMPLATE --> <!-- SECTION 1 --> <A NAME="1"></A> <P><FONT size=+2>Section 1. Identification</FONT> <P><b>Submitting Member:</b> Sun Microsystems</P> <P><b>Name of Contact Person:</b> Stanley M. Ho</P> <P><b>E-Mail Address:</b> stanley.ho<faketag></faketag>&#64;sun.com</P> <P><b>Telephone Number:</b> +1 408 276 7117</P> <P><b>Fax Number:</b> +1 408 276 7209</P> <BR> <P><b>Specification Lead:</b> Stanley M. Ho</P> <P><b>E-Mail Address:</b> stanley.ho<faketag></faketag>&#64;sun.com</P> <P><b>Telephone Number:</b> +1 408 276 7117</P> <P><b>Fax Number:</b> +1 408 276 7209</P> <BR> <P><B>Initial Expert Group Membership:</B> </P> <P>TBD</P> <P><B>Supporting this JSR:</B> </P> <P>BEA Systems<BR> Capgemini<BR> Doug Lea<BR> Fujitsu Limited<BR> Intel<BR> JBoss<BR> SouJava<BR> Sun Microsystems</p> <P> <font color="red">NOTE</font> that this information <a href="#updates">has been updated</a> from this original request. <BR><BR> <!-- SECTION 2 --> <A NAME="2"></A> <P> <FONT SIZE="+2">Section 2: Request</FONT><P> </P> <H4>2.1 Please describe the proposed Specification:</H4> <P> <font color="red">NOTE</font> that this information <a href="#updates">has been updated</a> from this original request. <P>Java Archives (JARs) are widely used as both the distribution and execution format for Java applications. The JAR format dates back to the mid-1990s, and it has not scaled particularly well in either of these roles. JAR files are hard to distribute, hard to version, and hard to reference in general. <P> Distributing a simple Java application is considered to be a complicated task by many developers because it often involves creating a native installer to package multiple JARs into a distribution unit, and it sometimes involves converting the application into a Java applet or JNLP (Java Network Launching Protocol) application for web-based deployment. <P> There is no built-in versioning support in the JAR format. There is no reliable mechanism for expressing, resolving, and enforcing the dependency of one JAR upon another. Referencing a JAR, moreover, involves specifying it in the classpath. Since the path of a JAR may change during deployment, developers are forced to fix up all the references to the deployed JARs as part of the deployment process. <P> Developers also find it quite difficult to deploy installed Java extensions (a.k.a optional packages) because they can easily run into issues like versioning conflict and namespace collision. Java extensions can currently only be installed into a specific Java Runtime Environment (JRE); it is basically impossible to arrange for an installed extension to be shared across multiple JRE installations. <P> The specification of the Java Module System should define an infrastructure that addresses the above issues. Its components are likely to include: <P> o A distribution format (i.e., a Java module) and its metadata as a unit of delivery for packaging collections of Java code and related resources. The metadata would contain information about a module, the resources within the module, and its dependencies upon other modules. The metadata would also include an export list to restrict resources from being exposed outside the module unintentionally. The metadata may allow subset of exposed resources to be used by other modules selectively.<P> o A versioning scheme that defines how a module declares its own version as well its versioned dependencies upon other modules. <P> o A repository for storing and retrieving modules on the machine with versioning and namespaces isolation support. <P> o Runtime support in the application launcher and class loaders for the discovery, loading, and integrity checking of modules. <P> o A set of support tools, including packaging tools as well as repository tools to support module installation and removal. <P> We also expect the Java Module System to expose the public J2SE APIs as a virtual module in order to prevent unwanted usage of the private APIs in the implementation. </P> <H4>2.2 What is the target Java platform? (i.e., desktop, server, personal, embedded, card, etc.)</H4> <P>J2SE.</P> <P> <font color="red">NOTE</font> that this information <a href="#updates">has been updated</a> from this original request. <H4>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.</H4> <P> <font color="red">NOTE</font> that this information <a href="#updates">has been updated</a> from this original request. <P>This JSR is submitted to the J2SE EC although we expect the functionality in this JSR to be heavily used by J2EE.</P> <h4>Should this JSR be voted on by both Executive Committees?</H4> <P>No.</P> <H4>2.5 What need of the Java community will be addressed by the proposed specification?</H4> <P>Developers often find themselves drowning in JARs because JARs are hard to distribute, hard to version, and hard to reference in general. The proposed specification will simplify the deployment of Java-based applications and extensions by making it possible for developers to package them into convenient distribution units and deploy them easily on the system through the repository and the runtime support.</P> <H4>2.6 Why isn't this need met by existing specifications?</H4> <P> <font color="red">NOTE</font> that this information <a href="#updates">has been updated</a> from this original request. <P>The existing specifications are inadequate to addresses the following issues: <P> 1. No uniform deployment model for Java application and extensions. <P> The Java Network Launching Protocol (JNLP, JSR 56) defines a protocol and API that enables Java applications to be deployed on the web. A JNLP descriptor is simply an XML file that describes a collection of resources on the web and the launching options for deploying an application or extension. A JNLP descriptor is completely unbounded with respect to the resources on the web; there is no concept of distribution unit. Because a JNLP descriptor describes resources on the web, it contains hardcoded URLs to the resources, and it is difficult to redistribute the application from different hosts (e.g., for load-balancing) or to deploy from a different target (e.g., Intranet server or CD install). Resource versioning in JNLP is arbitrary, and it does not tie to the actual version of the resource. Finally, in order to take advantage of JNLP, an application or extension must be converted to run in a JNLP client container; this makes JNLP unsuitable as a general application deployment model. <P> The Java 2 Enterprise Edition (J2EE) specification defines WARs (web application archive) and EARs (enterprise application archive) as packaging formats for J2EE-based applications. These packaging formats were designed for deployment with J2EE containers (i.e., web containers and EJB containers). They cannot be retrofitted for general application deployment purpose. <P> The J2EE specification also mandates explicit support for referencing dependent JARs through the "Class-Path:" manifest entry in the J2EE module. However, the "Class-Path:" entry requires dependent JARs to be referenced through either relative or full file system paths, and there is no built-in versioning support. Therefore, the "Class-Path:" entry is not a sufficient solution to address the JAR referencing problem. <P> In addition, the J2EE specification mandates explicit support for referencing installed extensions through the "Extension-List:" manifest entry in the J2EE module. However, the "Extension-List:" entry only supports extension dependency based on the minimum version of a specification or the minimum version of an implementation, and there is no support for exact version or version range. Thus, the "Extension-List:" entry is not a sufficient solution to address the JAR referencing problem. <P> The current version of the Open Services Gateway Initiative (OSGi) specification defines a framework that enables the deployment of service-oriented applications (called bundles). However, the framework only supports package dependency based on the minimum version of a specification, and there is no support for exact version or version range. The framework also supports package dependency based on an implementation, but there is no support for versioning. Moreover, the framework must choose one bundle that will be the provider of the exported package for all bundles which have dependencies on that package, so it is impossible to support more than one version of shared package at runtime. Besides, the selection of exported package provider is anonymous, and there is no way to influence the selection. Because the versioning semantics in the OSGi framework is simplistic, it is not a sufficient solution to address the JAR referencing problem. <P> 2. No means to resolve versioning conflicts and namespace collision among Java extensions in a JRE. <P> The Java Extension Architecture defines how JARs may be referenced through the "Class-Path:" entry in the JAR manifest as bundled extensions, and how JARs may be referenced from {java.home}/lib/ext as installed extensions. Unfortunately, the extension mechanism loads all JARs in the extension directory into the same extension classloader at runtime regardless of whether or not they are actually referenced by the application. As a result, if classes in a referenced JAR have a versioning conflict or namespace collision with classes in some other extension JARs, there is no simple way to resolve the problem. <P> 3. No means to share Java extensions among different JREs on the same system. <P> The Java Extension Architecture allows JARs to be referenced from {java.home}/lib/ext as installed extensions. However, the location is JRE specific, so each JRE may have its own set of installed extensions, and maintaining consistency of installed extensions among JREs on a system is very tedious.</P> <H4>2.7 Please give a short description of the underlying technology or technologies:</H4> <P> <font color="red">NOTE</font> that this information <a href="#updates">has been updated</a> from this original request. <P>The J2SE platform already includes support for the JAR format, class-loader delegation, standard extensions, code signing, and verification.</P> <H4>2.8 Is there a proposed package name for the API Specification? (i.e., <TT>javapi.something</TT>, <TT>org.something</TT>, etc.)</H4> <P>All APIs are expected to reside in the java.lang.module package (subject to change). The APIs may provide functionality for discovering, loading, and managing modules in the repository.</P> <H4>2.9 Does the proposed specification have any dependencies on specific operating systems, CPUs, or I/O devices that you know of?</H4> <P>No.</P> <H4>2.10 Are there any security issues that cannot be addressed by the current security model?</H4> <P>No.</P> <H4>2.11 Are there any internationalization or localization issues?</H4> <P>No i18n or l10n issue beyond localizing messages in the implementation.</P> <H4>2.12 Are there any existing specifications that might be rendered obsolete, deprecated, or in need of revision as a result of this work?</H4> <P> <font color="red">NOTE</font> that this information <a href="#updates">has been updated</a> from this original request. <P>The intent is to encourage developers to migrate away from the {java.home}/lib/ext directory as part of J2SE 7.0.</P> <H4>2.13 Please describe the anticipated schedule for the development of this specification.</H4> <P> <font color="red">NOTE</font> that this information <a href="#updates">has been updated</a> from this original request. <P>The intention is to deliver this JSR as a component of J2SE 7.0 (code name "Dolphin"). Early Draft Review would occur in the first half of 2006, Public Review in the first half of 2007, and Proposed Final Draft in the second half of 2007.</P> <H4>2.14 Please describe the anticipated working model for the Expert Group working on developing this specification.</H4> <P>A mailing list is intended to be the primary communication mechanism among members of the expert group.</P> <H4>2.15 It is important to the success of the community and each JSR that the work of the Expert Group be handled in a manner which provides the community and the public with insight into the work the Expert Group is doing, and the decisions that the Expert Group has made. The Executive Committees would like to ensure Spec Leads understand the value of this transparency and ask that each JSR have an operating plan in place for how their JSR will address the involvement of the community and the public. Please provide your plan here, and refer to the Spec Lead Guide for a more detailed description and a set of example questions you may wish to answer in your plan.</H4> <P>We anticipate providing draft specs every two to three months after the first draft is released until the Proposed Final Draft. A JSR interest mailing list will be established so interested parties can be informed of issues under discussion.</P> <H4>2.16 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. </H4> <P> <font color="red">NOTE</font> that this information <a href="#updates">has been updated</a> from this original request. <P>This JSR and its RI and TCK are intended to be part of the J2SE 7.0 RI and TCK, respectively.</P> <H4>2.17 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). </H4> <P>Not applicable.</P> <H4>2.18 Please provide a description of the business terms for the Specification, RI and TCK that will apply when this JSR is final.</H4> <P> <font color="red">NOTE</font> that this information <a href="#updates">has been updated</a> from this original request. <P>The RI and TCK will be delivered and licensed as part of the RI and TCK for J2SE 7.0.</P> <BR><BR> <BR><BR> <!-- SECTION 3 --> <A NAME="3"></A> <P> <FONT SIZE="+2">Section 3: Contributions</FONT><P> </P> <H4>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.</H4> <P>Not applicable.</P> <H4>3.2 Explanation of how these items might be used as a starting point for the work.</H4> <P>Not applicable.</P> <BR><BR> <!-- SECTION 4 --> <A NAME="4"></A> <P> <FONT SIZE="+2">Section 4: Additional Information (Optional)</FONT><P> </P> <H4>4.1 This section contains any additional information that the submitting Member wishes to include in the JSR.</H4> <P>The expert group will seek to learn from the work of these existing initiatives during the development of this JSR: <P> [1] OSGi Service Platform: http://www.osgi.org/ <P> [2] Eclipse Plug-in Architecture: http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html <P> [3] NetBeans Module Architecture: http://www.netbeans.org/project/www/download/dev/javadoc/OpenAPIs/org/openide/modules/doc-files/api.html <P> [4] .NET Assemblies: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconassemblies.asp <P> In addition, the expert group will seek to learn from this existing initiative for its repository feature: <P> [1] Maven: http://maven.apache.org/</P> <BR><BR> </p> <!-- ** BEGIN: footer.jsp ** //--> </td> </tr> </table> <!-- ** END: Content Table ** //--> <!-- ** BEGIN: Footer Table ** //--> <div id="footer" style="clear: both;"> <div class="footleft"> <a href="/en/resources/contacts">Contact Us</a> </div> <div class="botbar"><img src="/images/spacer.gif" alt="" height="23" width="1"></div> <div class="footleft2"> &copy; 2024, Oracle Corporation and/or its affiliates. <a href="/en/home/terms">Terms of Use</a>. <a href="http://www.oracle.com/us/legal/privacy/index.html">Privacy Policy</a>. <a href="http://www.oracle.com/us/legal/third-party-trademarks/third-party-trademarks-078568.html">Trademarks</a> </div> <div class="footright"> <img src="/images/common/logo_oracle_footer.gif" alt="Oracle Corporation" height="22" width="91"> </div> <div style="clear: both;"><img src="/images/spacer.gif" alt="" height="30" width="1"></div> </div> <!-- ** END: Footer Table ** //--> <!-- ** Menu Start ** //--> </body> </html> <!-- ** END: footer.jsp ** //-->

Pages: 1 2 3 4 5 6 7 8 9 10