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" <[EMAIL PROTECTED]>
To: "Matt Benson" <[EMAIL PROTECTED]>
Cc: "Ant Developers List" <[EMAIL PROTECTED]>
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
> >
> >--- [EMAIL PROTECTED] 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 <[EMAIL PROTECTED]>:
> >>
> >>
> >>
> >>>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
> >>>
> >>>--- [EMAIL PROTECTED] 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 <[EMAIL PROTECTED]>:
> >>>>
> >>>>
> >
> >
> >__________________________________
> >Do you Yahoo!?
> >Yahoo! Small Business $15K Web Design Giveaway
> >http://promotions.yahoo.com/design_giveaway/
> >
> >
>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to