It might not be a good idea doing application hot-swap on a JVM. Java's class objects (class definitions) are kept in the JVM memory space called Perm Gen (String interns are there as well). Once the permgen is full it forces a full stop-the-world GC on the heap even if your GC configs are to CMS, its a huge performance killer especially in large heaps. If it can't clean the permgen you get nice OOM exceptions.
When reloading applications without killing the JVM you're adding class objects to the permgen. Even if its the same class but loaded from a different class loaders (as it happens in j2ee containers) you get a new class object. Some application containers (as tomcat) have known class memory leak where they keep references to old class definitions so even the stop the world GC won't help you.
Solution we use: have services running in clusters of instances. To deploy, stop traffic to subset of instances, kill them, restart them with a new version of the service, self check for errors : if(happy) {deploy the next max(n*2,cap) instances} else {roll back cluster to prev version}.
Building a basic tool should take 3-5 days assuming you have deployment, discoverability, service routing env already in place. Time to deploy N nodes is proportional to the cluster's unused capacity; more capacity that can go down for upgrade faster the cluster will get upgraded. Defining that capacity can be dynamic according to current traffic.
--es