Skip to content
Free & Open Source

Stop Restarting
SAP Commerce

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.

Built For SAP Commerce,
Not Adapted To It.

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.

🧩

items.xml & beans.xml

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.

🌱

Spring XML

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.

Properties

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.

📜

Log Levels

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.

🌐

Type & Enum Text

Edit a locales file and the new text is served on the next read. No system update, no database write, no restart.

🏷

Backoffice Labels

Label files reach the label cache backoffice actually reads from, every copy of it. Reopen the view and your text is there.

🔒

Interceptors

Validate, Prepare, Load and Remove interceptors re-register, so a changed rule applies to the next model that passes through it.

📤

ImpEx On Save

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.

📁

Extension Aware

It reads your extension layout, classpath and classloader hierarchy on its own. There is no per-extension descriptor to write and keep in sync.

Reclazz vs JRebel on Hybris

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
PriceFree & open source$550+/year per seat
A Java class
Per-extension setup fileNonerebel.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 & activationNone, nothing leaves your machineCommercial 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.

Deep Spring Integration.
Not Just Hot-Swap.

Reclazz understands Spring internals. When a class reloads, beans refresh, mappings re-scan, caches evict, and schedulers re-register, automatically.

🌱

Spring Bean Refresh

Automatically destroys and recreates singleton beans after class reload. Your changes take effect immediately without losing application state.

🔌

MVC Re-scan

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.

🔥

Cache Eviction

Evicts Spring caches for classes with @Cacheable, @CacheEvict, or @CachePut. No stale data after reload.

Scheduler Reload

Cancels and re-registers @Scheduled tasks. Changed cron expressions and fixed-rate schedules apply immediately.

🛠

Structural Changes

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.

📄

Template Reload

Editing a Thymeleaf or Freemarker template takes effect on the next render, with caching left on.

Property & Log Changes

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.

🔍

It Explains Itself

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.

🛡

AOP & Events

Clears AOP proxy caches for @Aspect classes. Re-registers @EventListener methods. Refreshes @Async processing.

📚

Spring Data & Security

Refreshes Repository beans. Detects @EnableWebSecurity and SecurityConfigurer changes. Full Spring ecosystem support.

Instant Hot-Swap

Redefines classes in the running JVM via the Instrumentation API. Method body changes apply in ~50ms. Zero downtime.

🔒

100% Local & Private

No telemetry, no analytics, no license server, no outbound requests. Everything runs on your machine. Your code never leaves your environment.

Reclazz vs DevTools vs JRebel

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
PriceFree & open sourceFree$550+/year
Reload typeIn-place hot-swapFull context restartIn-place hot-swap
Application statePreservedLost on restartPreserved
Reload speed~50msSeconds~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 supportPurpose-builtGeneric
Open source Apache 2.0

Works With Your JDK

Reclazz auto-detects your JDK and configures the right flags. Structural changes work everywhere; JetBrains Runtime additionally makes new members visible to reflection.

Standard JDK

JDK 17 / 21 / 25, any vendor
  • Method body changes
  • Add & remove methods and fields
  • Spring bean refresh
  • MVC re-scan & cache eviction
  • Scheduler & event reload
  • Change annotations
  • Auto-configured --add-opens flags

JetBrains Runtime / DCEVM optional

JBR / DCEVM 17 / 21 / 25
  • Everything above, plus:
  • New members visible to reflection
  • Reflective caches see them without a restart
  • Auto-configured -XX:+AllowEnhancedClassRedefinition

How Reclazz Works

A lightweight Java agent runs inside your application JVM. It watches compiled classes and orchestrates Spring-aware reloading.

What Can't Be Hot-Reloaded

These are fundamental JVM and framework limitations that no tool can fully overcome.

Class Hierarchy Changes

Changing superclass or interfaces is a JVM limitation. No tool can work around this. It requires a restart.

Reflection on New Members (standard JDKs)

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.

Spring Configuration Changes

Configuration file changes (application.properties, application.yml, XML bean definitions) are loaded at startup and require a restart.

New Spring Beans

Adding entirely new @Component classes requires a restart. Spring's component scanning runs at startup. Modifying existing beans works out of the box.

Up and Running in 3 Steps

1

Add the Agent

Add the -javaagent flag to your JVM arguments, or install the IntelliJ plugin for automatic injection.

-javaagent:/path/to/reclazz-agent.jar
2

Run Your App

Start your Spring Boot application normally. Reclazz auto-detects your project layout and begins watching.

mvn spring-boot:run
3

Build & Reload

Change your code, then compile. Reclazz hot-swaps the changes automatically. No restart needed.

mvn compile or gradle classes

Frequently Asked Questions

No. Reclazz uses the standard JVM Instrumentation API, the same mechanism used by debuggers and profilers. If a hot-swap fails (e.g., a structural change on standard OpenJDK), the original class remains loaded and your application continues running normally.
DevTools restarts the entire Spring application context on every change, which takes seconds and loses all application state. Reclazz performs true in-place class redefinition, so your state is preserved, and reloads complete in ~50ms. Reclazz also handles Spring-specific concerns like MVC re-scanning, cache eviction, and scheduler re-registration without a restart.
Yes. Reclazz auto-detects 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.
Reclazz reports the error in the tool window and via a notification. The original class stays loaded, so your application is never left in a broken state. Common causes: superclass or interface changes, which always require a restart.
No. Reclazz is 100% local. There is no telemetry, no analytics, no license server, and no outbound network requests. Everything runs entirely on your machine. Your code never leaves your environment.
Yes, and it is the reason Reclazz exists. Saving a *-items.xml or *-beans.xml runs the platform's own code generation in the background and hot-reloads the regenerated model and DTO classes, instead of ant clean all and a restart. New attributes still need a database column, so Reclazz reminds you to run HAC > Update Running System rather than touching your database itself. On top of that: property changes applied to the running server, log levels applied to the running Log4j2 context, type and enum text re-read from locales files, backoffice labels refreshed, interceptor reload (Validate, Prepare, Load, Remove), *-spring.xml reload, ImpEx auto-import and extension-aware class watching.
Not required. Structural changes (adding and removing methods and fields) work on any JDK 17+. JetBrains Runtime or DCEVM additionally makes those new members visible to reflection and to caches built at startup. Reclazz auto-detects which runtime you're using and configures itself accordingly.

Stop Wasting Time on
Application Restarts

Spring Boot DevTools restarts take seconds and lose your state. Reclazz reloads in ~50ms and preserves everything. Free and open source.