You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ant.apache.org by Parag Doke <pa...@gmail.com> on 2011/03/07 08:22:39 UTC

How to manage properties for identical tasks/macros run in parallel?

Hello ant users.
I am facing an issue with handling properties with calls to tasks/macros
nested within the parallel task. More of a logical/approach related issue
rather than anything with the tool itself. Here go the details:
Using ant:
Apache Ant version 1.8.1 compiled on April 30 2010
With Java:
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)

The most relevant part of the build.xml:
        <parallel>
            <mySleep seconds="4"/>
            <mySleep seconds="3"/>
            <mySleep seconds="2"/>
            <mySleep seconds="1"/>
        </parallel>

mySleep is my own macro with the following declaration:
    <macrodef name="mySleep">
        <attribute name="seconds"/>
        <sequential>
            <sleep seconds="@{seconds}"/> <!-- In my actual case, this is
exec calls with the outputproperty attribute -->
            <property name="myProp" value="my value = @{seconds}"/>
            <echo>Now working with ${myProp}</echo>
        </sequential>
    </macrodef>

Since properties are immutable, if it so happens that the 4th macro call
sets the property, the rest of them cannot modify it. A quick alternative to
this might be using the variable task (in place of property) from
ant-contrib.sf.net. However, the above is just an example. In reality, my
macro does an exec call. The outputproperty attribute to the exec call will
be what I need to process later.

So I guess my questions are:
1) What is the best approach to handle properties/variables for (almost)
identical macro calls ? I cannot modify the property name each time. I could
redirect stdout/stderr of the exec task to some file. But not sure how to
guarantee that the file will be unique and not get overwritten if 2 tasks
finish at the same instant of time.
2) Can the outputproperty value be captured in a variable directly ? I read
that it is possible to use the ant-contrib propertycopy task to get one
property value into another. But then there is a risk that the copy might
not be synchronized ...

The last option I have is of course to get rid of the parallel task and let
the macros run one after the other. But that would be modifying the
requirement to suit the scripting limitation I've run into. So I thought of
asking here before jumping on any implementation.

Thanks in advance for any pointers,
Parag Doke
Save paper, save trees. Do not print emails/documents unless absolutely
necessary.

Re: How to manage properties for identical tasks/macros run in parallel?

Posted by Parag Doke <pa...@gmail.com>.
Hello Matt.
Many thanks for that. I believe this suits my intent perfectly!

Regards,
Parag Doke
Save paper, save trees. Do not print emails/documents unless
absolutely necessary.



On Sun, Mar 13, 2011 at 1:08 PM, Matt Benson <gu...@gmail.com> wrote:
> You should see the <local> task, whereby you can set up scoped
> property "shadowing."
>
> Matt
>
> On Sat, Mar 12, 2011 at 10:59 PM, Parag Doke
> <pa...@gmail.com> wrote:
>> Any ideas anyone ?
>> Thanks in advance,
>> Parag Doke
>> Save paper, save trees. Do not print emails/documents unless
>> absolutely necessary.
>>
>>
>>
>> On Mon, Mar 7, 2011 at 12:52 PM, Parag Doke <pa...@gmail.com> wrote:
>>> Hello ant users.
>>> I am facing an issue with handling properties with calls to tasks/macros
>>> nested within the parallel task. More of a logical/approach related issue
>>> rather than anything with the tool itself. Here go the details:
>>> Using ant:
>>> Apache Ant version 1.8.1 compiled on April 30 2010
>>> With Java:
>>> java version "1.6.0_22"
>>> Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
>>> Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)
>>> The most relevant part of the build.xml:
>>>         <parallel>
>>>             <mySleep seconds="4"/>
>>>             <mySleep seconds="3"/>
>>>             <mySleep seconds="2"/>
>>>             <mySleep seconds="1"/>
>>>         </parallel>
>>> mySleep is my own macro with the following declaration:
>>>     <macrodef name="mySleep">
>>>         <attribute name="seconds"/>
>>>         <sequential>
>>>             <sleep seconds="@{seconds}"/> <!-- In my actual case, this is
>>> exec calls with the outputproperty attribute -->
>>>             <property name="myProp" value="my value = @{seconds}"/>
>>>             <echo>Now working with ${myProp}</echo>
>>>         </sequential>
>>>     </macrodef>
>>> Since properties are immutable, if it so happens that the 4th macro call
>>> sets the property, the rest of them cannot modify it. A quick alternative to
>>> this might be using the variable task (in place of property) from
>>> ant-contrib.sf.net. However, the above is just an example. In reality, my
>>> macro does an exec call. The outputproperty attribute to the exec call will
>>> be what I need to process later.
>>> So I guess my questions are:
>>> 1) What is the best approach to handle properties/variables for (almost)
>>> identical macro calls ? I cannot modify the property name each time. I could
>>> redirect stdout/stderr of the exec task to some file. But not sure how to
>>> guarantee that the file will be unique and not get overwritten if 2 tasks
>>> finish at the same instant of time.
>>> 2) Can the outputproperty value be captured in a variable directly ? I read
>>> that it is possible to use the ant-contrib propertycopy task to get one
>>> property value into another. But then there is a risk that the copy might
>>> not be synchronized ...
>>> The last option I have is of course to get rid of the parallel task and let
>>> the macros run one after the other. But that would be modifying the
>>> requirement to suit the scripting limitation I've run into. So I thought of
>>> asking here before jumping on any implementation.
>>> Thanks in advance for any pointers,
>>> Parag Doke
>>> Save paper, save trees. Do not print emails/documents unless absolutely
>>> necessary.
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>> For additional commands, e-mail: user-help@ant.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
> For additional commands, e-mail: user-help@ant.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Re: How to manage properties for identical tasks/macros run in parallel?

Posted by Matt Benson <gu...@gmail.com>.
You should see the <local> task, whereby you can set up scoped
property "shadowing."

Matt

On Sat, Mar 12, 2011 at 10:59 PM, Parag Doke
<pa...@gmail.com> wrote:
> Any ideas anyone ?
> Thanks in advance,
> Parag Doke
> Save paper, save trees. Do not print emails/documents unless
> absolutely necessary.
>
>
>
> On Mon, Mar 7, 2011 at 12:52 PM, Parag Doke <pa...@gmail.com> wrote:
>> Hello ant users.
>> I am facing an issue with handling properties with calls to tasks/macros
>> nested within the parallel task. More of a logical/approach related issue
>> rather than anything with the tool itself. Here go the details:
>> Using ant:
>> Apache Ant version 1.8.1 compiled on April 30 2010
>> With Java:
>> java version "1.6.0_22"
>> Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
>> Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)
>> The most relevant part of the build.xml:
>>         <parallel>
>>             <mySleep seconds="4"/>
>>             <mySleep seconds="3"/>
>>             <mySleep seconds="2"/>
>>             <mySleep seconds="1"/>
>>         </parallel>
>> mySleep is my own macro with the following declaration:
>>     <macrodef name="mySleep">
>>         <attribute name="seconds"/>
>>         <sequential>
>>             <sleep seconds="@{seconds}"/> <!-- In my actual case, this is
>> exec calls with the outputproperty attribute -->
>>             <property name="myProp" value="my value = @{seconds}"/>
>>             <echo>Now working with ${myProp}</echo>
>>         </sequential>
>>     </macrodef>
>> Since properties are immutable, if it so happens that the 4th macro call
>> sets the property, the rest of them cannot modify it. A quick alternative to
>> this might be using the variable task (in place of property) from
>> ant-contrib.sf.net. However, the above is just an example. In reality, my
>> macro does an exec call. The outputproperty attribute to the exec call will
>> be what I need to process later.
>> So I guess my questions are:
>> 1) What is the best approach to handle properties/variables for (almost)
>> identical macro calls ? I cannot modify the property name each time. I could
>> redirect stdout/stderr of the exec task to some file. But not sure how to
>> guarantee that the file will be unique and not get overwritten if 2 tasks
>> finish at the same instant of time.
>> 2) Can the outputproperty value be captured in a variable directly ? I read
>> that it is possible to use the ant-contrib propertycopy task to get one
>> property value into another. But then there is a risk that the copy might
>> not be synchronized ...
>> The last option I have is of course to get rid of the parallel task and let
>> the macros run one after the other. But that would be modifying the
>> requirement to suit the scripting limitation I've run into. So I thought of
>> asking here before jumping on any implementation.
>> Thanks in advance for any pointers,
>> Parag Doke
>> Save paper, save trees. Do not print emails/documents unless absolutely
>> necessary.
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
> For additional commands, e-mail: user-help@ant.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Re: How to manage properties for identical tasks/macros run in parallel?

Posted by Parag Doke <pa...@gmail.com>.
Any ideas anyone ?
Thanks in advance,
Parag Doke
Save paper, save trees. Do not print emails/documents unless
absolutely necessary.



On Mon, Mar 7, 2011 at 12:52 PM, Parag Doke <pa...@gmail.com> wrote:
> Hello ant users.
> I am facing an issue with handling properties with calls to tasks/macros
> nested within the parallel task. More of a logical/approach related issue
> rather than anything with the tool itself. Here go the details:
> Using ant:
> Apache Ant version 1.8.1 compiled on April 30 2010
> With Java:
> java version "1.6.0_22"
> Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
> Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)
> The most relevant part of the build.xml:
>         <parallel>
>             <mySleep seconds="4"/>
>             <mySleep seconds="3"/>
>             <mySleep seconds="2"/>
>             <mySleep seconds="1"/>
>         </parallel>
> mySleep is my own macro with the following declaration:
>     <macrodef name="mySleep">
>         <attribute name="seconds"/>
>         <sequential>
>             <sleep seconds="@{seconds}"/> <!-- In my actual case, this is
> exec calls with the outputproperty attribute -->
>             <property name="myProp" value="my value = @{seconds}"/>
>             <echo>Now working with ${myProp}</echo>
>         </sequential>
>     </macrodef>
> Since properties are immutable, if it so happens that the 4th macro call
> sets the property, the rest of them cannot modify it. A quick alternative to
> this might be using the variable task (in place of property) from
> ant-contrib.sf.net. However, the above is just an example. In reality, my
> macro does an exec call. The outputproperty attribute to the exec call will
> be what I need to process later.
> So I guess my questions are:
> 1) What is the best approach to handle properties/variables for (almost)
> identical macro calls ? I cannot modify the property name each time. I could
> redirect stdout/stderr of the exec task to some file. But not sure how to
> guarantee that the file will be unique and not get overwritten if 2 tasks
> finish at the same instant of time.
> 2) Can the outputproperty value be captured in a variable directly ? I read
> that it is possible to use the ant-contrib propertycopy task to get one
> property value into another. But then there is a risk that the copy might
> not be synchronized ...
> The last option I have is of course to get rid of the parallel task and let
> the macros run one after the other. But that would be modifying the
> requirement to suit the scripting limitation I've run into. So I thought of
> asking here before jumping on any implementation.
> Thanks in advance for any pointers,
> Parag Doke
> Save paper, save trees. Do not print emails/documents unless absolutely
> necessary.
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org