Package er.wojrebel

Source Code of er.wojrebel.WOJRebelSupport$Observer

package er.wojrebel;

import java.util.concurrent.locks.ReentrantLock;

import org.zeroturnaround.javarebel.webobjects.WebObjectsPlugin;

import com.webobjects.appserver.WOApplication;
import com.webobjects.foundation.NSNotification;
import com.webobjects.foundation.NSNotificationCenter;
import com.webobjects.foundation.NSSelector;

/**
* WOJRebelSupport loads the ClassReloadHandler once the app has started
*
* @author qdolan
*
*/
public class WOJRebelSupport {
  public static final Observer observer = new Observer();
  private static final ReentrantLock lock = new ReentrantLock();
  private static final Class<?>[] NotificationClassArray = new Class[] { NSNotification.class };
 
  private static final long MIN_ELAPSED_TIME = 2000;
  private static long lastRunTimestamp = System.currentTimeMillis();

  public WOJRebelSupport() {
    //Do nothing
  }
 
  public static void run() {
    long currentTime = System.currentTimeMillis();
    if (currentTime - lastRunTimestamp > MIN_ELAPSED_TIME) {
      lock.lock();
      try {
        lastRunTimestamp = System.currentTimeMillis();
        WOJRebelClassReloadHandler.getInstance().updateLoadedClasses(null);
        WOJRebelEOModelReloadHandler.getInstance().updateLoadedModels(null);
      } finally {
        lock.unlock();
      }
    }
  }
 
  public static class Observer {
    public void finishedLaunchingApp(NSNotification n) {
      try {
        WOJRebelClassReloadHandler.getInstance().initialize();
        NSNotificationCenter.defaultCenter().addObserver(this, new NSSelector("run", NotificationClassArray), WebObjectsPlugin.JREBEL_EVENT, null);
      } catch (NoClassDefFoundError e) {
        /* JRebel isn't in the classpath so we do nothing */
        return;
      }
    }
   
    public static void run(NSNotification notification) {
      WOJRebelSupport.run();
    }
  }
 
  static {
    try {
      NSNotificationCenter.defaultCenter().addObserver(observer,
        new NSSelector("finishedLaunchingApp", NotificationClassArray), WOApplication.ApplicationWillFinishLaunchingNotification, null);
      if (WOJRebelClassReloadHandler.getInstance().isReloadEnabled()) {
        // We need to initialize this early or we won't see the models load.
        WOJRebelEOModelReloadHandler.getInstance().initialize();
      }
    } catch (Exception e) {
      e.printStackTrace();
   
  }
 
}
TOP

Related Classes of er.wojrebel.WOJRebelSupport$Observer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.