From: <ms...@us...> - 2009-11-12 21:47:49
|
Revision: 10244 http://wonder.svn.sourceforge.net/wonder/?rev=10244&view=rev Author: mschrag Date: 2009-11-12 21:47:35 +0000 (Thu, 12 Nov 2009) Log Message: ----------- Added a new notification that fires after migrations finish running -- there is some configuration that isn't valid until after migrations run Modified Paths: -------------- trunk/Wonder/Frameworks/Core/ERExtensions/Sources/er/extensions/ERXFrameworkPrincipal.java trunk/Wonder/Frameworks/Core/ERExtensions/Sources/er/extensions/appserver/ERXApplication.java Modified: trunk/Wonder/Frameworks/Core/ERExtensions/Sources/er/extensions/ERXFrameworkPrincipal.java =================================================================== --- trunk/Wonder/Frameworks/Core/ERExtensions/Sources/er/extensions/ERXFrameworkPrincipal.java 2009-11-12 21:47:09 UTC (rev 10243) +++ trunk/Wonder/Frameworks/Core/ERExtensions/Sources/er/extensions/ERXFrameworkPrincipal.java 2009-11-12 21:47:35 UTC (rev 10244) @@ -75,14 +75,14 @@ protected final Logger log = Logger.getLogger(getClass()); /** holds the mapping between framework principals classes and ERXFrameworkPrincipal objects */ - private static final NSMutableDictionary initializedFrameworks = new NSMutableDictionary(); - private static final NSMutableArray launchingFrameworks = new NSMutableArray(); + protected static final NSMutableDictionary initializedFrameworks = new NSMutableDictionary(); + protected static final NSMutableArray launchingFrameworks = new NSMutableArray(); public static class Observer { /** * Notification method called when the WOApplication posts - * the notification 'ApplicationWillFinishLaunching'. This + * the notification 'ApplicationDidCreateNotification'. This * method handles de-registering for notifications and releasing * any references to observer so that it can be released for * garbage collection. @@ -91,14 +91,31 @@ * ready for accepting requests. */ public final void finishInitialization(NSNotification n) { - NSNotificationCenter.defaultCenter().removeObserver(this); + NSNotificationCenter.defaultCenter().removeObserver(this, ERXApplication.ApplicationDidCreateNotification, null); for (Enumeration enumerator = launchingFrameworks.objectEnumerator(); enumerator.hasMoreElements();) { ERXFrameworkPrincipal principal = (ERXFrameworkPrincipal) enumerator.nextElement(); principal.finishInitialization(); NSLog.debug.appendln("Finished initialization after launch: " + principal); } } - + + /** + * Notification method called when the WOApplication posts + * the notification 'ApplicationDidFinishInitializationNotification'. This + * method handles de-registering for notifications and releasing + * any references to observer so that it can be released for + * garbage collection. + * @param n notification that is posted after the WOApplication + * has been constructed, but before the application is + * ready for accepting requests. + */ + public final void finishedInitialization(NSNotification n) { + NSNotificationCenter.defaultCenter().removeObserver(this); + for (Enumeration enumerator = launchingFrameworks.objectEnumerator(); enumerator.hasMoreElements();) { + ERXFrameworkPrincipal principal = (ERXFrameworkPrincipal) enumerator.nextElement(); + principal.finishedInitialization(); + } + } } private static Observer observer; @@ -132,7 +149,11 @@ // WOApplication.ApplicationWillFinishLaunchingNotification, ERXApplication.ApplicationDidCreateNotification, null); - + center.addObserver(observer, + new NSSelector("finishedInitialization", ERXConstant.NotificationClassArray), + // WOApplication.ApplicationWillFinishLaunchingNotification, + ERXApplication.ApplicationDidFinishInitializationNotification, + null); } if (initializedFrameworks.objectForKey(c.getName()) == null) { // NSLog.debug.appendln("Starting up: " + c.getName()); @@ -188,6 +209,13 @@ */ public abstract void finishInitialization(); + /** + * Overridden by subclasses to finalize framework initialization. + */ + public void finishedInitialization() { + // Do nothing + } + public String toString() { return ERXStringUtilities.lastPropertyKeyInKeyPath(getClass().getName()); } Modified: trunk/Wonder/Frameworks/Core/ERExtensions/Sources/er/extensions/appserver/ERXApplication.java =================================================================== --- trunk/Wonder/Frameworks/Core/ERExtensions/Sources/er/extensions/appserver/ERXApplication.java 2009-11-12 21:47:09 UTC (rev 10243) +++ trunk/Wonder/Frameworks/Core/ERExtensions/Sources/er/extensions/appserver/ERXApplication.java 2009-11-12 21:47:35 UTC (rev 10244) @@ -177,6 +177,11 @@ */ public static final String ApplicationDidCreateNotification = "NSApplicationDidCreateNotification"; + /** + * Notification to post when all application initialization processes are complete (including migrations) + */ + public static final String ApplicationDidFinishInitializationNotification = "NSApplicationDidFinishInitializationNotification"; + /** * ThreadLocal that designates that the given thread is currently * dispatching a request. This is not stored in ERXThreadStorage, because it @@ -1113,6 +1118,7 @@ migrator.migrateToLatest(); migrationsDidRun(migrator); } + NSNotificationCenter.defaultCenter().postNotification(new NSNotification(ERXApplication.ApplicationDidFinishInitializationNotification, this)); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |