|
Glassfish example source code file (DynamicReloader.java)
The Glassfish DynamicReloader.java source code
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2008-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package com.sun.enterprise.v3.server;
import com.sun.enterprise.config.serverbeans.Application;
import com.sun.enterprise.config.serverbeans.Applications;
import com.sun.enterprise.config.serverbeans.ServerTags;
import com.sun.enterprise.v3.admin.CommandRunnerImpl;
import com.sun.enterprise.v3.common.XMLActionReporter;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Logger;
import org.glassfish.api.ActionReport;
import org.glassfish.api.admin.ParameterMap;
import org.glassfish.api.admin.config.ApplicationName;
import org.glassfish.deployment.common.DeploymentProperties;
import org.jvnet.hk2.component.Habitat;
/**
* Triggers reloads of deployed applications depending on the presence of and
* timestamp on a .reload file in the application's top-level directory.
*
* An instance of this class can be reused, its run method invoked repeatedly
* to check all known apps for their .reload files.
*
* @author tjquinn
*/
public class DynamicReloader implements Runnable {
private static final String RELOAD_FILE_NAME = ".reload";
private AtomicBoolean inProgress;
/** Records info about apps being monitored */
private Map<String,AppReloadInfo> appReloadInfo;
private AtomicBoolean cancelRequested = new AtomicBoolean(false);
private Applications applications;
private Logger logger = Logger.getLogger(getClass().getName());
private Habitat habitat;
DynamicReloader(Applications applications, Habitat habitat) throws URISyntaxException {
this.applications = applications;
this.habitat = habitat;
initAppReloadInfo(applications);
inProgress = new AtomicBoolean(false);
}
/**
* Records reload information about the currently-known applications.
*
* @param applications
*/
private void initAppReloadInfo(Applications applications) throws URISyntaxException {
appReloadInfo = new HashMap<String,AppReloadInfo>();
logger.fine("[Reloader] Preparing list of apps to monitor:");
for (ApplicationName m : applications.getModules()) {
if (m instanceof Application) {
Application app = (Application) m;
if (Boolean.valueOf(app.getDeployProperties().getProperty
(ServerTags.IS_LIFECYCLE))) {
// skip lifecycle modules
continue;
}
AppReloadInfo info = new AppReloadInfo(app);
appReloadInfo.put(app.getName(), info);
logger.fine("[Reloader] Monitoring " + app.getName() + " at " + app.getLocation());
}
}
}
public void run() {
markInProgress();
try {
reloadApps();
} catch (Exception e) {
e.printStackTrace();
} finally {
clearInProgress();
}
}
void cancel() {
cancelRequested.set(true);
}
private void reloadApps() throws URISyntaxException, IOException {
List<AppReloadInfo> appsToReload = chooseAppsToReload();
for (AppReloadInfo appInfo : appsToReload) {
if (cancelRequested.get()) {
break;
}
reloadApp(appInfo);
}
cancelRequested.set(false);
}
private synchronized List<AppReloadInfo> chooseAppsToReload() throws URISyntaxException {
List<AppReloadInfo> result = new ArrayList
Other Glassfish examples (source code examples)Here is a short list of links related to this Glassfish DynamicReloader.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.