code: @Override
      public void handle(final Wave wave) throws WaveException {
  
          Method customMethod = retrieveCustomMethod(wave);
  
          if (customMethod == null) {
  
              // If no custom method was provided, call the default method named
              // 'processWave(wave)'
              try {
                  customMethod = getWaveReady().getClass().getDeclaredMethod(AbstractComponent.PROCESS_WAVE_METHOD_NAME, Wave.class);
              } catch (IllegalArgumentException | NoSuchMethodException e) {
                  LOGGER.error(WAVE_DISPATCH_ERROR, e);
                  // Propagate the wave exception
                  throw new WaveException(wave, e);
              }
          }
  
          // Grab the run type annotation (if exists)
          final RunInto runInto = customMethod.getAnnotation(RunInto.class);
  
          // Retrieve the annotation runnable priority (if any)
          final PriorityLevel priority = runInto == null ? PriorityLevel.Normal : runInto.priority();
  
          // Retrieve the annotation run type (if any)
          final RunType runType = runInto == null ? null : runInto.value();
  
          final WaveHandlerBase waveHandler = this;
          final Method method = customMethod;
          final String runnableName = getWaveReady().getClass().getSimpleName() + " handle wave " + wave.toString();
  
          final Runnable waveHandlerRunnable = () -> {
              try {
                  performHandle(wave, method);
              } catch (final WaveException e) {
                  LOGGER.error(WAVE_HANDLING_ERROR, e);
              } finally {
                  wave.removeWaveHandler(waveHandler);
              }
          };
  
          // If the notified class is part of the UI
          // We must perform this action into the JavaFX Application Thread
          // only if the run type hasn't been overridden
          if (runType != null && runType == RunType.JAT || runType == null && getWaveReady() instanceof Model) {
  
              JRebirth.runIntoJAT(runnableName, waveHandlerRunnable);
  
          } else if (runType != null && runType == RunType.JTP) {
              // Launch the wave handling into JRebirth Thread Pool
              JRebirth.runIntoJTP(runnableName, priority, waveHandlerRunnable);
          } else {
              // Otherwise we can perform it right now into the current thread
              // (JRebirthThread - JIT)
              waveHandlerRunnable.run();
          }
  
      }
docs: {@inheritDoc}