diff --git a/proposal/myrmidon/docs/classloader.html b/proposal/myrmidon/docs/classloader.html index 1ac32dba9..3b7bbb43b 100644 --- a/proposal/myrmidon/docs/classloader.html +++ b/proposal/myrmidon/docs/classloader.html @@ -77,22 +77,22 @@
-In many ways Ant2 needs to follow rules similar to a number of -different application servers with respect to ClassLoader management. -Ant2 will create a number of different ClassLoaders that have access -to different sets of resources (and thus Classes). The main reason -for this arrangment is to partition different sections of the -application such as the Container, the Task API, task/type libraries -and support libraries.
+In many ways Ant2 needs to follow rules similar to a number of + different application servers with respect to ClassLoader management. + Ant2 will create a number of different ClassLoaders that have access + to different sets of resources (and thus Classes). The main reason + for this arrangment is to partition different sections of the + application such as the Container, the Task API, task/type libraries + and support libraries.
The recomended structure for ClassLoader relationships is a hierarchy. -When a ClassLoader is asked for a resource (or a class) it first delegates -to it's parent to ask for the resource. If the resource is not present in -its parent ClassLoader then the ClassLoader attempts to locate the resource -in it's own store. In practice this means that all the classes (and static -variables defined by said classes) in a parent ClassLoader are shared with -the child ClassLoaders.
-Using kooky ascii art, the specific ClassLoader structure for Ant2 is as -follows:
+ When a ClassLoader is asked for a resource (or a class) it first delegates + to it's parent to ask for the resource. If the resource is not present in + its parent ClassLoader then the ClassLoader attempts to locate the resource + in it's own store. In practice this means that all the classes (and static + variables defined by said classes) in a parent ClassLoader are shared with + the child ClassLoaders. +Using kooky ascii art, the specific ClassLoader structure for Ant2 is as + follows:
@@ -103,16 +103,16 @@ follows: + Bootstrap + | + System + | + Common + / \ + Container Shared + / \ + Antlib1 Antlib2 ... + - Bootstrap - | - System - | - Common - / \ - Container Shared - / \ - Antlib1 Antlib2 ... -@@ -123,70 +123,93 @@ follows: -
+- - The Bootstrap ClassLoader contains the classes and resources - provided by the Java runtime. -
-- - The System ClassLoader contains the classes that were made accessible - via the CLASSPATH environment variable. If the standard ant script was used then this - should only contain the classes that are used to bootstrap the ant runtime. ie -
-$ANT_HOME/bin/ant-launcher.jar
-- - The Common ClassLoader contains the classes and resources - that are made visible to both the Container and to all the ant type librarys. This - contains all the classes that the Container uses to communicate with tasks and other - supporting infrastructure. In particular it contains the following APIs; -
--
-- - Task API - Contains the classes that are part of the API used - to define tasks. -
-- - ProjectListener API - Contains the classes necessary to define new - ProjectListeners. -
-- - Aspect API - Contains the classes that are used to define Aspects - of the container. -
-- - Container API - Contains the interfaces that are required to communicate - with the objects deep within the container. NOTE: These interfaces - are not to be used by user tasks but are made available so that certain tasks (such - as <antcall/>) can be implemented. However they are subject to change without - notice between between different ant2 versions. -
-- These classes are loaded from all the jars present in the
-$ANT_HOME/lib
- directory. -- - The Container ClassLoader contains all the classes and resources - that are part of the actual implementation of the Container. These classes are not - directly accessible to any Ant library or task. Some of the classes are indirectly - accessible to tasks and other elements defined in the ant librarys as they implement - interfaces defined in the Common ClassLoader. The classes that are - stored in jars in the
-$ANT_HOME/bin/lib/
directory. -- - The Shared ClassLoader contains all the classes and resources - that are shared across all of the ant librarys (unless they are als needed by the - container in which case they should be placed int the Container - ClassLoader). This ClassLoader is populated by all the jars that are contained in - the
-$ANT_HOME/shared/
directory. -- - The AntLib ClassLoaders each contain the classes and resources - that required by that particular library. Note that in some cases a single Ant - Library will manifest as a single ClassLoader containing a single jar. However - in some cases it is possible for one Ant Library to have multiple jars in its - ClassLoader or even have multiple ClassLoaders. See XXXX for further details. -
-+ The + Bootstrap ClassLoader contains the classes and resources + provided by the Java runtime. + + ++ The + System ClassLoader contains the classes that were made accessible + via the CLASSPATH environment variable. If the standard ant script was used then this + should only contain the classes that are used to bootstrap the ant runtime. ie + + +$ANT_HOME/bin/ant-launcher.jar
++ The + Common ClassLoader contains the classes and resources + that are made visible to both the Container and to all the ant type librarys. This + contains all the classes that the Container uses to communicate with tasks and other + supporting infrastructure. In particular it contains the following APIs; + + ++
+- + Task API - Contains the classes that are part of the API used + to define tasks. + +
+- + ProjectListener API - Contains the classes necessary to define new + ProjectListeners. + +
+- + Aspect API - Contains the classes that are used to define Aspects + of the container. + +
+- + Container API - Contains the interfaces that are required to communicate + with the objects deep within the container. + NOTE: These interfaces + are not to be used by user tasks but are made available so that certain tasks (such + as <antcall/>) can be implemented. However they are subject to change without + notice between between different ant2 versions. + +
++ These classes are loaded from all the jars present in the +
+$ANT_HOME/lib
+ directory. + ++ The + Container ClassLoader contains all the classes and resources + that are part of the actual implementation of the Container. These classes are not + directly accessible to any Ant library or task. Some of the classes are indirectly + accessible to tasks and other elements defined in the ant librarys as they implement + interfaces defined in the + Common ClassLoader. The classes that are + stored in jars in the + +$ANT_HOME/bin/lib/
directory. + ++ The + Shared ClassLoader contains all the classes and resources + that are shared across all of the ant librarys (unless they are als needed by the + container in which case they should be placed int the + Container + ClassLoader). This ClassLoader is populated by all the jars that are contained in + the + +$ANT_HOME/shared/
directory. + ++ The + AntLib ClassLoaders each contain the classes and resources + that required by that particular library. Note that in some cases a single Ant + Library will manifest as a single ClassLoader containing a single jar. However + in some cases it is possible for one Ant Library to have multiple jars in its + ClassLoader or even have multiple ClassLoaders. See XXXX for further details. + + +
Long ago there was identified the need for librarys that contain -tasks and other elements present in the build file. This document -attempts to describe the mechanism via which these libraries will be -defined and used in Ant2. The librarys (also referred to as -deployments) will be termed antlibs.
+ tasks and other elements present in the build file. This document + attempts to describe the mechanism via which these libraries will be + defined and used in Ant2. The librarys (also referred to as + deployments) will be termed antlibs.Ant librarys can be packaged and signed into a ANt Type Library -format (.atl) using the standard Java Archive tools. (For details on -the .jar file format see the - -Jar Specification.
+ format (.atl) using the standard Java Archive tools. (For details on + the .jar file format see the + + + Jar Specification. +When packaged into such a form the META-INF/ directory contains -ant specific descriptors in addition to the standard Jar manifest -and other descriptor files. The archive will also contain the -
+ ant specific descriptors in addition to the standard Jar manifest + and other descriptor files. The archive will also contain the + +.class
files for all the tasks and other types the -library defines. It may also contain additional resources that can -be referenced in the build file (an example being DTDs)..class
files for all the tasks and other types the + library defines. It may also contain additional resources that can + be referenced in the build file (an example being DTDs). +The library may also need access to other librarys or resources -to perform its job. For instance, if the task loaded an XML document -and then processed said document using the Trax API then -the Ant library needs to have access to the Trax API and an -implementation of the API. The Antlib mechanism thus uses the standard -"Optional Package" Specification to declare dependencies on other -libraries.
+ to perform its job. For instance, if the task loaded an XML document + and then processed said document using the + Trax API then + the Ant library needs to have access to the + Trax API and an + implementation of the API. The Antlib mechanism thus uses the standard + "Optional Package" Specification to declare dependencies on other + libraries. +The libraries will usually be installed in standard locations that -make it possible for the Ant container to automatically locate and scan -the libraries. It will also be possible for the users to specify -additional search locations or even the specific location of ant -libraries.
+ make it possible for the Ant container to automatically locate and scan + the libraries. It will also be possible for the users to specify + additional search locations or even the specific location of ant + libraries.The following sections will describe each of these different facets -in greater detail.
+ in greater detail.@@ -143,24 +154,30 @@ would be stored in
@@ -128,9 +135,13 @@ in greater detail. The class and resources files should be stored as in standard jars. The -root directory being the base via which code and resources are loaded. So -the
+ root directory being the base via which code and resources are loaded. So + the +.class
file for the Java classcom.biz.tasks.Mytask
-would be stored in/com/biz/tasks/Mytask.class
.class
file for the Java class +com.biz.tasks.Mytask
+ would be stored in +/com/biz/tasks/Mytask.class
+/com/biz/tasks/Mytask.class
@@ -287,22 +304,24 @@ need to be loaded by the container. It is often the case that a library will need external resources. The -example given above described dependence on an external XML library. The -ant library thus needs a mechanism via which to declare dependencies on -external libraries.
+ example given above described dependence on an external XML library. The + ant library thus needs a mechanism via which to declare dependencies on + external libraries.Ant2 uses the "Optional Package" mechanism. Prior to JDK1.3, an "Optional -Package" was known as an Extension. The specification for this -mechanism is available in the JDK1.3 documentation in the directory -
+ Package" was known as an + Extension. The specification for this + mechanism is available in the JDK1.3 documentation in the directory + +$JDK_HOME/docs/guide/extensions/versioning.html
. Alternatively -it is available online at - -http://java.sun.com/j2se/1.3/docs/guide/extensions/versioning.html.$JDK_HOME/docs/guide/extensions/versioning.html
. Alternatively + it is available online at + + + http://java.sun.com/j2se/1.3/docs/guide/extensions/versioning.html. +This mechanism was adopted as it is an established standard. The standard -is also begining to be adopted by other specifications such as the Servlet -2.3 API. Thus we are likely to see an increase of jars using this mechanism -to specify dependencies.
+ is also begining to be adopted by other specifications such as the + Servlet + 2.3 API. Thus we are likely to see an increase of jars using this mechanism + to specify dependencies. +The "Optional Package" mechanism allows jars to specify dependencies on other -jars that implement a particular specification at particular version levels. For -example you could specify a dependency on the Trax 1.1 API by adding the following -to the manifest of your jar.
+ jars that implement a particular specification at particular version levels. For + example you could specify a dependency on the Trax 1.1 API by adding the following + to the manifest of your jar.
@@ -171,10 +188,10 @@ to the manifest of your jar. + Extension-List: trax + trax-Extension-Name: Java API for XML Parsing + trax-Specification-Version: 1.1 + -Extension-List: trax -trax-Extension-Name: Java API for XML Parsing -trax-Specification-Version: 1.1 -@@ -185,8 +202,8 @@ trax-Specification-Version: 1.1 In some cases you may also wish to specify a dependency on a specific vendors -implementation. For instance you may need to use xalan due to it implementing a -particular extension you need. In that case you manifest may contain;
+ implementation. For instance you may need to use xalan due to it implementing a + particular extension you need. In that case you manifest may contain;
@@ -197,13 +214,13 @@ particular extension you need. In that case you manifest may contain; + Extension-List: trax + trax-Extension-Name: Java API for XML Parsing + trax-Specification-Version: 1.1 + trax-Implementation-Title: org.apache.xalan.xslt + trax-Implementation-Version: 2.1.0 + trax-Implementation-Vendor: Apache Software Foundation + -Extension-List: trax -trax-Extension-Name: Java API for XML Parsing -trax-Specification-Version: 1.1 -trax-Implementation-Title: org.apache.xalan.xslt -trax-Implementation-Version: 2.1.0 -trax-Implementation-Vendor: Apache Software Foundation -@@ -214,10 +231,10 @@ trax-Implementation-Vendor: Apache Software Foundation In many cases there will be no distinction between the specification and -the implementation of a library. For instance the Velocity project only has -one implementation and one specification. In which case it is sufficient to -just declare a dependency on the Velocity "Specification". A library that uses -both the Trax API and the Velocity project may look like;
+ the implementation of a library. For instance the Velocity project only has + one implementation and one specification. In which case it is sufficient to + just declare a dependency on the Velocity "Specification". A library that uses + both the Trax API and the Velocity project may look like;
@@ -228,15 +245,15 @@ both the Trax API and the Velocity project may look like; + Extension-List: trax velocity + velocity-Extension-Name: org.apache.velocity + velocity-Specification-Version: 1.0 + trax-Extension-Name: Java API for XML Parsing + trax-Specification-Version: 1.1 + trax-Implementation-Title: org.apache.xalan.xslt + trax-Implementation-Version: 2.1.0 + trax-Implementation-Vendor: Apache Software Foundation + -Extension-List: trax velocity -velocity-Extension-Name: org.apache.velocity -velocity-Specification-Version: 1.0 -trax-Extension-Name: Java API for XML Parsing -trax-Specification-Version: 1.1 -trax-Implementation-Title: org.apache.xalan.xslt -trax-Implementation-Version: 2.1.0 -trax-Implementation-Vendor: Apache Software Foundation -@@ -247,8 +264,8 @@ trax-Implementation-Vendor: Apache Software Foundation To make other jars available to Ant librarys as "Optional Packages" -or Extensions then you need to add a few lines to the manifest of the -other jar. The minimal manifest is the following;
+ or Extensions then you need to add a few lines to the manifest of the + other jar. The minimal manifest is the following;
@@ -259,10 +276,10 @@ other jar. The minimal manifest is the following; + Extension-Name: org.realityforge.dve + Specification-Vendor: Peter Donald + Specification-Version: 1.0 + -Extension-Name: org.realityforge.dve -Specification-Vendor: Peter Donald -Specification-Version: 1.0 -@@ -273,8 +290,8 @@ Specification-Version: 1.0 It is important to note that looking for dependencies is recursive. For example, -if the ant library depends upon jar A and and A depends on B then both A and B will -need to be loaded by the container.
+ if the ant library depends upon jar A and and A depends on B then both A and B will + need to be loaded by the container.diff --git a/proposal/myrmidon/docs/todo.html b/proposal/myrmidon/docs/todo.html index 595e81681..b82089a65 100644 --- a/proposal/myrmidon/docs/todo.html +++ b/proposal/myrmidon/docs/todo.html @@ -201,28 +201,23 @@ public class MyrmidonSecurityManager So far there has been no mention of implementation strategies for -managing ClassLoaders and other details about where the "Optional Packages" -are stored. This section will outline such details but they could change -in the future. The above specification will still be accurate but the approach -to implementing specification will be different.
+ managing ClassLoaders and other details about where the "Optional Packages" + are stored. This section will outline such details but they could change + in the future. The above specification will still be accurate but the approach + to implementing specification will be different.In the current architecture all of the "Optional Packages" are assumed to -be stored in the
+ be stored in the +$ANT_HOME/ext
directory. The runtime will scan -this directory for jars and add all the "optional Packages" found into a -registry. This registry will be used by the library loading mechanism to locate -all the "Optional Packages". The user is able to specify an alternative directory -or add a new directory to search on the commandline.$ANT_HOME/ext
directory. The runtime will scan + this directory for jars and add all the "optional Packages" found into a + registry. This registry will be used by the library loading mechanism to locate + all the "Optional Packages". The user is able to specify an alternative directory + or add a new directory to search on the commandline. +When the container attempts to load an ant library it will also try to load -any needed dependencies. First it will check the parent ClassLoaders to see if any -of them contain the required dependencies. If not then it will search the -"Optional Packages" registry. If the dependency is not found then a error will be -signaled. If the dependency is found in the "Optional Packages" registry then it is -loaded by the same ClassLoader that is used to load the Ant library.
+ any needed dependencies. First it will check the parent ClassLoaders to see if any + of them contain the required dependencies. If not then it will search the + "Optional Packages" registry. If the dependency is not found then a error will be + signaled. If the dependency is found in the "Optional Packages" registry then it is + loaded by the same ClassLoader that is used to load the Ant library.The Ant1 Compatibility layer is still in early stages of development.
-
- Get a version of
+<ant>
and -<antcall>
working.- Get a version of
<antcall>
working.- Provide hooks between Ant1 references and Myrmidon properties. May use converters for adapting Ant2 objects (like Ant2
-<path>
or<fileset>
) as Ant1 types.- Handle differences between Ant1 if/unless on targets, - and Myrmidon <if> task.
- - Write tests for the various bits that rely on Myrmidon - functionality: + Missing tests:
-
- Simple sanity test
-- if/unless on targets: check that behaviour complies with Ant1
- Make sure properties are shared between Ant1 and Myrmidon tasks.
-- Make sure that <ant1.property> behaves as per Ant1
- Get GUMP runs going using Myrmidon.
-- i18n messages
+- Add protected accessors for get/set/list properties in + Ant1 Project, to minimise the amount of code duplication in + Ant1CompatProject.
The Ant1 Compatibility layer is still in early stages of development.
<ant>
and
- <antcall>
working.<antcall>
working.<path>
or <fileset>
)
as Ant1 types.