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" <[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