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/