You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by de...@apache.org on 2010/08/23 09:41:02 UTC

svn commit: r988015 - /geronimo/sandbox/delos/status.patch

Author: delos
Date: Mon Aug 23 07:41:02 2010
New Revision: 988015

URL: http://svn.apache.org/viewvc?rev=988015&view=rev
Log:
upload a patch for review

Added:
    geronimo/sandbox/delos/status.patch

Added: geronimo/sandbox/delos/status.patch
URL: http://svn.apache.org/viewvc/geronimo/sandbox/delos/status.patch?rev=988015&view=auto
==============================================================================
--- geronimo/sandbox/delos/status.patch (added)
+++ geronimo/sandbox/delos/status.patch Mon Aug 23 07:41:02 2010
@@ -0,0 +1,142 @@
+Index: src/main/java/org/apache/geronimo/main/FrameworkLauncher.java
+===================================================================
+--- src/main/java/org/apache/geronimo/main/FrameworkLauncher.java	(revision 981165)
++++ src/main/java/org/apache/geronimo/main/FrameworkLauncher.java	(working copy)
+@@ -140,6 +140,9 @@
+         Runtime.getRuntime().addShutdownHook(new Thread() {
+             public void run() {
+                 FrameworkLauncher.this.destroy(false);
++                
++              //installer specific: remove lock file before JVM shutdown
++               LockFileGenerator.removeLockFile();
+             }
+         });
+         
+Index: src/main/java/org/apache/geronimo/main/LockFileGenerator.java
+===================================================================
+--- src/main/java/org/apache/geronimo/main/LockFileGenerator.java	(revision 0)
++++ src/main/java/org/apache/geronimo/main/LockFileGenerator.java	(revision 0)
+@@ -0,0 +1,88 @@
++
++
++package org.apache.geronimo.main;
++
++import java.io.File;
++import java.io.FileOutputStream;
++import java.io.IOException;
++import java.nio.channels.FileLock;
++
++
++/**
++ * This class is only used for generating lock file in java.io.tmpdir.
++ * Generated lock files will indicate if there is any server instance running.
++ * 
++ * 
++ * The class here will be used by Bootstapper.
++ * 
++ * Refer to ServerStartedRule.java in installer custom code com.ibm.wasce.installer.rules.ServerStartedRule 
++ *
++ */
++class LockFileGenerator {
++	private static String lockFileSuffix = ".lock";
++	private static String lockFilePrefix = "GERONIMO";
++	private static String lockFileDirectory = ".tmp";
++    
++	private static File lockFile;
++	private static FileLock lock;
++	
++	public static File getLockFile(){
++		return lockFile;
++	}
++	
++	public static void generateLockFile() {
++		//each server instance only generate one lock file
++		if (lockFile !=null) return;
++		
++    	//get current server instance name    	
++		String filename = lockFilePrefix;		
++		String instanceName = System.getProperty(Utils.SERVER_NAME_SYS_PROP);
++		
++		//temp file prefix must be at least three chars, so we use lockFilePrefix as prefix
++		if (instanceName != null) filename = filename + instanceName;
++		
++		// get temp dir for lock files
++		File wasceTempDir = getTempDirForLockFile();
++		
++		//create temp file for the instance		
++		try {
++			//generate temp file because the file name is unique 
++			lockFile = File.createTempFile(filename, lockFileSuffix,wasceTempDir);
++			//temp file will be deleted if server exit normally
++			lockFile.deleteOnExit();
++			FileOutputStream os = new FileOutputStream(lockFile);
++			lock = os.getChannel().lock();			
++		} catch (IOException e) {
++			//ignore: fail to lock the temp file shouldn't stop the starting of server
++		}
++	}
++	
++	private static File getTempDirForLockFile(){
++		//get temp directory for lock files
++		String tempDir;
++		try {
++			tempDir = Utils.getGeronimoHome().getAbsolutePath()+"/"+lockFileDirectory;
++		} catch (IOException e) {
++			//ignore: fail to lock the temp file shouldn't stop the starting of server
++			return null;
++		}
++		
++		File wasceTempDir = new File(tempDir);
++		if (!wasceTempDir.exists()) wasceTempDir.mkdir();
++		
++		return wasceTempDir;
++	}
++	
++	public static void removeLockFile(){
++		//we force to remove lock file 
++		//because temp file won't be removed when server exit abnormally
++		if (lock!=null)
++			try {
++				lock.release();
++			} catch (IOException e) {
++				//ignore
++			}
++		if (lockFile!=null&&lockFile.exists())
++			lockFile.delete();
++	}
++}
+Index: src/main/java/org/apache/geronimo/main/Bootstrapper.java
+===================================================================
+--- src/main/java/org/apache/geronimo/main/Bootstrapper.java	(revision 981165)
++++ src/main/java/org/apache/geronimo/main/Bootstrapper.java	(working copy)
+@@ -27,7 +27,8 @@
+  * @version $Rev$ $Date$
+  */
+ public class Bootstrapper extends FrameworkLauncher {
+-    
++	
++
+     private boolean waitForStop = true;    
+     private List<String> bundles;
+ 
+@@ -44,6 +45,9 @@
+         
+     public int execute(Object opaque) {
+         try {
++        	//installer specific: generate lock file to indicate if server is running
++        	LockFileGenerator.generateLockFile();
++        	
+             launch();
+         } catch (Throwable e) {
+             System.err.println("Error launching framework: " + e);
+@@ -78,7 +82,9 @@
+         }
+     }
+ 
+-    public Main getMain() {
++    
++
++	public Main getMain() {
+         ServiceTracker tracker = new ServiceTracker(getFramework().getBundleContext(), Main.class.getName(), null);
+         tracker.open();        
+         Main geronimoMain = null;