On 3/29/12 6:45, Robert Munteanu wrote:
Hi,

I am looking into enhancing the integration between Apache Felix and the JRebel 
[1] JVM agent. If you're not familiar with JRebel, it's a java agent which 
allows classes loaded into the JVM to be redefined as soon as they are 
recompiled e.g. in an IDE. For more information about its features, see [2].

JRebel already has basic support for Apache Felix by allowing classes for a 
deployed bundle to be reloaded without requiring a bundle repackage and 
reinstall.

What I want to contribute is support for components managed using declarative 
services. The basic principle is that given a bundle which contains service 
components descriptors, watch for changes to those component descriptors and 
refresh the components when the respective descriptors have changed.

I have taken a quick look at both JRebel and Felix to see how an implementation 
should look like. JRebel offers support for detecting class changes, but not 
generic filesystem changes. Therefore I'd have to rely on Felix code ( in 
org.apache.felix.scr ? ) to detect

- when a bundle with component descriptors is deployed and start watching for 
changes to the descriptors
- when changes to the mentioned descriptors are detected refresh the components

Is there some reason you need to refresh at the class level as opposed to the bundle level? If the bundle level was sufficient then it seems like this scenario becomes much simpler.

Also, what do you mean by "refresh the components" above? Do you specifically mean re-load the class bytes? If so, how do you know that changes to the descriptor require re-loading the class bytes or are you just assuming it does?

Additionally, it seems you might be confused about the responsibility of some tasks. For example, SCR doesn't look for changes in component descriptors at all, it simply listens for bundles to be activated. Listening to changes in the component descriptor would have to hook into the build process somehow. By and large, none of the Felix subprojects are involved in the build process other than the Maven Bundle plugin.

-> richard


I would like to validate that this is at all possible within Apache Felix and 
to ask which are the best places to start looking for adding the JRebel 
functionality. Any thoughts/pointers on how to best start developing this would 
be greatly appreciated.

If this is feasible, I intend to develop this as a separate JRebel plugin and 
contribute it to the Apache Felix project.

Thanks,

Robert

[1]: http://zeroturnaround.com/jrebel/
[2]: http://zeroturnaround.com/jrebel/features/

Reply via email to