Windows Vista Produktivität Bastian Braun Senior Product Solution Manager Windows Client.
JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support...
Transcript of JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support...
![Page 1: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/1.jpg)
2011 © Trivadis
BASEL BERN LAUSANNE ZÜRICH DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MÜNCHEN STUTTGART WIEN
Welcome
Java User Group Switzerland
Increasing productivity
with JRebel
Claude Gex
13.10.2011
13.10.2011
Increasing productivity with JRebel
1
![Page 2: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/2.jpg)
2011 © Trivadis
13.10.2011
Increasing productivity with JRebel
2
Redeploy again? It’s such a small change! #N@M !
![Page 3: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/3.jpg)
2011 © Trivadis
What to expect
1. Introduction
2. Fundamental techniques for “replacing” classes
3. JRebel
4. Demo
5. JRebel Plugin
6. Other Tools / Outlook
13.10.2011
Increasing productivity with JRebel
3
![Page 4: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/4.jpg)
2011 © Trivadis
Development phases
Turnaround time
Total time between phase 1 and 4
Needs to be reduced to the max!
We’re only interested in
phase 1 and 4
Time is money!
13.10.2011
Increasing productivity with JRebel
4
1. Make Code
Changes
2. Compile
and Package
3. Deploy
4. See
Changes
![Page 5: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/5.jpg)
2011 © Trivadis
Changes we do
Java Code
JSP, Facelets
Configurations (XML, Annotations)
JSF, Struts
Spring
JPA / Hibernate
Log4j, Logback …
Resource Bundles
Simple resource such as
Static HTML, CSS, JavaScript, Images…
13.10.2011
Increasing productivity with JRebel
5
![Page 6: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/6.jpg)
2011 © Trivadis
Reducing turnaround time little by little
1. Configure your environment
2. Configure exploded directory deployment
3. Check what features your application server has
4. Check if your framework has reloading capabilities
5. Does this not yet meet your needs? Dig deeper and get some
additional tools
13.10.2011
Increasing productivity with JRebel
6
![Page 7: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/7.jpg)
2011 © Trivadis
1. Configure your environment
Obvious to do, but nevertheless often disregarded…
IDE needs to be configured
Activate “Build automatically”
Suitable server plugin is essential!
If you use Eclipse and Maven
I recommend to use M2Eclipse
Do not forget to install “Maven Integration for WTP” (m2e-extras)
In my opinion its best to start the server in the IDE
13.10.2011
Increasing productivity with JRebel
7
![Page 8: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/8.jpg)
2011 © Trivadis
2. Exploded Directory Deployment
Removes the need of creating deployment archives (WAR, EAR)
Supported by many servers (not all verified)
Tomcat
JBoss AS
Oracle Weblogic
Glassfish
Websphere
Only changed files needs to be copied, so called “incremental publish”
Static resources gets published and do not require redeployment
13.10.2011
Increasing productivity with JRebel
8
![Page 9: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/9.jpg)
2011 © Trivadis
3. Application Server capabilities
Is automatic reloading of modules supported?
(should be the case for all servers nowadays)
Is it possible to configure when to reload a module?
Some resources like CSS should only be copied…
Does the application server provide more features?
13.10.2011
Increasing productivity with JRebel
9
Oracle Weblogic FastSwap, since version 10.3
Configurable in WLS deployment descriptors
New methods, fields, constructors
Added methods not available through reflection API,
no support for EJB or other frameworks
![Page 10: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/10.jpg)
2011 © Trivadis
4. Frameworks with reloading capabilities (by design)
Tapestry 5
Grails
JBoss Seam
Play! Framework
13.10.2011
Increasing productivity with JRebel
12
![Page 11: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/11.jpg)
2011 © Trivadis
5. Not yet satisfied? Additional tools needed…
13.10.2011
Increasing productivity with JRebel
13
![Page 12: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/12.jpg)
2011 © Trivadis
Fundamental techniques for “replacing” classes
HotSwap (or in general: features the JVM offers out of the box)
Throwaway classloaders
Bytecode modifications
13.10.2011
Increasing productivity with JRebel
14
![Page 13: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/13.jpg)
2011 © Trivadis
HotSwap
Code changes are transferred by the Java Platform Debugger
Architecture (JPDA) to the JVM
13.10.2011
Increasing productivity with JRebel
15
![Page 14: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/14.jpg)
2011 © Trivadis
HotSwap - limitations
Application needs to be started in debug mode
Only changes to method bodies are possible
13.10.2011
Increasing productivity with JRebel
16
![Page 15: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/15.jpg)
2011 © Trivadis
Throwaway classloaders
Used by application server
A classloader per module
Used by some frameworks
Tapestry 5, Grails, Play! Framework
But only for managed objects
13.10.2011
Increasing productivity with JRebel
17
Bootstrap
Extension
System
WAR
Page A Page B Controller A Controller B
EAR
EJB WAR
![Page 16: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/16.jpg)
2011 © Trivadis
Throwaway classloaders – limitations
Classes are tightly bound to their
classloaders at runtime.
Same class loaded by 2 different
classloaders is not the same!
Existing instances always point to the
original class definition
Thus along with discarding the
classloader and the class definitions all
instances of it needs to be thrown away
State copy isn’t trivial
(for recreation of objects)
13.10.2011
Increasing productivity with JRebel
18
Classloader
Classloader A
TableModel.class
Classloader B
TableModel.class
![Page 17: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/17.jpg)
2011 © Trivadis
Reloading using bytecode modifications
Modify monitored class definitions as they are loaded
To not mess things up, this includes the whole reflection part!
Delegate to the latest version of a class as needed
Method calls, field access
This is extremely hard to do (constructors, type checks, reflection…)
Also consider debugging support
BUT: by now this seems to be the only way to achieve enough flexibility
And it allows to put reinitialization hooks for configs
13.10.2011
Increasing productivity with JRebel
19
![Page 18: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/18.jpg)
2011 © Trivadis
Bytecode modifications
Bootstrapping done by a Java Agent
(Instrumentation API since JDK 1.5)
Class transformation done using Libraries (e.g. Javassist)
13.10.2011
Increasing productivity with JRebel
20
JVM
Class Loader
Class A
Java Agent
Class File
Transformer Class B
Class C
![Page 19: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/19.jpg)
2011 © Trivadis
JRebel is …
A award-winning development tool
A Java-Agent plugin
A generic solution that works with all kind of applications
Not limited to Java: Scala and Groovy officially supported
Commercial tool
Free licenses for OSS, Scala Developers and for
non-commercial projects (JRebel social)
13.10.2011
Increasing productivity with JRebel
21
![Page 20: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/20.jpg)
2011 © Trivadis
Rebellious Features
Reloads code changes instantly …
… while debugging is still supported
… and it even hides newly generated class definitions from stacktrace
Works with exploded directory and packaged deployment
Reloadable resources are configurable
Supports a wide range of frameworks while it‘s still open for extension
(Plugin API)
IDE and Maven Plugins available
Eclipse, IntelliJIDEA, NetBeans, Oracle JDeveloper
13.10.2011
Increasing productivity with JRebel
22
![Page 21: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/21.jpg)
2011 © Trivadis
JRebel supported class structure changes
13.10.2011
Increasing productivity with JRebel
23
Limitations
Removing superclass
Adding / removing implemented
interfaces
Features
Adding / removing
Methods
Constructors
Fields
Annotations
Enum values
Changing
Static values
Interfaces
![Page 22: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/22.jpg)
2011 © Trivadis
JRebel environment and framework support
13.10.2011
Increasing productivity with JRebel
24
Frameworks (extract)
ResourceBundle
Spring Framework 2+
Google Guice
JBoss Seam 2+
Struts 1, 2 / Wicket
Facelets
Log4j / Logback
Java EE Support
JSP EL & Scriptlet changes
EJB 1-3 session bean interface
changes
JSF changes (Mojarra)
JPA changes (Hibernate,
EclipseLink, TopLink, OpenJPA)
CDI changes (Weld)
![Page 23: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/23.jpg)
2011 © Trivadis
Rebellion‘s configuration - rebel.xml
Configuration per module
Location
WAR: WEB-INF/classes
JAR: Root directory
JRebel checks each module for the existence of rebel.xml
Generation through IDE or Maven Plugin (I prefer the latter)
13.10.2011
Increasing productivity with JRebel
25
![Page 24: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/24.jpg)
2011 © Trivadis
JRebel – how reloading looks like
13.10.2011
Increasing productivity with JRebel
26
![Page 25: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/25.jpg)
2011 © Trivadis
Demonstrating JRebel‘s features
Simple application for managing a list of attendees
Application is entirely monitored by JRebel
Standard JavaEE stack with
JSF
- Managed Beans
- Facelets
EJB
JPA through Hibernate
13.10.2011
Increasing productivity with JRebel
27
EAR
WAR EJB-JAR
![Page 26: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/26.jpg)
2011 © Trivadis
Creating a custom JRebel plugin
Adding reload capabilities to your application or framework
JRebel handles class reloading, thus custom plugins are most likely
«only» about configuration changes
Configuration defines how to initializes something
2 types of configuration needs to be distinguished:
external: files (XML, property files …), database, …
internal: annotations, «normal» initialization (initializer blocks, constructors…)
Implementation complexity varies from easy to hard
13.10.2011
Increasing productivity with JRebel
28
![Page 27: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/27.jpg)
2011 © Trivadis
Introducing the JRebel SDK
The JRebel SDK mainly consists of
A public API to JRebel
A bundled version of Javassist
Most important functionality
Register class bytecode processors (CBP)
Adding own class event listeners (load / reload)
Rather weak documentation available
1 page on the website
official forum (little outdated)
JavaDoc
13.10.2011
Increasing productivity with JRebel
29
![Page 28: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/28.jpg)
2011 © Trivadis
Basic plugin design consists of 3 types
13.10.2011
Increasing productivity with JRebel
30
JRebel
Plugin Class bytecode processors (CBP)
loads
registers
calls
Class event listeners registers
![Page 29: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/29.jpg)
2011 © Trivadis
Explaining the plugin interface
13.10.2011
Increasing productivity with JRebel
31
preinit is called when plugin is loaded
checkDependencies checks if plugin should be loaded
The plugin’s ID is used to turn plugin on / off (-Djrebel.plugin-id=true)
![Page 30: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/30.jpg)
2011 © Trivadis
Custom JRebel plugin for reloading XML-configuration
Same demo application as before
13.10.2011
Increasing productivity with JRebel
32
Application
<<JSF Managed Bean>>
Navigation
<<JAXB Class>>>
NavigationItem
<<JAXB Class>>>
Contains n items
reads
«creates» using JAXB
Navigation.xml
![Page 31: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/31.jpg)
2011 © Trivadis
Reviewing the previous plugin example
It reloaded XML if changed
This could have been done without JRebel, but it nicely demonstrated
How plugin development works
Non-invasive ways of adding development features
Other configuration’s are made with annotations.
Annotations can be processed in class event processors
13.10.2011
Increasing productivity with JRebel
33
![Page 32: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/32.jpg)
2011 © Trivadis
Benefits of using JRebel plugins
Reloading capabilities for your application / framework
Even for third party libraries
It separates the «production» code from «development» code
(separation of concerns)
Enabling / disabling plugin on demand
Integrates into one plattform (JRebel), this eases setup
(only one javaagent to configure)
13.10.2011
Increasing productivity with JRebel
34
![Page 33: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/33.jpg)
2011 © Trivadis
Summary
Configuration of IDE and environment is essential
Check application server’s or framework’s documentation for reloading
features
We’ve covered reloading techniques
HotSwap, throwaway classloaders and byte code modification
We’ve seen that the dynamic reloading features JRebel offers reduces
turnaround times (not to mention the time of a “context switch”)
Custom plugin development isn’t that hard. But a more complex
application / framework will increase plugin complexity
13.10.2011
Increasing productivity with JRebel
35
![Page 34: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/34.jpg)
2011 © Trivadis
Other Tools / Outlook
Other tools/platforms competing JRebel:
Fakereplace
Javeleon (Currently only for Netbeans RCP applications)
Dynamic Code Evolution Virtual Machine (DCE VM)
Maybe some of these features will be available in HotSwap JDK 8+
“Springloaded”, included in SpringSource Tool Suite (STS)
Mainly tested for tc-Server (Tomcat++)
13.10.2011
Increasing productivity with JRebel
36
![Page 35: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/35.jpg)
2011 © Trivadis
BASEL BERN LAUSANNE ZÜRICH DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MÜNCHEN STUTTGART WIEN
THANK YOU. Trivadis AG
Claude Gex
Papiermühlestrasse 73
3014 Bern
Mobile +41-76-310 13 44
Tel. +41-31-928 09 60 (Zentrale)
Fax +41-31-928 09 64
www.trivadis.com
13.10.2011
Increasing productivity with JRebel
37
![Page 36: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/36.jpg)
2011 © Trivadis
Sources
HotSwap
http://download.oracle.com/javase/1.4.2/docs/guide/jpda/enhancement
s.html#hotswap
Instrumentation API
http://download.oracle.com/javase/6/docs/api/java/lang/instrument/pac
kage-summary.html
Zeroturnaround
http://www.zeroturnaround.com
JRebel Plugin API JavaDoc
http://www.zeroturnaround.com/docs/javarebel-
sdk/javadoc/org/zeroturnaround/javarebel/Plugin.html
13.10.2011
Increasing productivity with JRebel
38
![Page 37: JEE Development – Produktivität steigern mit JRebel · JSF, Struts Spring ... Java EE Support ... Integrates into one plattform (JRebel), this eases setup (only one javaagent to](https://reader031.fdocuments.in/reader031/viewer/2022022010/5af7ea567f8b9ad2208bd6d8/html5/thumbnails/37.jpg)
2011 © Trivadis
Sources
Oracle Weblogic JRebel Whitepaper:
http://www.oracle.com/technetwork/middleware/weblogic/oraclewls-
jrebel.pdf
Oracle FastSwap
http://download.oracle.com/docs/cd/E12839_01/web.1111/e13702/depl
oyunits.htm#i105438
Javassist
http://www.jboss.org/javassist/
Javeleon
http://javeleon.org/?features
Dynamic Code Evolution VM
http://ssw.jku.at/dcevm/
13.10.2011
Increasing productivity with JRebel
39