/** {@inheritDoc} */
 @Override
 protected void writeActiveResource(IActiveResource resource, OutputStream outputStream)
     throws IOException {
   IBackendController backendController = BackendControllerHolder.getCurrentBackendController();
   AbstractBackendController slaveBackendController =
       (AbstractBackendController) backendController.createBackendController();
   AsyncActionExecutor executor =
       new AsyncActionExecutor(
           new AsyncExportAction(resource, outputStream),
           new HashMap<String, Object>(),
           null,
           slaveBackendController);
   // execute synchronously in the thread
   try {
     executor.run();
   } catch (RuntimeException ex) {
     if (ex.getCause() instanceof IOException) {
       throw (IOException) ex.getCause();
     } else {
       throw ex;
     }
   }
   // Do not cleanup the session backend controller since it can be used by a GUI thread. See bug
   // #75.
   // backendController.cleanupRequestResources();
 }
 /** Programmatically stops the application and performs all necessary cleanups. */
 public void stop() {
   // Breaks SSO. Useless to perform before garbage collecting.
   // if (frontendController != null) {
   // frontendController.stop();
   // }
   frontendController = null;
   BackendControllerHolder.setSessionBackendController(null);
 }
 /**
  * Both front and back controllers are retrieved from the spring context, associated and started.
  *
  * <p>{@inheritDoc}
  */
 @SuppressWarnings("unchecked")
 @Override
 public void start() {
   // start on brand new instances.
   stop();
   IBackendController backendController;
   try {
     backendController =
         (IBackendController) getApplicationContext().getBean("applicationBackController");
   } catch (RuntimeException ex) {
     LOG.error("applicationBackController could not be instantiated.", ex);
     throw ex;
   }
   try {
     frontendController =
         (IFrontendController<E, F, G>)
             getApplicationContext().getBean("applicationFrontController");
   } catch (RuntimeException ex) {
     LOG.error("applicationFrontController could not be instantiated.", ex);
     throw ex;
   }
   frontendController.start(backendController, getStartupLocale(), getClientTimeZone());
   BackendControllerHolder.setSessionBackendController(backendController);
 }