Hello Jeffrey, as far as I can see - the perform() method is called by Ant and - the execute() is implemented by the taskwriter.
Usually you are overwriting the Task.execute() method - which has an empty implementation in Task [1]. The Task.perform() does event firing (task starts/ends) framework internal configuration and calls the execute() method. So overwriting this method seems to be the "right" way. Coming from my idea that a project holds several targets the project should call a method from the target to perform all the tasks work. So I did a look at Target [2]. There are two methods: performTasks() and execute(). The perform does only event firing (target starts/stops) and calls the execute() method. That method iterates over all tasks and calls that perform() method! So the stack is target.performTasks() target.execute() task.perform() task.execute() Now lets have a look at the Definer task [3] ... öh ... is this the task you mean? What would your patch be? Maybe you could send it to the list. Jan [1] http://svn.apache.org/repos/asf/ant/core/trunk/src/main/org/apache/tools/ant/Task.java [2] http://svn.apache.org/repos/asf/ant/core/trunk/src/main/org/apache/tools/ant/Target.java [3] http://svn.apache.org/repos/asf/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Definer.java >-----Ursprüngliche Nachricht----- >Von: Jeffrey E Care [mailto:[EMAIL PROTECTED] >Gesendet: Dienstag, 1. November 2005 23:50 >An: dev@ant.apache.org >Betreff: Guidelines for executing delegate tasks? > >All: > >I've recently encountered some difficulties with the >multithreaded build extensions that I've mentioned on the list before. > >As part of the Mantis project that we use to build WAS we have >a custom logger. This logger uses a different banner format >([project/target/task]) from the default logger. The current >problem is that the banners on messages from the sub-builds >have the wrong context information; specifically they either >no context (i.e. the banner is empty) or they have the parent >project's context. > >I've done a lot of debugging in the past few days and found >that the parent context bit is due to a bug in our code, so >mea culpa there. But the no context bit I traced to some code >in oata.taskdefs.Definer. Definer creates an Antlib task >instance to load our antlib. Now, creating a "delegate task" >is a fairly common pattern; I do it in Mantis a lot. The >problem (as I see it anyway) is that Definer calls "perform" >instead of "execute" to make the Antlib instance do its work. >Because "perform" is used that blows away the currently >registered task for the current thread. >I've overridden Definer locally to call "execute" instead of >"perform" and my problems seem to have cleared up with no >side-effects. (Also interesting that this isn't really >threading related - it happens even when everything is running >on the main thread.) > >So, getting to the point, is there a general policy regarding >"execute"/"perform" for delegate task instances? Based on my >experience I would think that "execute" would be preferred, so >I wasn't sure if "perform" was required in this instance. I've >prepared a patch for Definer, but I didn't want to open a >bugzilla report until we had some discussion here on the list. > >Cheers, >JEC >-- >Jeffrey E. Care ([EMAIL PROTECTED]) >WebSphere v7 Release Engineer >WebSphere Build Tooling Lead (Project Mantis) > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]