Mercurial > hg > blitz_stable
diff src/org/dancres/blitz/config/ConfigAssistant.java @ 0:3dc0c5604566
Initial checkin of blitz 2.0 fcs - no installer yet.
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 21 Mar 2009 11:00:06 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/org/dancres/blitz/config/ConfigAssistant.java Sat Mar 21 11:00:06 2009 +0000 @@ -0,0 +1,332 @@ +package org.dancres.blitz.config; + +/** + <p> As Blitz can be run on many operating systems (Win32, Mac OS X and most + UNIX varieties) and on top of several different versions of Db (4.1 and + 4.2), initial configuration has the potential to be time-consuming. To make + the task simpler, the Blitz distribution includes a tool (ConfigAssistant) + which will assist you in determining what your configuration is and what + changes are required. Run ConfigAssistant as follows:</p> + + <pre> + cd /home/dan/src/jini/space/ + + java -Djava.security.policy=config/policy.all -cp lib/blitz.jar + org.dancres.blitz.config.ConfigAssistant + + </pre> + + <p> + ConfigAssistant performs the following steps: + </p> + + <ol> + <li> Identify the operating system you are running on.</li> + <li> Identify which version of Db you have installed.</li> + <li> Display recommended .config file changes and any platform specific instructions for running Blitz.</li> + </ol> + + <p> + ConfigAssistant may fail to determine the version of Db you have installed.# + When this happens, it will suggest the likely cause of the problem and exit + Once the problem is identified and fixed, you can re-run + ConfigAssistant.</p> + + <p> + <b>Note:</b> Mac OS X users should read the platform notes which details + additional requirements for running ConfigAssistant, ServiceStarter etc. + </p> + */ +public class ConfigAssistant { + private static final String[][] DB_VERSIONS = {{"4", "1"}, {"4", "2"}}; + + private static final int[] DB_VERSION_CODE = {0, 1}; + + private static final String[] DB_NAMES = {"db4.1", "db4.2"}; + + private static final int OS_X = 1; + private static final int WIN32 = 2; + private static final int UNIX = 3; + + private static final String DB_PROP = "sleepycat.db.libfile"; + + private static final String[] CONFIG_GENERAL = { + "", + "**********", + "** Note **", + "**********", + "", + "Remember to set the persistDir and logDir variables in your", + "blitz.config to suitable directories which should be writable", + "by the user you plan to run Blitz under.", + "", + "" + }; + + private static final String[] CONFIG_UNIX_DB41 = { + "UNIX with Db4.1", + "===============", + "", + "Edit the start-*.config files as follows:", + "", + "Set dbVersion=\"\"", + "Edit jiniRoot, dbLib, codebasePort and blitzRoot to appropriate values" + }; + + private static final String[] CONFIG_UNIX_DB42 = { + "UNIX with Db4.2", + "===============", + "", + "Edit the start-*.config files as follows:", + "", + "Set dbVersion=\"db42/\"", + "Edit jiniRoot, dbLib, codebasePort and blitzRoot to appropriate values" + }; + + private static final String[][] CONFIG_UNIX = {CONFIG_UNIX_DB41, + CONFIG_UNIX_DB42}; + + private static final String[] CONFIG_OS_X_DB41 = { + "OSX with Db4.1", + "===============", + "", + "Edit the start-*.config files as follows:", + "", + "Set dbVersion=\"\"", + "Edit jiniRoot, dbLib, codebasePort and blitzRoot to appropriate values", + "", + "*** IMPORTANT NOTES ON USING SERVICESTARTER ***", + "", + "When using start-transient-blitz.config or other transient configurations", + "Make sure you run the java command with -D" + DB_PROP + "=" + + System.getProperty(DB_PROP), + "", + "When using start-activatable-blitz.config or other activatable configurations", + "Make sure you set sharedVM_options (in the .config file) to", + "\"-D" + DB_PROP + "=" + System.getProperty(DB_PROP) + "\"" + }; + + private static final String[] CONFIG_OS_X_DB42 = { + "OSX with Db4.2", + "===============", + "", + "Edit the start-*.config files as follows:", + "", + "Set dbVersion=\"db42/\"", + "Edit jiniRoot, dbLib, codebasePort and blitzRoot to appropriate values", + "", + "*** IMPORTANT NOTES ON USING SERVICESTARTER ***", + "", + "When using start-transient-blitz.config or other transient configurations", + "Make sure you run the java command with -D" + DB_PROP + "=" + + System.getProperty(DB_PROP), + "", + "When using start-activatable-blitz.config or other activatable configurations", + "Make sure you set sharedVM_options (in the .config file) to", + "\"-D" + DB_PROP + "=" + System.getProperty(DB_PROP) + "\"" + }; + + private static final String[][] CONFIG_OS_X = {CONFIG_OS_X_DB41, + CONFIG_OS_X_DB42}; + + private static final String[] CONFIG_WIN32_DB41 = { + "Win32 with Db4.1", + "===============", + "", + "Edit the start-*.config files as follows:", + "", + "Set dbVersion=\"\"", + "Edit jiniRoot, dbLib, codebasePort and blitzRoot to appropriate values" + }; + + private static final String[] CONFIG_WIN32_DB42 = { + "Win32 with Db4.2", + "===============", + "", + "Edit the start-*.config files as follows:", + "", + "Set dbVersion=\"db42/\"", + "Edit jiniRoot, dbLib, codebasePort and blitzRoot to appropriate values" + }; + + private static final String[][] CONFIG_WIN32 = {CONFIG_WIN32_DB41, + CONFIG_WIN32_DB42}; + + public static void main(String args[]) { + + if (Boolean.getBoolean("debug")) { + System.err.println("OS name: " + System.getProperty("os.name")); + + System.err.println("MacOSX: " + System.getProperty(DB_PROP)); + + for (int i = 0; i < DB_VERSIONS.length; i++) { + String myLibName; + + myLibName = getLibName(DB_VERSIONS[i][0], DB_VERSIONS[i][1], + WIN32); + + System.err.println("Win32: " + myLibName + ", " + + libraryPresent(myLibName, WIN32)); + + myLibName = getLibName(DB_VERSIONS[i][0], DB_VERSIONS[i][1], + UNIX); + + System.err.println("Unix: " + myLibName + ", " + + libraryPresent(myLibName, UNIX)); + } + + dumpInstructions(CONFIG_UNIX); + dumpInstructions(CONFIG_OS_X); + dumpInstructions(CONFIG_WIN32); + + System.exit(0); + } + + if (System.getProperty("os.name").startsWith("Windows")) { + configWindows(); + return; + } + + if (System.getProperty("os.name").toLowerCase().startsWith("mac")) { + if (System.getProperty(DB_PROP) == null) { + System.err.println(); + System.err.println("Please read docs/mac_osx.html and rerun ConfigAssistant with an appropriate -D" + DB_PROP); + System.exit(0); + } else { + configMacOSX(); + return; + } + } + + configUnix(); + } + + private static void dumpInstructions(String[][] anInsts) { + for (int i = 0; i < anInsts.length; i++) { + System.err.println(); + dumpSpecificInstructions(anInsts[i]); + System.err.println(); + } + } + + private static void dumpSpecificInstructions(String[] anInst) { + for (int i = 0; i < anInst.length; i++) { + System.err.println(anInst[i]); + } + } + + private static void configMacOSX() { + System.err.println("I think you're on Mac OSX"); + + int myVersion = probeLib(OS_X); + + if (myVersion == -1) { + System.err.println("Couldn't locate Db :("); + System.err.println("Are the Db .so's on LD_LIBRARY_PATH?"); + System.exit(0); + } else { + System.err.println("I think you have: " + DB_NAMES[myVersion]); + } + + System.err.println(); + dumpSpecificInstructions(CONFIG_OS_X[myVersion]); + dumpSpecificInstructions(CONFIG_GENERAL); + } + + private static void configUnix() { + System.err.println("I think you're on UNIX"); + + int myVersion = probeLib(UNIX); + + if (myVersion == -1) { + System.err.println("Couldn't locate Db :("); + System.err.println("Are the Db .so's on LD_LIBRARY_PATH?"); + System.exit(0); + } else { + System.err.println("I think you have: " + DB_NAMES[myVersion]); + } + + System.err.println(); + dumpSpecificInstructions(CONFIG_UNIX[myVersion]); + dumpSpecificInstructions(CONFIG_GENERAL); + } + + private static void configWindows() { + System.err.println("I think you're on Win32"); + + int myVersion = probeLib(WIN32); + + if (myVersion == -1) { + System.err.println("Couldn't locate Db :("); + System.err.println("Are the Db .dll's on PATH?"); + System.exit(0); + } else { + System.err.println("I think you have: " + DB_NAMES[myVersion]); + } + + System.err.println(); + dumpSpecificInstructions(CONFIG_WIN32[myVersion]); + dumpSpecificInstructions(CONFIG_GENERAL); + } + + private static String getLibName(String aMajor, String aMinor, + int aPlatform) { + + switch(aPlatform) { + case OS_X : { + return System.getProperty(DB_PROP); + } + + case WIN32 : { + return "libdb_java" + aMajor + aMinor; + } + + case UNIX : { + return "db_java-" + aMajor + "." + aMinor; + } + + default : { + throw new RuntimeException("Not a platform"); + } + } + } + + private static int probeLib(int aPlatform) { + if (aPlatform == OS_X) { + String myLib = System.getProperty(DB_PROP); + + if (libraryPresent(myLib, OS_X)) { + if (myLib.indexOf("db_java-4.1") != -1) + return DB_VERSION_CODE[0]; + else + return DB_VERSION_CODE[1]; + } + } else { + for (int i = 0; i < DB_VERSIONS.length; i++) { + String myLibName; + + myLibName = getLibName(DB_VERSIONS[i][0], DB_VERSIONS[i][1], + aPlatform); + + if (libraryPresent(myLibName, aPlatform)) + return DB_VERSION_CODE[i]; + } + } + + return -1; + } + + private static boolean libraryPresent(String aLibName, int aPlatform) { + try { + if (aPlatform == OS_X) { + System.load(aLibName); + } else { + System.loadLibrary(aLibName); + } + } catch (UnsatisfiedLinkError aULE) { + return false; + } + + return true; + } +}