Jason Dillon wrote: > So, is this something that I should pursue? I've seen a few positive > comments on this functionality, nothing negative... > > Should I invest more time in making this feature complete and set it up > as the default system for launching the server?
Yes! > > --jason > > > On Aug 21, 2007, at 3:05 PM, Jeff Genender wrote: > >> Oh man this is sweet... >> >> I'd *really* like to see this in 2.0.2... >> >> Jeff >> >> Jason Dillon wrote: >>> Hiya folks, I finally got around to finishing up my POC of using GShell >>> to launch the Geronimo Server and I have committed the bits that make it >>> work to server/trunk. The new module which contains the GShell command >>> implementation (and support) classes is: >>> >>> modules/geronimo-commands >>> >>> And a new assembly which has the GShell bits all in place for folks to >>> test with is: >>> >>> assemblies/geronimo-jetty6-javaee5-gshell >>> >>> The assembly is not hooked up by default, but the code module is. So, >>> to test it out, you need to do something like: >>> >>> svn co https://svn.apache.org/repos/asf/geronimo/server/trunk server >>> cd server >>> mvn >>> assemblies/geronimo-jetty6-javaee5-gshell >>> mvn >>> >>> Then unzip the assembly: >>> >>> unzip target/geronimo-jetty6-javaee5-gshell-2.1-SNAPSHOT-bin.zip >>> >>> And then finally try it out. First lets get the basic GShell >>> command-line help: >>> >>> ./geronimo-jetty6-javaee5-gshell-2.1-SNAPSHOT/bin/gsh --help >>> >>> This should spit out something like: >>> >>> <snip> >>> ____ ____ _ _ _ >>> / ___/ ___|| |__ ___| | | >>> | | _\___ \| '_ \ / _ \ | | >>> | |_| |___) | | | | __/ | | >>> \____|____/|_| |_|\___|_|_| >>> >>> GShell -- Geronimo command-line shell >>> >>> usage: gsh [options] <command> [args] >>> -n,--non-interactive Run in non-interactive mode >>> -D,--define <name=value> Define a system property >>> -V,--version Display GShell version >>> -c,--commands <string> Read commands from string >>> -debug,--debug Enable DEBUG logging output >>> -h,--help Display this help message >>> -i,--interactive Run in interactive mode >>> -quiet,--quiet Limit logging output to ERROR >>> -verbose,--verbose Enable INFO logging output >>> </snip> >>> >>> Then lets run the interactive-shell: >>> >>> ./geronimo-jetty6-javaee5-gshell-2.1-SNAPSHOT/bin/gsh >>> >>> This should leave you at a very plain prompt at the moment: >>> >>> <snip> >>>> _ >>> </snip> >>> >>> At this point you can type something like this to list all of the known >>> commands: >>> >>> <snip> >>> help commands >>> </snip> >>> >>> Which should spit back: >>> >>> <snip> >>> Available commands (and aliases): >>> start-server ( start ) >>> set >>> exit ( quit, bye ) >>> unset >>> source >>> help >>> </snip> >>> >>> The command that I added is called 'start-server', with an alias of >>> 'start'. This is basically an augmented and enhanced version of what >>> the geronimo:start-server goal does in the geronimo-maven-plugin. To >>> see its options run this: >>> >>> <snip> >>> start-server --help >>> </snip> >>> >>> And it says: >>> >>> <snip> >>> start-server -- Starts a new Geronimo server instance >>> >>> usage: start-server [options] >>> -A,--javaagent <jar> Use a specific Java Agent, set to >>> 'none' to >>> disable >>> -D,--property <name=value> Set a system property >>> -H,--home <dir> Use a specific Geronimo home directory >>> -J,--javaopt <option> Set a JVM flag >>> -b,--background Run the server process in the >>> background. >>> -h,--help Display this help message >>> -j,--jvm <dir> Use a specific Java Virtual Machine >>> for server >>> process >>> -l,--logfile <file> Capture console output to file >>> -m,--module <name> Start up a specific module by name. >>> -q,--quiet Suppress informative and warning >>> messages >>> -t,--timeout <seconds> Specify the timeout for the server >>> process in >>> seconds >>> -v,--verbose Enable verbose output; specify >>> multipule times >>> to increase verbosity. >>> </snip> >>> >>> NOTE: Use -vv for --veryverbose ;-) >>> >>> And then give it a whirl and try to start the server up from the shell: >>> >>> <snip> >>> start-server >>> </snip> >>> >>> or if you prefer more output: >>> >>> <snip> >>> start-server -v >>> </snip> >>> >>> And so on... >>> >>> This will actually create a newly forked JVM to run the server in, and >>> will eventually have a robust node manager thingy, but I've not done >>> that yet ;-) >>> >>> The platform scripts are now super simple!!! All of the logic is now in >>> the command implementation. And eventually we can probably have the >>> geronimo-maven-plugin just invoke the command so that *everything* uses >>> the exact same method for launching the server process. >>> >>> * * * >>> >>> As requested by Jeff, I added support to read in some scripts to augment >>> the launching of the server... so that plugins can add properties and >>> such easily. Right now this is the directory which is inspected for >>> scripts: >>> >>> etc/rc.d >>> >>> And currently the scripts need to be named like this: >>> >>> <command-name>,<custom>.groovy >>> >>> I've created a default one for you to look at: >>> >>> etc/rc.d/start-server,default.groovy >>> >>> Which simply sets the max heap size to 512m: >>> >>> <snip> >>> command.javaFlags << '-Xmx512m' >>> </snip> >>> >>> When running the start-server command (or its aliases) all of the >>> etc/rc.d/start-server,*.groovy scripts are run (if any) before the >>> process is launched to allow the command.properties, command.javaFlags >>> and other bits to be augmented. >>> >>> These are Groovy scripts so you can also execute any arbitrary logic to >>> perform more complex setup muck if needed. >>> >>> * * * >>> >>> For now I just dropped all of the jars required for this into lib/gshell >>> and left lib/* alone, since the command uses the normal invoke of java >>> -jar server.jar and it requires bits in lib/* to work. Though we may >>> eventually want to setup the server.jar to use a classpath into >>> repository/* and then leave the lib/* only for the core launcher and >>> bits at some point in the near future. >>> >>> This adds about ~4m to the assembly at the moment, though I've not tried >>> to reduce this much, but I'm sure it can be done to reduce foot print. >>> Some may be to simply have the GShell loader pull bits from the >>> repository and/or shading jars to only include what is really needed. >>> But I'm going to leave that for later. >>> >>> Also, we can probably also convert all of the other cli tools into >>> GShell commands too, which will further simplify the platform scripts >>> and keep things uniform, and also a wee bit easier to standardize >>> testing off too ;-) >>> >>> In the assembly I left most of the scripts as they were, except for >>> startup* and added gsh*. The gsh* scripts are the main scripty bits, >>> but they are very simple. And the new startup* scripts are simply >>> delegates to gsh to invoke the "start-server" command. >>> >>> * * * >>> >>> Anyways, enough for now... please take a look, ask questions, comment, >>> whatever. I hope we can start an easy dialog about how we can make this >>> basic style of launching and cli muck the standard for 2.1. >>> >>> Cheers, >>> >>> --jason >>> >>>