You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@buildr.apache.org by Victor Hugo Borja <vi...@gmail.com> on 2008/03/05 20:58:45 UTC
Buildr's nailgun server running on JRuby
Hi all,
Just to tell you Buildr trunk now provides nailgun tasks when running within
JRuby.
Testers/comments are more than welcome.
--- Current nailgun documentation follows ---
Using BuildrServer(Buildr 1.3.0 (JRuby 1.1RC2), localhost, 2113)
NailGun is a client, protocol, and server for running Java
programs from the command line without incurring the JVM
startup overhead. Nailgun integration is currently available
only when running Buildr with JRuby.
Buildr provides a custom nailgun server, allowing you to
start a single JVM and let buildr create a queue of runtimes.
These JRuby runtimes can be cached (indexed by buildfile path)
and reloaded when the buildfile has been modified.
Runtime caching allows you to execute tasks without
spending time creating the buildr environment. Some nailgun
tasks have been provided to manage the cached runtimes.
To start the buildr server execute the ng:start task.
Configuration and Environment Variables.
Before starting the server, buildr will check if you have
nailgun already installed by seeking the nailgun jar under
$NAILGUN_HOME
You can override this environment variable to tell buildr where
to find or where to install nailgun. If missing, NAILGUN_HOME
defaults to the $JRUBY_HOME/tools/nailgun directory. You can
also specify the nailgun_home on your buildfile with the following
code:
require 'java/nailgun'
Buildr::Nailgun.home = File.expand_path('~/.jruby/tools/nailgun')
Buildr will also check that the nailgun client binary (ng.exe for
Windows systems, ng otherwise) is installed on NAILGUN_HOME.
If no binary is found, buildr will download nailgun and
compile+install it.
The buildr server binds itself to localhost, port 2113. You can
override this on your buildfile, by placing the following code:
require 'java/nailgun'
Buildr::Nailgun.server = '127.0.0.1'
Buildr::Nailgun.port = 2233
Once started, if you provided custom host/port settings you need
to tell the nailgun client where to connect to:
ng --nailgun-server 127.0.0.1 --nailgun-port 2233 ng:tasks
The buildr server starts a BuildrFactory responsible for providing
a pool of JRuby runtimes configured and ready for task execution.
This BuildrFactory consists of two queues: One of pure JRuby runtimes
with almost nothing loaded, and another of Buildr runtimes (consumed
from the first queue) with the Buildr runtime preloaded but without
any project definition. The jruby queue is used for sandboxing code
like running GetoptLong, but most importantly its the place where
buildr runtimes begin life, to be later added on the buildr queue.
By default both queues are of size 3, you can customize this with:
require 'java/nailgun'
Buildr::Nailgun.jruby_queue_size = 4 # JRuby creation is fast!
Buildr::Nailgun.buildr_queue_size = 5 # loading buildr takes longer
The buildr_queue_size is of particular importance if you expect to
reload lots of buildfiles.
Execute ng:tasks get an overview of available nailgun tasks.
Nailgun tasks:
ng:help
Display nailgun help
ng:start
Start the Nailgun server.
ng:stop
Stop the Nailgun server.
ng:tasks
Display this message
ng:list
Display a list of builfile paths having an associated
buildr runtime. Having a cached runtime reduces buidlr
execution time.
If buildr finds the current buildfile on this list,
no file loading will be performed, only execution of
specified tasks on the previously loaded environment.
However if the cached runtime is out of date (buildfile
has been modified) the runtime will be reloaded.
This feature becomes handy when performing development
cycle: edit -> compile -> test -> report.
This task exits inmediatly after printing the file list.
ng:clear
Remove all cached buildr runtimes and exit
ng:add [tasks] | ng:put [tasks]
Add or update a cached runtime.
Use this task to create a cached buildr runtime for a
buildfile.
ng:del | ng:delete
Delete cached runtime for a buildfile and exit.
ng:once [tasks]
Ignore cached runtime and perform tasks on a newly
created environment. This new runtime is dropped right
after buildr completion.
--
vic
Quaerendo invenietis.
Re: [Nailgun-users] Buildr's nailgun server running on JRuby
Posted by Victor Hugo Borja <vi...@gmail.com>.
Charlie,
On Wed, Mar 5, 2008 at 2:33 PM, Charles Oliver Nutter <
charles.nutter@sun.com> wrote:
> Wow, cool. Have you looked at what we provide in JRuby proper? Basically
> if you pull JRuby sources and "ant jruby-nailgun" you can use a
> jruby-ng-server and jruby-ng commands to run JRuby as normal.
>
Yeah, I know of jruby-nailgun, however I think most jruby users would
normally download the
standard jruby binary distribution ( I currently have 1.1RC2 ) and it comes
without nailgun.
Anyway, that's why buildr's default NAILGUN_HOME points to
$JRUBY_HOME/tools/nailgun, so that
if buildr finds nailgun jar/executable already there, it wont
download/compile/install nailgun.
> There seems to be some overlap...so we should figure out how to share
> some code going forward.
>
I also read JRuby's nail code :)
Buildr implements a custom nailgun server, and a queue of jruby runtimes, so
when a nail-client
connects, it just takes an already initialized (preloaded buildr with all
required gems) runtime and
just executes the tasks. Best of all it's all in ruby, and uses lots of
JRuby's features.
Here's the current implementation if you want to take a look, the
BuildrNail, BuildrServer, BuildrFactory
classes are the most relevant:
http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/java/org/apache/buildr/BuildrNail.java?view=markup
http://svn.apache.org/viewvc/incubator/buildr/trunk/lib/java/nailgun.rb?view=markup
Cheers,
--
vic
Quaerendo invenietis.