Edit code, build, and the running server picks up the change in ~50ms. Even an items.xml save regenerates and reloads instead of costing you ant clean all. Works the same on any Spring Boot application.
Reloading Java classes is the easy half. On SAP Commerce most of a day's edits are not Java at all: a type in items.xml, a property, a line of text in a locales file, an ImpEx. Reclazz reloads those too. Every item below was measured on a running 2211 server.
Saving one runs the platform's own code generation and reloads the regenerated model and DTO classes, instead of ant clean all and a restart. A new attribute still needs its database column, so Reclazz tells you to run Update Running System rather than touching your schema itself.
Changes to a *-spring.xml are diffed and applied to the live context, which is also how a brand new bean becomes available without a restart.
The platform reads its property files once, at startup. Save one now and the keys whose value actually changed are applied to the running server, through the same call the HAC console makes. Values consumed once at startup are named as still needing a restart, instead of being reported as done.
SAP Commerce keeps its levels in the property files rather than a log4j2.xml, as a name and level pair. Change one and it reaches the running logger, so turning a class up to debug costs a save instead of a restart. Levels you did not touch are left where they are, including one you raised from the HAC console.
Edit a locales file and the new text is served on the next read. No system update, no database write, no restart.
Label files reach the label cache backoffice actually reads from, every copy of it. Reopen the view and your text is there.
Validate, Prepare, Load and Remove interceptors re-register, so a changed rule applies to the next model that passes through it.
Changed .impex files can be imported the moment you save them. It is opt-in, because it runs against your live database, and a file carrying a REMOVE header is named and refused rather than executed.
It reads your extension layout, classpath and classloader hierarchy on its own. There is no per-extension descriptor to write and keep in sync.
JRebel reloads Java classes on SAP Commerce, and it does that well. The rest of what a hybris day is made of is a different question, and the honest place to answer it is JRebel's own SAP Commerce manual.
| What you changed | Reclazz | JRebel |
|---|---|---|
| Price | Free & open source | $550+/year per seat |
| A Java class | ✓ | ✓ |
| Per-extension setup file | None | rebel.xml for backoffice extensions |
| A type in items.xml or beans.xml | ✓ regenerates & reloads | ✗ not in its Hybris manual |
| A log level | ✓ applied to the running server | ✗ not in its Hybris manual |
| A property | ✓ applied to the running server | ✗ not in its Hybris manual |
| A type or enum name in a locales file | ✓ | ✗ not in its Hybris manual |
| A backoffice label | ✓ | ✗ not in its Hybris manual |
| An interceptor | ✓ re-registered | ✗ not in its Hybris manual |
| An ImpEx file | ✓ opt-in, imported on save | ✗ not in its Hybris manual |
| Licence server & activation | None, nothing leaves your machine | Commercial licence, activation required |
Compared against JRebel's own SAP Commerce manual, which covers reloading compiled classes and configuring rebel.xml. A cross means that capability is not described there, not that JRebel is broken: it reloads classes on Hybris and that is what it documents.
Reclazz understands Spring internals. When a class reloads, beans refresh, mappings re-scan, caches evict, and schedulers re-register, automatically.
Automatically destroys and recreates singleton beans after class reload. Your changes take effect immediately without losing application state.
Re-registers @RequestMapping methods when a controller changes. An endpoint you add is served on the next request, on an ordinary JDK as well, instead of after a restart.
Evicts Spring caches for classes with @Cacheable, @CacheEvict, or @CachePut. No stale data after reload.
Cancels and re-registers @Scheduled tasks. Changed cron expressions and fixed-rate schedules apply immediately.
Add or remove methods and instance fields, and change annotations, on any JDK 17+. No patched JVM required. Added static fields and new enum values need a restart, and Reclazz says so.
Editing a Thymeleaf or Freemarker template takes effect on the next render, with caching left on.
Spring Boot reads a properties file once, at startup. Save one now and the changed keys go into the running Environment and the @ConfigurationProperties beans that read them are rebound, so a timeout or a feature flag applies on the next call. Log levels, and a saved logback.xml or log4j2.xml, reach the running logging context too. A bean bound through its constructor cannot take a new value, and Reclazz says so rather than reporting it as applied.
When nothing happens, ask why: the build did not reach the class, it is built somewhere Reclazz does not watch, the bytes came out identical, or the JVM has not loaded it yet. None of those produce an error, which is why the log was empty. A second question, what still needs a restart, lists what this session left behind, and says so plainly when there is nothing.
Clears AOP proxy caches for @Aspect classes. Re-registers @EventListener methods. Refreshes @Async processing.
Refreshes Repository beans. Detects @EnableWebSecurity and SecurityConfigurer changes. Full Spring ecosystem support.
Redefines classes in the running JVM via the Instrumentation API. Method body changes apply in ~50ms. Zero downtime.
No telemetry, no analytics, no license server, no outbound requests. Everything runs on your machine. Your code never leaves your environment.
Spring Boot DevTools restarts your entire context. JRebel costs $550+/year. Reclazz is free, open-source, and performs true in-place hot-swap.
| Feature | Reclazz | Spring Boot DevTools | JRebel |
|---|---|---|---|
| Price | Free & open source | Free | $550+/year |
| Reload type | In-place hot-swap | Full context restart | In-place hot-swap |
| Application state | Preserved | Lost on restart | Preserved |
| Reload speed | ~50ms | Seconds | ~50ms |
| Method body changes | ✓ | ✓ (restart) | ✓ |
| Add/remove methods & fields | ✓ (with JBR) | ✓ (restart) | ✓ |
| Spring bean refresh | ✓ | ✓ (restart) | ✓ |
| MVC mapping re-scan | ✓ | ✓ (restart) | ✓ |
| Cache eviction | ✓ | ✓ (restart) | Partial |
| @Scheduled re-register | ✓ | ✓ (restart) | ✗ |
| @EventListener refresh | ✓ | ✓ (restart) | ✗ |
| AOP proxy refresh | ✓ | ✓ (restart) | Partial |
| SAP Commerce support | Purpose-built | ✗ | Generic |
| Open source | ✓ Apache 2.0 | ✓ | ✗ |
Reclazz auto-detects your JDK and configures the right flags. Structural changes work everywhere; JetBrains Runtime additionally makes new members visible to reflection.
--add-opens flags-XX:+AllowEnhancedClassRedefinitionA lightweight Java agent runs inside your application JVM. It watches compiled classes and orchestrates Spring-aware reloading.
These are fundamental JVM and framework limitations that no tool can fully overcome.
Changing superclass or interfaces is a JVM limitation. No tool can work around this. It requires a restart.
Adding and removing methods or fields works on any JDK 17+. On a standard JDK the new members live on a hidden companion class, so code that calls them directly sees them, but reflection on the original class and caches built at startup (Hybris ModelService, Jackson) do not until a restart. JetBrains Runtime or DCEVM removes that caveat.
Configuration file changes (application.properties, application.yml, XML bean definitions) are loaded at startup and require a restart.
Adding entirely new @Component classes requires a restart. Spring's component scanning runs at startup. Modifying existing beans works out of the box.
Add the -javaagent flag to your JVM arguments, or install the IntelliJ plugin for automatic injection.
-javaagent:/path/to/reclazz-agent.jar
Start your Spring Boot application normally. Reclazz auto-detects your project layout and begins watching.
mvn spring-boot:run
Change your code, then compile. Reclazz hot-swaps the changes automatically. No restart needed.
mvn compile or gradle classes
target/classes (Maven) or build/classes/java/main (Gradle) from the classpath. Just run mvn compile or gradle classes and Reclazz hot-swaps the changes automatically.Spring Boot DevTools restarts take seconds and lose your state. Reclazz reloads in ~50ms and preserves everything. Free and open source.