Hot deployment and hot swap are completly different beasts, Valeri. Hot swap is the ability to change class definitions while a VM is running, without the application ever noticing that. This is provided so you can reload quick changes to a class while you’re debugging. Hot swap is provided by the JVM, and while quite useful in server-side development, has no direct link to J2EE or application servers. Hot swap also has a number of limitations, as you already discovered.
Now, hot deployment is the ability to reload an entire J2EE application without bringing down the container. This is implemented by application servers is very different ways, and has no direct links to the JVM.
In general, all situations where you don’t have a clear separation between the development stage and the running application are difficult to handle. A J2EE application cannot modify its own configuration at runtime. The deployment descriptors are parsed and interpreted at the time of deployment but afterwards they are cast in stone. There’s no API to modify those aspects of the system that are in the deployment descriptors. If you want to dynamically change any of those aspects at runtime, you have to work around J2EE or resort to coding to extremely low level J2EE SPI interfaces like writing your own JCA resource adapter.