On 9/27/01 12:22 PM, "Sam Ruby" <[EMAIL PROTECTED]> wrote:
> I was wrong. Here's the answer from Conor. Seems like the he's advocating > the removal of a few lines of code in Velocity. That makes sense to me... > > - Sam Ruby > > ---------------------- Forwarded by Sam Ruby/Raleigh/IBM on 09/27/2001 > 12:21 PM --------------------------- > > "Conor MacNeill" <[EMAIL PROTECTED]> on 09/20/2001 07:42:11 PM > > Please respond to [EMAIL PROTECTED] > > To: <[EMAIL PROTECTED]> > cc: > Subject: RE: Reverse class loading undocumented, required and deprecated? > > > > Sam, > > In Ant 1.4, I changed the taskdef classloading so that it delegates to the > parent classloader. This is the proper behaviour. I did put a warning into > WHATSNEW about this. If you recall, the old behaviour is the source of > Linkage errors in xml-fop. This behaviour is not always desirable, however, > since factory objects that exist in the system classpath are unable to load > classes in the classpath given to the task classloader. That is what is > happening below. The SAX factory use by Ant's core cannot see the Xerces > parser. > > I asked Geir to change Velocity so that it did not ask for a specific > parser. This would have made this problem go away and Anakia would have > used > Ant's XML parser rather than xerces. That did not happen. No, because the problem went away, so I figured you 'fixed' ant :) I tried to play with that suggestion, letting JDOM find it's own parser (that's where the problem is - not in Velocity, but where Anakia gets a builder from JDOM), but that didn't fly. I moved one as it wasn't a pressing issue. > > There was another problem with Anakia, however, related to the Velocity > singleton. Basically you can't have two instances of this task when the > velocity classes exist in the system classpath as the singleton gets > created > once with the template path and the second instance cannot reset the > template path. IMHO, singletons are evil :-) I agree - singletons are evil - however, they do exist and I think Ant should support them. However, I am just one ant user among millions... Anakia doesn't use the velocity singleton - it creates its own separate instance, BTW. Texen, on the other hand, still is Singleton based. We should fix that sometime. I took a look when I did the change to let velocity have separate Runtimes, but it didn't seem obvious, and I really don't know Texen or how people use it. > So, since it did not appear that Anakia/velocity were going to change, I > relunctantly added a mechanism to access the Ant 1.3 behaviour, so that > these tasks would continue to function, albeit with some effort. I didn't > really want this attribute to become popular. That is also why it is > deprecated. Nevertheless, until Anakia/Velocity are changed, it will be > required to use these tasks. I am surprised that this hasn't come up more often. > In truth, classloading has been gradually grafted onto Ant and it shows up > in overlapping classpaths between the Ant core and its tasks. It needs to > be > changed but will most easily be achieved in Ant2. We need to clearly define > the classloader hierarchy as has been done in servlet containers. > > Conor Thx geir > >> -----Original Message----- >> From: Sam Ruby [mailto:[EMAIL PROTECTED]] >> Sent: Friday, 21 September 2001 2:23 AM >> To: [EMAIL PROTECTED] >> Subject: Reverse class loading undocumented, required and deprecated? >> >> >> I'm describing the scenario below using the released version of 1.4. It >> applies equally to the latest CVS. It also represents a change >> in behavior >> from Ant 1.3. >> >> Test case: >> >> Download ant 1.4 distribution. Unpack. Set path and ANT_HOME. >> >> Checkout jakarta-site2. Cd into the directory. >> >> Execute "ant" with no arguments. >> >> Results: >> >> Buildfile: build.xml >> >> prepare: >> >> prepare-error: >> >> docs: >> [anakia] Transforming into: D:\jakarta\jakarta-site2\docs >> [anakia] Error: org.jdom.JDOMException: Error in building: >> SAX2 driver class org.apache.xerces.parsers.SAXParser not found >> >> BUILD FAILED >> >> D:\jakarta\jakarta-site2\build.xml:44: org.jdom.JDOMException: >> Error in building: SAX2 driver class >> org.apache.xerces.parsers.SAXParser not found >> >> Total time: 2 seconds >> >> Apply the following patch: >> >> Index: build.xml >> =================================================================== >> RCS file: /home/cvs/jakarta-site2/build.xml,v >> retrieving revision 1.7 >> diff -u -r1.7 build.xml >> --- build.xml 2001/07/27 18:54:01 1.7 >> +++ build.xml 2001/09/20 16:11:53 >> @@ -31,7 +31,7 @@ >> <!-- This Target is for output of HTML pages for the web site --> >> <target name="docs" depends="prepare-error" >> if="AnakiaTask.present" >> description="Render HTML Pages via Anakia"> >> - <taskdef name="anakia" >> + <taskdef name="anakia" reverseLoader="true" >> classname="org.apache.velocity.anakia.AnakiaTask"> >> <classpath refid="classpath"/> >> </taskdef> >> >> Try again: >> >> Buildfile: build.xml >> >> prepare: >> >> prepare-error: >> >> docs: >> [taskdef] The reverseloader attribute is DEPRECATED. It will >> be removed >> [anakia] Transforming into: D:\jakarta\jakarta-site2\docs >> [anakia] Input: index.xml >> [anakia] Output: D:\jakarta\jakarta-site2\docs\index.html >> >> - Sam Ruby >> >> > > > -- Geir Magnusson Jr. [EMAIL PROTECTED] System and Software Consulting "Whoever would overthrow the liberty of a nation must begin by subduing the freeness of speech." - Benjamin Franklin
