Browse Source

Add startup/shutdown LifeCycle extension point

tags/v1.6.0
James Moger 10 years ago
parent
commit
c59584f08d

+ 2
- 1
releases.moxie View File

@@ -14,7 +14,6 @@ r24: {
- Fix failure to generate SSH server keys on ARM (issue-426, ticket-70)
- Fix flotr2 chart generation failure if a label contained a single-quote (ticket-77)
changes:
- Added extension points for top nav links, root-level pages, repository nav links, user menu links, and http request filters (ticket-23)
- Split the pages servlet into a raw servlet and a pages servlet. All raw links now use the raw servlet (issue-413, ticket-49)
- Drop deprecated --set-upstream syntax for -u (ticket-59)
- BARNUM: Prune deleted branches on fetch (git fetch -p) (ticket-60)
@@ -27,9 +26,11 @@ r24: {
- Add My Tickets page (issue-215, ticket-15)
- Added CRUD functionality for Ticket Milestones (ticket-17)
- Implemented Ticket migration tool to move between backends (ticket-19)
- Added extension points for top nav links, root-level pages, repository nav links, user menu links, and http request filters (ticket-23)
- Add FORK_REPOSITORY RPC request type (issue-371, pr-161, ticket-65)
- Add object type (ot) parameter for RSS queries to retrieve tag details (pr-165, ticket-66)
- Add setting to allow STARTTLS without requiring SMTPS (pr-183)
- Added an extension point for monitoring onStartup and onShutdown (ticket-79)
dependencyChanges:
- Update to javax.mail 1.5.1 (issue-417, ticket-58)
contributors:

+ 43
- 0
src/main/java/com/gitblit/extensions/LifeCycleListener.java View File

@@ -0,0 +1,43 @@
/*
* Copyright 2014 gitblit.com.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gitblit.extensions;

import ro.fortsoft.pf4j.ExtensionPoint;

/**
* Extension point to allow plugins to listen to major Gitblit lifecycle events.
*
* @author James Moger
* @since 1.6.0
*/
public abstract class LifeCycleListener implements ExtensionPoint {

/**
* Called after all internal managers have been started.
* This may be useful for reporting "server is ready" to a monitoring system.
*
* @since 1.6.0
*/
public abstract void onStartup();

/**
* Called when the servlet container is gracefully shutting-down the webapp.
* This is called before the internal managers are stopped.
*
* @since 1.6.0
*/
public abstract void onShutdown();
}

+ 20
- 0
src/main/java/com/gitblit/servlet/GitblitContext.java View File

@@ -38,6 +38,7 @@ import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.WebXmlSettings;
import com.gitblit.dagger.DaggerContext;
import com.gitblit.extensions.LifeCycleListener;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.IFederationManager;
import com.gitblit.manager.IGitblit;
@@ -191,6 +192,15 @@ public class GitblitContext extends DaggerContext {
logger.info("");
logger.info("All managers started.");
logger.info("");

IPluginManager pluginManager = injector.get(IPluginManager.class);
for (LifeCycleListener listener : pluginManager.getExtensions(LifeCycleListener.class)) {
try {
listener.onStartup();
} catch (Throwable t) {
logger.error(null, t);
}
}
}

private String lookupBaseFolderFromJndi() {
@@ -225,6 +235,16 @@ public class GitblitContext extends DaggerContext {
@Override
protected void destroyContext(ServletContext context) {
logger.info("Gitblit context destroyed by servlet container.");

IPluginManager pluginManager = getManager(IPluginManager.class);
for (LifeCycleListener listener : pluginManager.getExtensions(LifeCycleListener.class)) {
try {
listener.onShutdown();
} catch (Throwable t) {
logger.error(null, t);
}
}

for (IManager manager : managers) {
logger.debug("stopping {}", manager.getClass().getSimpleName());
manager.stop();

+ 30
- 1
src/site/plugins_extensions.mkd View File

@@ -54,7 +54,7 @@ public class ExamplePlugin extends GitblitPlugin {
}

/**
* You can also create Webapp plugins that register mounted pages.
* You can also create Webapp plugins that register pages.
*/
public class ExampleWicketPlugin extends GitblitWicketPlugin {
@Override
@@ -285,3 +285,32 @@ public class MyNavLink extends NavLinkExtension {
}
}
```

### Lifecycle Listener

*SINCE 1.6.0*

You can provide a lifecycle listener to be notified when Gitblit has completely started and just before Gitblit is gracefully terminated.

```java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ro.fortsoft.pf4j.Extension;
import com.gitblit.extensions.LifeCycleListener;

@Extension
public class MyLifeCycleListener extends LifeCycleListener {

final Logger log = LoggerFactory.getLogger(getClass());
@Override
public void onStartup() {
log.info("Gitblit is Ready!!");
}

@Override
public void onShutdown() {
log.info("Gitblit is Going Down!!");
}
}
```

Loading…
Cancel
Save