ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Kavanagh <...@dotech.com>
Subject Re: hotswap via ant
Date Sat, 03 Apr 2004 01:47:55 GMT
I just finished coding it to work for shared memory or host/port. I had 
tested those with my helper class, but not from ant before.
I have failonerror in there also. I'm trying to borrow from other 
taskdefs as much as possible. both to maintain consistency and to re-use 
already debugged code!
I was going to update one class at a time, but I could do it either way. 
Do you think it is worth making it an option on the task?

As far as querying the VM capabilities. I have tried with jdk1.4.1_06 
and it supports class replacement, but not adding methods. So, I only 
test for the first.
BTW, I'm going to play with the <outofdate> task from ant-contrib as the 
preferred way to build the list of classes. If changes are made to 
<tstamp> and the <date> targets to support finer granularity, that could 
work also.

David

Thus Spoke Peter Leschev:

>Hi David,
>
>                    Looking good!
>
>            A couple of suggestions:
>                - Currently it looks like you can only pass the port for the
>VM's debug port. It would be useful if you can specify a host as well (just
>default it to localhost so the user doesn't have to specify it if they don't
>need it).
>                - How does the task handle failure*? Does the task fail the
>build if the hotswap fails? Having this configurable would be good.
>                - Do you call defineClasses for each class, or do you group
>the whole update into one big defineClasses call? Calling it for each class
>ensures you update as many classes as possible (and are able to skip the
>dodgy* updates), but I'm sure it would be slower than doing one whole
>update.
>
>Regards,
>Pete
>
>* failure could occur if the class has changed in such a way (deleting a
>method for example) that the VM currently doesn't support.
>
>----- Original Message ----- 
>From: "David Kavanagh" <dak@dotech.com>
>To: "Matt Benson" <gudnabrsam@yahoo.com>
>Cc: "Ant Developers List" <dev@ant.apache.org>
>Sent: Saturday, April 03, 2004 2:14 AM
>Subject: Re: hotswap via ant
>
>
>  
>
>>It's Alive! Now, I just need some help working out the file selection
>>part. (which is using existing Ant constructs).
>>Here is a sample of my build file.
>>
>><target name="hotswap" depends="init" description="Compile and Hotswap
>>changed classes">
>>    <taskdef name="hotswap"
>>classname="org.apache.tools.ant.taskdefs.Hotswap"/>
>>    <mkdir dir="${build.classes.dir}"/>
>>    <tstamp>
>>        <format property="class.stamp" pattern="MM/dd/yyyy hh:mm" />
>>    </tstamp>
>>    <echo message="timestamp = ${class.stamp}"/>
>>    <javac .../>
>>    <hotswap verbose="true" hotswap="true" hsaddress="9000">
>>        <fileset dir="${build.classes.dir}" includes="**/*.class">
>>            <date datetime="${class.stamp} AM" when="after"/>
>>        </fileset>
>>    </hotswap>
>></target>
>>
>>This is an example of the timestamp that is returned. Is there a way to
>>get this to use seconds as well? The granularity doesn't seem good
>>enough for my purpose.
>>     [echo] timestamp = 04/02/2004 11:07
>>
>>In the <date>, it requires the AM or PM part, which I'm just putting in
>>by hand (which isn't good either). Is there a better way to select files
>>that have changed in the classes dir since the javac has run?
>>
>>Once I get this worked out, I'll clean up the task a little and make it
>>available for everyone to try. (and provide some docs as well!)
>>
>>Thanks,
>>David
>>
>>PS. I tested this by coding a specific class filename, since the date
>>thing isn't working yet.
>>
>>Thus Spoke Matt Benson:
>>
>>    
>>
>>>http://ant.apache.org/manual/CoreTypes/selectors.html#dateselect
>>>
>>>You would have to use a nested <format> element in
>>>your <tstamp> to create the date in the right format
>>>for the date selector, but aside from that I can't see
>>>any problems...
>>>
>>>-Matt
>>>
>>>--- dak@dotech.com wrote:
>>>
>>>
>>>      
>>>
>>>>This sounds good to me! The less grunt work I have
>>>>to do in my task, the better!
>>>>I grabbed teh 1.6.1 source release and built it. If
>>>>you could point me to the
>>>><date> file selector you mention, it would help me a
>>>>lot. I just poked around
>>>>and it didn't jump out at me. I would like it if my
>>>>task could just deal with a
>>>>list of class files provided via some built-in
>>>>filtering means.
>>>>
>>>>Thanks,
>>>>David
>>>>
>>>>Quoting Matt Benson <gudnabrsam@yahoo.com>:
>>>>
>>>>
>>>>
>>>>        
>>>>
>>>>>Basically you should make any task as atomic as
>>>>>possible.  So all your task would need to know
>>>>>
>>>>>
>>>>>          
>>>>>
>>>>about
>>>>
>>>>
>>>>        
>>>>
>>>>>is a <fileset>.  Then it becomes the user's
>>>>>
>>>>>
>>>>>          
>>>>>
>>>>problem
>>>>
>>>>
>>>>        
>>>>
>>>>>how to select which files to include.  One way
>>>>>
>>>>>
>>>>>          
>>>>>
>>>>might
>>>>
>>>>
>>>>        
>>>>
>>>>>be to use a <tstamp>
>>>>>to set a baseline time, then compile, then use a
>>>>><date> file selector to get the updated classes.
>>>>>Another way might use ant-contrib's <outofdate> to
>>>>>determine which sources should be recompiled.  You
>>>>>could then compile only those sources to some
>>>>>temporary build area, then hotswap only those
>>>>>
>>>>>
>>>>>          
>>>>>
>>>>classes.
>>>>
>>>>
>>>>        
>>>>
>>>>>The point is that others have designed ways in
>>>>>
>>>>>
>>>>>          
>>>>>
>>>>which
>>>>
>>>>
>>>>        
>>>>
>>>>>the files can be selected, so you gain maximum
>>>>>flexibility (and minimum RESPONSIBILITY) the less
>>>>>
>>>>>
>>>>>          
>>>>>
>>>>your
>>>>
>>>>
>>>>        
>>>>
>>>>>Task is expected to do.
>>>>>
>>>>>-Matt
>>>>>
>>>>>--- dak@dotech.com wrote:
>>>>>
>>>>>
>>>>>          
>>>>>
>>>>>>When I was toying with a separate task, I
>>>>>>
>>>>>>
>>>>>>            
>>>>>>
>>>>wondered
>>>>
>>>>
>>>>        
>>>>
>>>>>>if <uptodate> could be use
>>>>>>somehow to create a <fileset>. I don't see now,
>>>>>>
>>>>>>
>>>>>>            
>>>>>>
>>>>but
>>>>
>>>>
>>>>        
>>>>
>>>>>>that would sure be a nice
>>>>>>feature. Then, if I could assign an ID so I
>>>>>>
>>>>>>
>>>>>>            
>>>>>>
>>>>could
>>>>
>>>>
>>>>        
>>>>
>>>>>>make a <fileset> of files
>>>>>>that aren't uptodate, run the compile, then take
>>>>>>that same <fileset> as input
>>>>>>to the <hotswap> target.
>>>>>>The idea of a timestamp file could work. The
>>>>>>sequence might be something like.
>>>>>><touch file="timestamp"/>
>>>>>><javac .../>
>>>>>><hotswap classesdir="foo" host="localhost"
>>>>>>port="9000" timefile="timestamp">
>>>>>> <patternset>
>>>>>>    ... some pattern to apply to the classes
>>>>>>
>>>>>>
>>>>>>            
>>>>>>
>>>>dir
>>>>
>>>>
>>>>        
>>>>
>>>>>>...
>>>>>> </patternset>
>>>>>></hotswap>
>>>>>>
>>>>>>That way, the hotswap task would check the files
>>>>>>
>>>>>>
>>>>>>            
>>>>>>
>>>>in
>>>>
>>>>
>>>>        
>>>>
>>>>>>the classes dir based on the
>>>>>>patternset and/or the timestamp.
>>>>>>
>>>>>>Seriously, I'm open to feedback. I might as well
>>>>>>
>>>>>>
>>>>>>            
>>>>>>
>>>>do
>>>>
>>>>
>>>>        
>>>>
>>>>>>it right the first time!
>>>>>>
>>>>>>David
>>>>>>
>>>>>>Quoting Steve Loughran <steve_l@iseran.com>:
>>>>>>
>>>>>>
>>>>>>            
>>>>>>
>>>__________________________________
>>>Do you Yahoo!?
>>>Yahoo! Small Business $15K Web Design Giveaway
>>>http://promotions.yahoo.com/design_giveaway/
>>>
>>>
>>>      
>>>
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
>For additional commands, e-mail: dev-help@ant.apache.org
>  
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message