Change a method at runtime via a hot swap mechanism

拜拜、爱过 提交于 2019-11-26 17:19:27
Arun

You can either use the open-source HotSpot VM or the commercial JRebel IDE plugin to easily achieve your goal (view comparison table here).

You can do it via class loaders. For example if you are familiar with Servlet containers such as tomcat that reload pages as you modify them in development. Here is a great explanation of creating dynamic code in java. It not only explains loading but also compiling source on the fly. You should be able to apply the concepts covered to any strategy of reloading code you want to utilize.

I've used this hotswap ant task in many projects. The target java application can be launched via Ant, Eclipse, a command prompt, or any other means as long as it is launched in debug mode with the appropriate port open. The linked page provides instructions on how to do this via Ant.

Any number of classes can be hotswapped as long as the changes are not structural. Method body changes generally hotswap with ease. Code can be hotswapped by running an ant script via a shell or Eclipse.

At work, I utilize a script that hotswaps code changes automatically by comparing timestamps on the class files. This is similar to the sample on the project page that shows a simple example that only hotswaps changed classes.

Additional note: This utilizes the JPDA.

A slightly old post, but hopefully someone will find this useful:

I've found the relatively newer Hotswap Agent is well documented and feature-rich (and best of all, open source).

You can do this through the JPDA (Java Platform Debugger Architecture) interface: http://download.oracle.com/javase/1.4.2/docs/guide/jpda/enhancements.html#hotswap

It's not automatic as the Erlang case - the JVM doesn't monitor the class path for changes to class files then reload and relink them if changed, for fairly obvious reasons (Java was designed for web deployment you don't want to be polling a http URL for changes).

What about OSGi? Hot swapping is sorta "built in" to the spec - I would think this would be one possible solution as well.

You could use the Strategy design pattern, so you have a an object to manipulate rather than a method, and a protocol for communicating with the program to tell it to use a given class name as the class of the Strategy object.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!