You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2003/05/14 13:34:27 UTC

cvs commit: ant/docs/projects/antlib antlib_classloaders.html antlib_contract.html antlib_descriptors.html antlib_namespaces.html antlib_roadmap.html index.html roles.html

bodewig     2003/05/14 04:34:27

  Added:       docs/projects/antlib antlib_classloaders.html
                        antlib_contract.html antlib_descriptors.html
                        antlib_namespaces.html antlib_roadmap.html
                        index.html roles.html
  Log:
  Regenerate docs
  
  Revision  Changes    Path
  1.1                  ant/docs/projects/antlib/antlib_classloaders.html
  
  Index: antlib_classloaders.html
  ===================================================================
  
  
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html lang="en">
      <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
      <head>
        <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          <title>Apache Ant - Antlib Class Loaders</title>
          <link type="text/css" href="../../page.css" rel="stylesheet">
            <meta name="author" content="Antoine Levy-Lambert">
    <meta name="email" content="antoine@apache.org">
        </head>
  
      <body>
        <p class="navpath">
          <script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
        </p>
  
        <div class="logobar">
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td>
              <td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td>
              <td align="right">
                <form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get">
                  <table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
                    <tr>
                      <td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td nowrap="nowrap" class="searchcaption">
                        <input name="q" type="hidden">
                        <input size="15" id="query" type="text">
                        <img height="1" width="5" alt="" src="../../images/spacer.gif">
                        <input name="Search" value="Search" type="submit">
                        <br>
                        the Apache Ant site
                      </td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td>
                    </tr>
                  </table>
                </form>
              </td>
            </tr>
          </table>
        </div>
  
                    <div class="tab">
                <table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                                    <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                                      <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                              </tr>
                </table>
              </div>
  
        <div class="bluebar"></div>
                                                        
    <div class="menucontainer">
      <div class="menu">
        <ul>
              </ul>
      </div>
      <img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif">
      <img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif">
    </div>  
        <div class="lightbluebar">&nbsp;</div>
    <div class="main">
    <div class="content">
      <h1 class="title">Antlib Class Loaders</h1>
              <h3 class="section">
        <a name="Jose Alberto Fernandez"></a>
        Jose Alberto Fernandez
      </h3>
                          <p>
   Let me first say that this feature appeared by the need to be able to say,
   </p>
                                  <pre class="code">
  &lt;antlib name=&quot;A&quot; classpathref=&quot;XYZ&quot;/&gt;
  &lt;antlib name=&quot;B&quot; classpathref=&quot;XYZ&quot;/&gt;
  </pre>
                                  <p>
   And being able to make sure that B and A use the same classLoader
   and therefore they can use each other components.
  </p>
                                  <p>
  
   My solution at the time was this idea of a named classloader that
   you could define using a classpath, and then tell your antlibs use
   this or that classloader, if you use the same classloader visibility
   is guaranteed.
  </p>
                          <h3 class="section">
        <a name="Stefan Bodewig 23.04.2003 17:11"></a>
        Stefan Bodewig 23.04.2003 17:11
      </h3>
                          <p>
  
  I understand that usecase (using the same class loader for 2 different antlibs) 
  and think it's important.  See Steve
  Loughran's comment on the .NET tasks wanting to have access to the
  datatypes defined in the cpptasks project for example.
  </p>
                                  <p>
  
  Take a look at what Costin had done to &lt;taskdef&gt; and &lt;typedef&gt; with
  the loaderref attribute.  This has now (i.e. CVS HEAD) been
  generalized in ClasspathUtils, the infrastructure for named
  classloaders is there - at least the foundation for it.
  </p>
                                  <p>
  
  Stefan
  </p>
                          <h3 class="section">
        <a name="Costin Manolache 29.04.2003 18:52"></a>
        Costin Manolache 29.04.2003 18:52
      </h3>
                          <p>
  The main issue is how to enforce ordering to deal with dependencies
  between the antlibs.
  </p>
                                  <p>
  Or simply do not deal with dependencies, ie antlibs must not (yet)
  depend on on the other, except for the core ones.
  </p>
                                  <p>
  Using an unified class loader ( at least as default ) - like jboss is doing,
  or like JMX loading policy  - has a lot of benefits.  It also has some cases
  that are not well covered - so we'll probably need to deal with both
  "unified loader" and "loader hierarchy" cases.
  </p>
                  
      </div>
    </div>
  
          <p class="copyright">
          Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
          <script type="text/javascript" language="JavaScript"><!--
                  document.write(" - "+"Last Published: " + document.lastModified);
                //  -->
          </script>
        </p>
      </body>
    </html>
  
  
  
  
  
  
  
  
  
  
  
  
  1.1                  ant/docs/projects/antlib/antlib_contract.html
  
  Index: antlib_contract.html
  ===================================================================
  
  
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html lang="en">
      <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
      <head>
        <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          <title>Apache Ant - Antlib Contract</title>
          <link type="text/css" href="../../page.css" rel="stylesheet">
            <meta name="author" content="Antoine Levy-Lambert">
    <meta name="email" content="antoine@apache.org">
        </head>
  
      <body>
        <p class="navpath">
          <script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
        </p>
  
        <div class="logobar">
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td>
              <td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td>
              <td align="right">
                <form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get">
                  <table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
                    <tr>
                      <td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td nowrap="nowrap" class="searchcaption">
                        <input name="q" type="hidden">
                        <input size="15" id="query" type="text">
                        <img height="1" width="5" alt="" src="../../images/spacer.gif">
                        <input name="Search" value="Search" type="submit">
                        <br>
                        the Apache Ant site
                      </td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td>
                    </tr>
                  </table>
                </form>
              </td>
            </tr>
          </table>
        </div>
  
                    <div class="tab">
                <table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                                    <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                                      <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                              </tr>
                </table>
              </div>
  
        <div class="bluebar"></div>
                                                        
    <div class="menucontainer">
      <div class="menu">
        <ul>
              </ul>
      </div>
      <img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif">
      <img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif">
    </div>  
        <div class="lightbluebar">&nbsp;</div>
    <div class="main">
    <div class="content">
      <h1 class="title">Antlib Contract</h1>
              <h3 class="section">
        <a name="definition of antlibs"></a>
        definition of antlibs
      </h3>
                          <p>
  Antlibs are special-purpose jar files containing a deployment descriptor called antlib.xml.
  These jar files contain ant tasks and types. In the near future, they will also contain custom components too able to act as filters, mappers, ...
  </p>
                                  <p>
  The precise location of the deployment descriptor is already a point of discussion. (such as com/xyz/anttasks/antlib.xml). <a href="antlib_descriptors.html#concerns concerning the location of the descriptor (Costin Manolache)">Costin Manolache would prefer deployment descriptors to live in packages </a> The original proposal is to put the deployment descriptor into META-INF/antlib.xml in the jar files.
  </p>
                          <h3 class="section">
        <a name="loading of antlibs"></a>
        loading of antlibs
      </h3>
                          <p>
  Under ant.home, a new subdirectory autolib would be created for antlibs to be loaded "spontaneously".
  </p>
                                  <p>
  antlibs can also be loaded explicitly with an &lt;antlib/&gt; task.
  </p>
                          <h3 class="section">
        <a name="links"></a>
        links
      </h3>
                          <p>
                  <a href="http://cvs.apache.org/viewcvs.cgi/*checkout*/ant/proposal/sandbox/antlib/docs/manual/CoreTasks/antlib.html?rev=HEAD">Antlib task documentation</a>
  </p>
                                  <p>
                  <a href="http://cvs.apache.org/viewcvs.cgi/*checkout*/ant/proposal/sandbox/antlib/docs/manual/CoreTasks/antjar.html?rev=HEAD">Antjar task documentation</a>
  </p>
                          <h3 class="section">
        <a name="todo"></a>
        todo
      </h3>
                                <h4 class="subsection">
          <a name="versions"></a>
          versions
        </h4>
                          <p>
  ant-required-version, antlib-version (version used to build the library)
  </p>
                                
      </div>
    </div>
  
          <p class="copyright">
          Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
          <script type="text/javascript" language="JavaScript"><!--
                  document.write(" - "+"Last Published: " + document.lastModified);
                //  -->
          </script>
        </p>
      </body>
    </html>
  
  
  
  
  
  
  
  
  
  
  
  
  1.1                  ant/docs/projects/antlib/antlib_descriptors.html
  
  Index: antlib_descriptors.html
  ===================================================================
  
  
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html lang="en">
      <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
      <head>
        <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          <title>Apache Ant - Antlib Descriptor</title>
          <link type="text/css" href="../../page.css" rel="stylesheet">
            <meta name="author" content="Antoine Levy-Lambert">
    <meta name="email" content="antoine@apache.org">
        </head>
  
      <body>
        <p class="navpath">
          <script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
        </p>
  
        <div class="logobar">
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td>
              <td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td>
              <td align="right">
                <form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get">
                  <table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
                    <tr>
                      <td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td nowrap="nowrap" class="searchcaption">
                        <input name="q" type="hidden">
                        <input size="15" id="query" type="text">
                        <img height="1" width="5" alt="" src="../../images/spacer.gif">
                        <input name="Search" value="Search" type="submit">
                        <br>
                        the Apache Ant site
                      </td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td>
                    </tr>
                  </table>
                </form>
              </td>
            </tr>
          </table>
        </div>
  
                    <div class="tab">
                <table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                                    <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                                      <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                              </tr>
                </table>
              </div>
  
        <div class="bluebar"></div>
                                                        
    <div class="menucontainer">
      <div class="menu">
        <ul>
              </ul>
      </div>
      <img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif">
      <img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif">
    </div>  
        <div class="lightbluebar">&nbsp;</div>
    <div class="main">
    <div class="content">
      <h1 class="title">Antlib Descriptor</h1>
              <h3 class="section">
        <a name="antlib descriptor in the proposal"></a>
        antlib descriptor in the proposal
      </h3>
                          <pre class="code">
  &lt;antlib version=&quot;1.5&quot; &gt;
    &lt;task name=&quot;mkdir&quot; class=&quot;org.apache.tools.ant.taskdefs.Mkdir&quot;/&gt;
    ...
    &lt;data-type name=&quot;fileset&quot; class=&quot;org.apache.tools.ant.types.FileSet&quot;/&gt;
    ...
    &lt;role name=&quot;filter&quot; class=&quot;org.apache.tools.ant.filters.ChainableReader&quot;/&gt;
    ...
    &lt;filter name=&quot;escapeunicode&quot; class=&quot;org.apache.tools.ant.filters.EscapeUnicode&quot;/&gt;
  &lt;/antlib&gt;
  </pre>
                                  <p>
  This is the layout of the antlib descriptor in the proposal. In each antlib jar file, the descriptor would be found under
  META-INF/antlib.xml
  </p>
                          <h3 class="section">
        <a name="concerns concerning the location of the descriptor (Costin Manolache)"></a>
        concerns concerning the location of the descriptor (Costin Manolache)
      </h3>
                          <ol>
          <li>
  startup time. In order to load one library you need to process all 
  of them. It can be resolved with caching the result and looking at .jar
  modifications. Most likely we'll have dozens of antlibs - and that'll only 
  grow in time. The processing of (all) TLDs at startup ( for tomcat ) adds a
  very visible overhead on startup, and at least tomcat is a long-running
  process.
  </li>
          <br />
          <li>
  Placing multiple antlibs in a single jar may be trickier.
  </li>
          <br />
          <li>
  It may place too much emphasis on the .jars and filesystem layout.
  </li>
          <br />
          <li>
  A bit harder to control ( as we know from c-logging and JAXP ), 
  </li>
          <br />
          <li>Explicit control over what antlibs are to be used - versus loading
  everything. Well - I like "magic" loading, but a lot of things in ant
  are done explicitely. 
  </li>
        </ol>
                                  <br />
                                  <p>
  I have no problem accepting a getResources() solution ( just like I'm 
  ok with using XML - but not any XML :-), but those issues should be
  considered.
  <br />
  A lot of the "mess" in ant is the result of doing some things without
  considering all implications or just as side effect of how code happened
  to work. That's why I'm so strongly for breaking things down to individual
  problems instead of a bundle solution. 
  </p>
                  
      </div>
    </div>
  
          <p class="copyright">
          Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
          <script type="text/javascript" language="JavaScript"><!--
                  document.write(" - "+"Last Published: " + document.lastModified);
                //  -->
          </script>
        </p>
      </body>
    </html>
  
  
  
  
  
  
  
  
  
  
  
  
  1.1                  ant/docs/projects/antlib/antlib_namespaces.html
  
  Index: antlib_namespaces.html
  ===================================================================
  
  
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html lang="en">
      <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
      <head>
        <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          <title>Apache Ant - Antlib Namespaces</title>
          <link type="text/css" href="../../page.css" rel="stylesheet">
            <meta name="author" content="Antoine Levy-Lambert">
    <meta name="email" content="antoine@apache.org">
        </head>
  
      <body>
        <p class="navpath">
          <script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
        </p>
  
        <div class="logobar">
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td>
              <td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td>
              <td align="right">
                <form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get">
                  <table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
                    <tr>
                      <td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td nowrap="nowrap" class="searchcaption">
                        <input name="q" type="hidden">
                        <input size="15" id="query" type="text">
                        <img height="1" width="5" alt="" src="../../images/spacer.gif">
                        <input name="Search" value="Search" type="submit">
                        <br>
                        the Apache Ant site
                      </td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td>
                    </tr>
                  </table>
                </form>
              </td>
            </tr>
          </table>
        </div>
  
                    <div class="tab">
                <table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                                    <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                                      <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                              </tr>
                </table>
              </div>
  
        <div class="bluebar"></div>
                                                        
    <div class="menucontainer">
      <div class="menu">
        <ul>
              </ul>
      </div>
      <img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif">
      <img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif">
    </div>  
        <div class="lightbluebar">&nbsp;</div>
    <div class="main">
    <div class="content">
      <h1 class="title">Antlib Namespaces</h1>
              <h3 class="section">
        <a name="J.Pietschmann 03.05.2003 17:25"></a>
        J.Pietschmann 03.05.2003 17:25
      </h3>
                          <p>
  Nicola Ken Barozzi wrote:
  &lt; This seems interesting, and brings up what XML namespaces can be used for.
  </p>
                                  <p>
  XML namespaces are indented to disambiguate short local element
  and attribute names. Any sematic associated to XML namespaces
  beside this has to be weighted carefully.
  </p>
                                  <p>
  
  Lets take an example. There are two projects, Foo and Bar,
  each providing a task, lets call them &lt;foo&gt; and &lt;bar&gt;
  respectively. Both tasks take a &lt;part&gt; child, by coincidence.
  Of course, because the projects act uncoordinated, the &lt;part&gt;
  child element has a different semantic. In order to make this
  clearer, let's say the Foo &lt;part&gt; takes an optional &lt;mumble&gt;
  child while the Bar &lt;part&gt; takes three mandatory &lt;xonx&gt;
  children.
  </p>
                                  <p>
  Someone finds both the &lt;foo&gt; and the &lt;bar&gt; task exciting and
  wants to use both in an Ant build file. No problem so far:
  because ot the way Ant elements get their child elements and
  create associated Java objects, this should work.
  Now said someone got a super-duper schema directed XML editor
  and wants to use it for editing the build.xml file. He asks
  all projects for a schema (DTD, XSD, RNG, whatever) for this
  purpose and merges them in order to get a schema for his build
  file. At this point the two &lt;part&gt; elements are likely to clash
  (at least for DTDs, where element names are global). While
  it is possible to merge the content models so that &lt;part&gt; now
  takes either an optional &lt;mumble&gt; or three &lt;xonx&gt; children, this
  would allow the user to put &lt;xonx&gt; children into the &lt;part&gt; of
  the &lt;foo&gt; task. This is only a minor inconvenience for most
  people, but an unthinkable horror for true purists.
  </p>
                                  <p>
  Introduce namespaces: the Foo projects names its namespace
  "http://www.fooproject.org/anttask" while the Bar project uses
  "URI:bar" or whatever. For the XML parser it is only really
  important that two different strings are used. You see, the
  longer the strings the less tha chance they will clash, and
  they probably won't clash if they start with the URLs of the
  project's homepages (the intent behind the recommendation to
  use URLs, because it's the closest thing to a global registry
  you can get short of actually creating a global registry).
  Anyway, because the expanded names of the &lt;part&gt; elements are
  now "{http://www.fooproject.org/anttask}part" and "{URI:bar}part"
  respectively they obviously no longer clash.
  BTW you can write this as
  </p>
                                  <pre class="code">
    &lt;target name=&quot;foo&quot;&gt;
      &lt;foo xmlns=&quot;http://www.fooproject.org/anttask&quot;&gt;
        &lt;part&gt;
          &lt;mumble&gt;
        &lt;/part&gt;
      &lt;/foo&gt;
      &lt;bar xmlns=&quot;URI:bar&quot;&gt;
        &lt;part&gt;&lt;xonx/&gt;&lt;xonx/&gt;&lt;xonx/&gt;&lt;/part&gt;
      &lt;/bar&gt;
    &lt;target&gt;
  </pre>
                                  <p>
  or as
  </p>
                                  <pre class="code">
    &lt;target name=&quot;foo&quot;
       xmlns:foo=&quot;http://www.fooproject.org/anttask&quot;
       xmlns:bar=&quot;URI:bar&quot;&gt;
      &lt;foo:foo&gt;
        &lt;foo:part&gt;
          &lt;foo:mumble&gt;
        &lt;/foo:part&gt;
      &lt;/foo:foo&gt;
      &lt;bar:bar&gt;
        &lt;bar:part&gt;&lt;bar:xonx/&gt;&lt;bar:xonx/&gt;&lt;bar:xonx/&gt;&lt;/bar:part&gt;
      &lt;/bar:bar&gt;
    &lt;target&gt;
  </pre>
                                  <p>
  take your pick (if you think the "foo" and "bar" prefixes are too
  long, use "a" and "b" instead, it doesn't matter).
  </p>
                                  <p>
  So far, the namespace names should only be different for different
  projects, so why is it dangerous to associate some semantic with it,
  like letting them point to a jar file? The problem is again that
  general purpose XML tools, like the above mentioned super-duper XML
  editor may associate their own semantics with the namespace, like
  how to auto-format certain elements. This information will be stored
  in some config files, and it requires that the namespace name is
  the same until the semantics of the elements in it have changed
  enough that it warrants assigning a new namespace name.
  </p>
                                  <p>
  
  Summary:
  </p>
                                  <ol>
  <li>
  XML namespaces are there to facilitate aggregation of XML adhering
    to schemas (content models) of different, uncoordinated origin.
  </li><li>
  XML Namespaces should be used in a way that no end user action
    can result in two namespace names becoming unintentionally the
    same.
  </li><li>
  XML Namespace names should preferably be assigned by the people
    or project which specifies the semantics of the XML elemnets and
    attributes therein.
  </li><li>
  XML Namespace names should be kept unchanged until a change of
    the semantic of the elements warrants a change.
  </li><li>
  Good tools should not monopolize XML namespace syntax for its
    own semantics.
  </li>
  </ol>
                                  <p>
  The schema directed editor should provide an example hoe tools
  can take advantage of XML namespaces: use them as a key into a
  DB/config to get it's own associated semantic.
  In particular for Ant/Antlib I can imagine that each library
  provides a factory object associated to the XML namespace for
  the library.
  </p>
                                  <p>
  The FOP parser uses such a two stage lookup: first the namespace
  is used to get a factory object from a hash table, then the factory
  is used with the local XML element name to create a Java object
  which is inserted into the FO tree. The hash table with the factories
  is initialized at startup, the associations between namespace name
  and factory class name is read from a Services file. Want to add
  a FOP extension? Get the default Services file, add a line with
  your namespace-to-factoryclassname mapping put it into the jar with
  all the classes and drop the jar as first into the classpath. If the
  user wants to use multiple extensions, well, edit the main Services
  instead, dead easy.
  </p>
                                  <p>
  HTH
  J.Pietschmann
  </p>
                  
      </div>
    </div>
  
          <p class="copyright">
          Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
          <script type="text/javascript" language="JavaScript"><!--
                  document.write(" - "+"Last Published: " + document.lastModified);
                //  -->
          </script>
        </p>
      </body>
    </html>
  
  
  
  
  
  
  
  
  
  
  
  
  1.1                  ant/docs/projects/antlib/antlib_roadmap.html
  
  Index: antlib_roadmap.html
  ===================================================================
  
  
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html lang="en">
      <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
      <head>
        <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          <title>Apache Ant - Antlib Roadmap</title>
          <link type="text/css" href="../../page.css" rel="stylesheet">
            <meta name="author" content="Antoine Levy-Lambert">
    <meta name="email" content="antoine@apache.org">
        </head>
  
      <body>
        <p class="navpath">
          <script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
        </p>
  
        <div class="logobar">
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td>
              <td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td>
              <td align="right">
                <form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get">
                  <table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
                    <tr>
                      <td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td nowrap="nowrap" class="searchcaption">
                        <input name="q" type="hidden">
                        <input size="15" id="query" type="text">
                        <img height="1" width="5" alt="" src="../../images/spacer.gif">
                        <input name="Search" value="Search" type="submit">
                        <br>
                        the Apache Ant site
                      </td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td>
                    </tr>
                  </table>
                </form>
              </td>
            </tr>
          </table>
        </div>
  
                    <div class="tab">
                <table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                                    <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                                      <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                              </tr>
                </table>
              </div>
  
        <div class="bluebar"></div>
                                                        
    <div class="menucontainer">
      <div class="menu">
        <ul>
              </ul>
      </div>
      <img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif">
      <img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif">
    </div>  
        <div class="lightbluebar">&nbsp;</div>
    <div class="main">
    <div class="content">
      <h1 class="title">Antlib Roadmap</h1>
              <h3 class="section">
        <a name="Antlib with tasks and types only"></a>
        Antlib with tasks and types only
      </h3>
                          <p>
  Let me quote here Stefan Bodewig - April 24th 2003.
  </p>
                                  <p>
  Let's make a version of antlib that knows about two predefined roles,
  task and data-type.  I think this is already feature complete in the
  proposal (which does even more).
  </p>
                                  <p>
  Let's move this code with the restriction to tasks and types into the
  main branch ASAP.  Let's sort out the classloading requirements as
  well as the interplay of antlib with taskdef and typedef here.
  </p>
                                  <p>
  After this flies, I'd expect us to get roles sorted out.  If we feel
  like removing the difference between tasks and types, we can do so
  then as well.
  </p>
                          <h3 class="section">
        <a name="Roles and components in build files"></a>
        Roles and components in build files
      </h3>
                          <p>
  A second step : make a detailed proposal concerning roles and  implement roles and components in ant core. 
  </p>
                          <h3 class="section">
        <a name="Roles and components in antlibs"></a>
        Roles and components in antlibs
      </h3>
                          <p>
    Once roles and components are properly defined and implemented in ant core, we would revisit &lt;antlib&gt; and implement roles and components there.
    </p>
                          <h3 class="section">
        <a name="Namespaces"></a>
        Namespaces
      </h3>
                          <p>
    After we have antlibs, roles, and components, we should specify how we are going to proceed concerning namespaces and prefixes.
    </p>
                  
      </div>
    </div>
  
          <p class="copyright">
          Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
          <script type="text/javascript" language="JavaScript"><!--
                  document.write(" - "+"Last Published: " + document.lastModified);
                //  -->
          </script>
        </p>
      </body>
    </html>
  
  
  
  
  
  
  
  
  
  
  
  
  1.1                  ant/docs/projects/antlib/index.html
  
  Index: index.html
  ===================================================================
  
  
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html lang="en">
      <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
      <head>
        <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          <title>Apache Ant - Antlib</title>
          <link type="text/css" href="../../page.css" rel="stylesheet">
            <meta name="author" content="Jose Alberto Fernandez">
    <meta name="email" content="jalberto@cellectivity.com">
          <meta name="author" content="Antoine Levy-Lambert">
    <meta name="email" content="antoine@apache.org">
        </head>
  
      <body>
        <p class="navpath">
          <script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
        </p>
  
        <div class="logobar">
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td>
              <td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td>
              <td align="right">
                <form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get">
                  <table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
                    <tr>
                      <td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td nowrap="nowrap" class="searchcaption">
                        <input name="q" type="hidden">
                        <input size="15" id="query" type="text">
                        <img height="1" width="5" alt="" src="../../images/spacer.gif">
                        <input name="Search" value="Search" type="submit">
                        <br>
                        the Apache Ant site
                      </td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td>
                    </tr>
                  </table>
                </form>
              </td>
            </tr>
          </table>
        </div>
  
                    <div class="tab">
                <table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                                    <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                                      <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                              </tr>
                </table>
              </div>
  
        <div class="bluebar"></div>
                                                        
    <div class="menucontainer">
      <div class="menu">
        <ul>
              </ul>
      </div>
      <img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif">
      <img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif">
    </div>  
        <div class="lightbluebar">&nbsp;</div>
    <div class="main">
    <div class="content">
      <h1 class="title">Antlib</h1>
              <h3 class="section">
        <a name="Introduction"></a>
        Introduction
      </h3>
                          <p>The purpose of this document is to summarize the discussions taking 
      place concerning antlib. I will try to always give proper credit, and to represent
      honestly different views expressed on the ant development mailing list.
      Send comments/criticisms if you are not happy with these documents.
      </p>
                          <h3 class="section">
        <a name="Overview"></a>
        Overview
      </h3>
                          <p>
      Jose Alberto Fernandez 03.04.2003 18:25
      </p>
                                  <p>
  There are the following features in the antlib proposal:
      <ol>
      <li>
      antlib &amp; antjar
      </li>
      <li>
      type definitions that allow to define new implementations of mappers, selectors, paths, conditions, etc. That you can define in your antlib and a way to link this with the introspectors (I am not sure how complete this is).
      </li>
      <li>
      A scoping framework for the symbol tables needed to manage the antlib definitions (I think ANT has something on this regard)
      </li>
      <li>
      A framework for managing classloaders where you can specify which classloader to use when loading an antlib.
      </li>
      </ol>
      </p>
                          <h3 class="section">
        <a name="Specific themes"></a>
        Specific themes
      </h3>
                          <ol>
       <li>
      <a href="antlib_contract.html"> Antlib contract</a>
       </li>
       <li>
  <a href="antlib_descriptors.html"> Antlib descriptors</a>
       </li>
       <li>
  <a href="antlib_classloaders.html">Classloaders</a>
       </li>
       <li>
  <a href="roles.html">Roles, polymorphism, introspection</a>
       </li>
       <li>
  <a href="antlib_namespaces.html">XML namespaces</a>
       </li>
       <li>
  <a href="antlib_roadmap.html">Roadmap</a>
       </li>
      </ol>
                  
      </div>
    </div>
  
          <p class="copyright">
          Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
          <script type="text/javascript" language="JavaScript"><!--
                  document.write(" - "+"Last Published: " + document.lastModified);
                //  -->
          </script>
        </p>
      </body>
    </html>
  
  
  
  
  
  
  
  
  
  
  
  
  1.1                  ant/docs/projects/antlib/roles.html
  
  Index: roles.html
  ===================================================================
  
  
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html lang="en">
      <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
      <head>
        <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          <title>Apache Ant - Roles</title>
          <link type="text/css" href="../../page.css" rel="stylesheet">
            <meta name="author" content="Antoine Levy-Lambert">
    <meta name="email" content="antoine@apache.org">
        </head>
  
      <body>
        <p class="navpath">
          <script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
        </p>
  
        <div class="logobar">
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td>
              <td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td>
              <td align="right">
                <form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get">
                  <table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
                    <tr>
                      <td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td nowrap="nowrap" class="searchcaption">
                        <input name="q" type="hidden">
                        <input size="15" id="query" type="text">
                        <img height="1" width="5" alt="" src="../../images/spacer.gif">
                        <input name="Search" value="Search" type="submit">
                        <br>
                        the Apache Ant site
                      </td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                    </tr>
                    <tr>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td>
                      <td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
                      <td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td>
                    </tr>
                  </table>
                </form>
              </td>
            </tr>
          </table>
        </div>
  
                    <div class="tab">
                <table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                                    <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                                      <td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
                        <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
                          <tr>
                            <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
                          </tr>
                        </table>
                      </td>
                              </tr>
                </table>
              </div>
  
        <div class="bluebar"></div>
                                                        
    <div class="menucontainer">
      <div class="menu">
        <ul>
              </ul>
      </div>
      <img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif">
      <img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif">
    </div>  
        <div class="lightbluebar">&nbsp;</div>
    <div class="main">
    <div class="content">
      <h1 class="title">Roles</h1>
              <h3 class="section">
        <a name="What is a role"></a>
        What is a role
      </h3>
                          <p>
  I am quoting here Jose Alberto Fernandez 26.04.2003 22:05:
  Roles allow defining families of objects (members of a role) that can be
  used by tasks or inner elements developed separately. 
  The developer of the object accepting a particular role as a subelement
  has no knowledge of the implementation of the object but much more
  importantly it has no knowledge of the XML element tag used to refer
  to this subelement in the XML file.
  </p>
                                  <p>
  
  In the antlib proposal, there are two preset roles :
  <ul>
  					<li>task</li>
  					<li>datatype</li>
  				</ul>
  Examples of other roles are :
  <ul>
  					<li>mapper</li>
  					<li>filter</li>
  				</ul>
  			</p>
                                  <p>
  What does it all mean? It means we can now write a task, well typed, which 
  can be accept different XML subelements depending on the declarations of 
  other objects present on the build. The vendor specific elements of
  &lt;ejbjar&gt;, &lt;jspc&gt; and others are typical examples of where this capability
  can be very useful. Other parts of core could benefit of course.
  </p>
                                  <br />
                                        <h4 class="subsection">
          <a name="What do they do that is no possible in ANT"></a>
          What do they do that is no possible in ANT
        </h4>
                          <p>
  They allow IntrospectionHelper to connect an XML subelement eventhough
  introspection cannot find a create or add/Configured method for it.
  It is a well typed methanism, the parent object will only be passed objects
  that it knows how to deal with. And the parent object does not need to have 
  any knowledge of what currently available members are on the role.
  </p>
                                        <h3 class="section">
        <a name="roles versus DynamicConfigurator"></a>
        roles versus DynamicConfigurator
      </h3>
                          <p>
  The closest thing in ANT today is DynamicConfigurator but its purpose
  is on the other way around. Given an elementTag with no matching method
  it is up to the parent object to try to make sense of it.
  If we were to use this mechanism to accomplish what roles try to do, 
  it would require the parent object implementor to be aware of where
  to find the correct definition (remember it is a 3rd party implementation)
  and perform the creation. It will be also its responsibility to
  resolve type conflicts, name collisions, etc. This are all things
  that should be done by IntrospectionHelper directly.
  </p>
                                  <p>
  
  Also notice that Roles do not supersede DynamicConfigurator. On one hand roles
  let external implementations to be considered as possible subelements
  of a parent object, on the other hand, DynamicConfigurator allows a node
  to decide given its current state what is the meaning of a particular element.
  This cannot be done by roles in the general case, and that is good.
  </p>
                          <h3 class="section">
        <a name="Implementation of roles in the proposal"></a>
        Implementation of roles in the proposal
      </h3>
                          <p>this section quotes Jose Alberto Fernandez</p>
                                  <p>
  Here I may deviate from the exact code and add thoughts about where
  do I think it should go. 
  </p>
                                        <h4 class="subsection">
          <a name="Usage of Roles"></a>
          Usage of Roles
        </h4>
                          <p>
  The principle is very simple:
  </p>
                                  <br />
                                  <ol>
  							<li>
  A role is defined by an interface. This interface is the parameter
     for a new special family of addConfigured(&lt;interface&gt;) methods.
  </li>
  							<li>
  								<p>
  When IntrospectionHelper fails to find a create/add method for the 
     element, it will look at all the roles used in the addConfigured 
     methods and on each of those roles will try to find an object declared 
     with that element-tag name. If one and only one match is found then
     the instantiation is successful and the new object will be configured;
     otherwise it is an error and parsing stops.
  </p>
  								<br />
  							</li>
  							<li>
  								<p>
   The configured object may or may not implement the Role interface,
     if it does not, an Adaptor object may be instantiated as a proxy 
     for the object. Which adaptor is used depends on how the implementation
     was declared.
  </p>
  								<br />
  							</li>
  							<li>
  								<p>
  The resulting object is passed as an argument to the addConfigured() method.
  </p>
  								<br />
  							</li>
  						</ol>
                                                      <h4 class="subsection">
          <a name="Declaration of roles"></a>
          Declaration of roles
        </h4>
                          <p>
  A role definition associates a name with an (Interface,Adaptor) pair.
  The only reason for associating a name with the role is to ease notation when
  declaring members of a role.
  </p>
                                  <br />
                                  <p>
  Notice that the same interface or the same Adaptor may appear in multiple
  declarations. This only means that depending on the name used the adaptor
  of choice will be different.
  </p>
                                  <br />
                                  <p>
  There can only be one pair associated with each name.
  </p>
                                  <br />
                                                      <h4 class="subsection">
          <a name="Declaration of implementations (members)"></a>
          Declaration of implementations (members)
        </h4>
                          <br />
                                  <p>
  A class is declared as belonging to a role by specifying the name to be used
  when appearing in that role. The same class may belong to multiple roles
  and may specify the same or different names on each one.
  <br />
  						</p>
                                  <p>
  The name used for the role during the declaration only determines which
  Adaptor will be available, if required. 
  <br />
  						</p>
                                  <p>
  
  Within a role-interface there can only be one object associated
  with each name.
  <br />
  						</p>
                                                      <h4 class="subsection">
          <a name="Scoping rules"></a>
          Scoping rules
        </h4>
                          <br />
                                  <p>
  This is probably the more dificult aspect since given the way
  &lt;ant&gt; and &lt;antcall&gt; work it means possible redeclarations on every
  level of recursion. Whether declarations should just supercede
  one another or be smarter is something to look into.
  <br />
  						</p>
                                                      <h4 class="subsection">
          <a name="Syntax"></a>
          Syntax
        </h4>
                          <br />
                                  <p>
  I have left out the issues of how the syntax looks like on purpose.
  <br />
  						</p>
                                  <p>
  Syntax is just that and I am sure we can reach agreement somehow.
  It is also clear that we should provide tasks to define roles
  and declare members of roles direclty on the build.
  <br />
  						</p>
                                        <h3 class="section">
        <a name="Making ant aware of tag/role/class associations"></a>
        Making ant aware of tag/role/class associations
      </h3>
                          <p>
  The antlib proposal says :
  Let's declare explicitly that a tag can be used in a particular role and is implemented by a specific class.
  The declaration happens inside antlibs in the file META-INF/antlib.xml
  </p>
                                  <pre class="code">
    &lt;filter name=&quot;escapeunicode&quot; class=&quot;org.apache.tools.ant.filters.EscapeUnicode&quot;/&gt;
  </pre>
                                  <p>
  CM says :
  A normal typedef is enough to make ant aware of the existence of the class org.apache.tools.ant.filters.EscapeUnicode.
  Due to the fact that EscapeUnicode implements ChainableReader, the association between EscapeUnicode and the filter role does not need to be stated explicitly.
  </p>
                          <h3 class="section">
        <a name="Method names in parent classes supporting roles"></a>
        Method names in parent classes supporting roles
      </h3>
                          <p>
  There is a discussion about how methods to add nested elements of a specific roles in a parent class should be called, and what their signature should be like.
  </p>
                                  <p>
  CM :
  <source>
  addTYPE(TYPE) 
  </source>
  for instance <source>addChainableReader(ChainableReader a)</source>
  			</p>
                                  <p>
  PR:
  to add an element before its own attributes and nested elements are configured.
  <source>
  void add(TYPE)
  </source>
  to add an already configured element
  <source>
  void addConfigured(TYPE)
  </source>
  			</p>
                                  <p>
  in the ant code of 1.6 :
  <source>public Object createDynamicElement(String name)</source>
  			</p>
                          <h3 class="section">
        <a name="Cardinality problems"></a>
        Cardinality problems
      </h3>
                                <h4 class="subsection">
          <a name="One tag, several implementations"></a>
          One tag, several implementations
        </h4>
                          <p>
  The &lt;weblogic&gt; element in &lt;ejbjar&gt;, &lt;jspc&gt;, &lt;serverdeploy&gt;, has different meanings.
  </p>
                                  <p>
  This is an argument to introduce roles in ant, and to associate an XML tag with a role and an implementation class.
  </p>
                                                      <h4 class="subsection">
          <a name="Parent classes accepting one interface in different functions"></a>
          Parent classes accepting one interface in different functions
        </h4>
                          <p>
  As an example, the dependset task accepts nested filesets for two different functions :
  <ul>
  						<li>source</li>
  						<li>target</li>
  					</ul>
  				</p>
                                  <p>Stefan Bodewig/Costin Manolache suggest :</p>
                                  <pre class="code">
   &lt;dependset&gt;
     &lt;zipfileset ant:type=&quot;srcfileset&quot;&gt;
   &lt;/dependset&gt;
  </pre>
                                                      <h4 class="subsection">
          <a name="adapters"></a>
          adapters
        </h4>
                          <p>
  The antlib proposal mentions adapter classes, which would be connected to roles.
  Costin Manolache says that adapter classes should be tied to components, not roles.
  The reason : two different components implementing the same interface (AKA role) can require different adapters.
  </p>
                                        <h3 class="section">
        <a name="role proposal"></a>
        role proposal
      </h3>
                          <p>
  slightly modified version of something writte by Jose Alberto Fernandez
  </p>
                                  <pre class="code">
  &lt;role name=&quot;roleName&quot; className=&quot;....&quot; [adapter=&quot;....&quot;] /&gt;
  &lt;!-- I have added the possibility to declare a specific adapter per component to take into account what Costin said --&gt;
  &lt;component name=&quot;elementName&quot; role=&quot;roleName&quot; className=&quot;.....&quot;  [adapter=&quot;....&quot;] /&gt;
  
  </pre>
                  
      </div>
    </div>
  
          <p class="copyright">
          Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
          <script type="text/javascript" language="JavaScript"><!--
                  document.write(" - "+"Last Published: " + document.lastModified);
                //  -->
          </script>
        </p>
      </body>
    </html>