Friday Mar 14, 2008

Steps to recreate GlassFish v3 gem v0.1.2

Steps to build GlassFish v3 gem v0.1.2

This blog details the steps to be followed if you plan to build the GlassFish V3 gem 0.1.2 gem.

Build Steps :

    cd "SomeDirForGem"
    svn checkout --revision=18807 
        https://svn.dev.java.net/svn/glassfish-svn/trunk/v3 --username guest
    cd v3
    mvn -U install

    cd distributions/gem
    mvn install 
Technically one should be able to just get the v3 gem and build it and jruby stuff should work. But just to be on the safe side I am providing the revision number so that svn would checkout and build the same bits that I have used when publishing the gem.
At the end of the steps, mentioned above you would have the gem created and available at :
    SomeDirForGem/v3/distributions/gem/target/dependency/glassfish/pkg/glassfish-0.1.2-universal-java-1.5.gem
To use this gem with your JRuby installation :
jruby -S gem install
SomeDirForGem/v3/distributions/gem/target/dependency/glassfish/pkg/glassfish-0.1.2-universal-java-1.5.gem 
(to install the gem for the first time)

OR
jruby -S gem update
SomeDirForGem/v3/distributions/gem/target/dependency/glassfish/pkg/glassfish-0.1.2-universal-java-1.5.gem 
(to update an existing glassfish gem)

Code layout Information :

In V3 land the code related to the JRuby interaction can be found under v3/extras/rails directory. This code layer is a wrapper and eventually delegates to the JRuby module, obtained from the Grizzly project. There have been questions asked on why the code is not in one place. The best way that I can answer this question is is by stating that the initial support for JRuby was provided as part of the Grizzly - JRuby module. This code predates the V3 activity. With the modular design of V3 it is easy to drop in a module and have V3 server support the new module. Hence to support JRuby in V3 the decision was made to use the JRuby module from Grizzly.

One task that was carried out before releasing the gem v0.1.2, was to move the jruby code from the module's area to the contribs area of Grizzly. The main reason to do this was to ensure that releases of the grizzly-jruby module could be done independent of grizzly releases. Also each release of the gem version would have a corresponding grizzly-jruby module released to the maven repository. This would make it easier to regenerate the code that was used to create and publish the gem at RubyForge.
For the gem v0.1.2 the V3 code gets the corresponding grizzly-jruby module as part of the build cycle and packages it into the gem.

For those of you who would like to checkout and build the grizzly-jruby module :
   svn checkout 
       https://grizzly.dev.java.net/svn/grizzly/trunk/contribs/jruby 
       --username guest
   cd jruby
   mvn install
At this point of time after the successful execution of this steps you would have grizzly-jruby-0.1.2.jar, published to your local maven repository (~/.m2/repository). If you now build the v3 gem, it would use your newly created module.

Thursday Mar 13, 2008

GlassFish V3 gem v0.1.2 for JRuby at Rubyforge

GlassFish v3 gem v0.1.2 for JRuby at RubyForge

In my previous blog I had informed you all of the release of GlassFish v3 gem v0.1.1. Today I am announcing the release of GlassFish V3 gem 0.1.2.

Issues addressed in v0.1.2 :

The last released gem (v0.1.1) contained that bugs that were reported by users on the GlassFish Issue tracker and RubyForge Tracker. This release deals with those bugs.

These 3 bugs followed the same pattern and was a tricky one to isolate and solve for me. Would like to thank Thomas Enebo of the JRuby core team for his help in isolating the root cause of these issues.

Another bug that has been fixed as part of this gem release is - Blank page returned if there are no Rails instances available. From this release on the requests would not be rejected if there are no rails instances available to satisfy them.
Based on comments from Thomas Enebo, have changed the way we were processing requests as part of the gem. In the previous releases of the gem, for each request we were causing the request to be parsed before actually executing it. This obviously was increasing the time taken for each request. Have fixed this as part of this release.

From this release of the gem, you would be able to checkout and build the gem. This was a request that many users had made and this is the reason why the release of the gem was delayed by a couple of weeks. I will publish a blog shortly detailing information on how to build the gem from the GlassFish V3 source.

Continue to use Glassfish Issue Tracker, JRuby JIRA and RubyForge to post issues/comments about the gem.

Installation:

If you have installed the previous version of the gem please uninstall the gem using the command
    jruby -S gem uninstall GlassFish
Install the new version of the gem using the command :
    jruby -S gem install glassfish

Output from executing the "ab" command using the old v0.1.1 and the new v0.1.2 glassfish :
I have used "ab" on my Macbook pro, to compare the performance between then 2 latest versions of the gem - v0.1.1 and v0.1.2. These tests were done using the release JRuby 1.1RC2 bits with Rails 2.0.2. The sample that I have used is a very simple HelloWorld, so it is no reflective of the typical user application. Would be great to hear back from users about the performance that you are seeing with your application.

With gem v0.1.1 :
    pramod-gopinaths-computer:~ pramodgopinath$ ab -c 1 -n 100000 http://localhost:3000/test/hello
    This is ApacheBench, Version 1.3d <$Revision: 1.73 $> apache-1.3
    Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

    Benchmarking localhost (be patient)
    Completed 10000 requests
    Completed 20000 requests
    Completed 30000 requests
    Completed 40000 requests
    Completed 50000 requests
    Completed 60000 requests
    Completed 70000 requests
    Completed 80000 requests
    Completed 90000 requests
    Finished 100000 requests
    Server Software:        Grizzly/1.6                                       Server Hostname:        localhost
    Server Port:            3000

    Document Path:          /test/hello
    Document Length:        68 bytes

    Concurrency Level:      1
    Time taken for tests:   2088.982 seconds
    Complete requests:      100000
    Failed requests:        0
    Broken pipe errors:     0
    Total transferred:      53100000 bytes
    HTML transferred:       6800000 bytes
    Requests per second:    47.87 [#/sec] (mean)
    Time per request:       20.89 [ms] (mean)
    Time per request:       20.89 [ms] (mean, across all concurrent requests)
    Transfer rate:          25.42 [Kbytes/sec] received

    Connnection Times (ms)
                 min  mean[+/-sd] median   max
    Connect:        0     0   15.4      0  2993
    Processing:    19    20   11.5     20  1482
    Waiting:       19    20   11.5     19  1481
    Total:         19    20   19.2     20  3023

    Percentage of the requests served within a certain time (ms)
     50%     20
     66%     20
     75%     20
     80%     20
     90%     22
     95%     23
     98%     23
     99%     24
    100%   3023 (last request)

With gem v0.1.2 :
    $ ab -c 1 -n 100000 http://localhost:3000/test/hello
    This is ApacheBench, Version 1.3d <$Revision: 1.73 $> apache-1.3
    Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

    Benchmarking localhost (be patient)
    Completed 10000 requests
    Completed 20000 requests
    Completed 30000 requests
    Completed 40000 requests
    Completed 50000 requests
    Completed 60000 requests
    Completed 70000 requests
    Completed 80000 requests
    Completed 90000 requests
    Finished 100000 requests
    Server Software:        Grizzly/1.7                                       Server Hostname:        localhost
    Server Port:            3000

    Document Path:          /test/hello
    Document Length:        68 bytes

    Concurrency Level:      1
    Time taken for tests:   440.712 seconds
    Complete requests:      100000
    Failed requests:        0
    Broken pipe errors:     0
    Total transferred:      53100000 bytes
    HTML transferred:       6800000 bytes
    Requests per second:    226.91 [#/sec] (mean)
    Time per request:       4.41 [ms] (mean)
    Time per request:       4.41 [ms] (mean, across all concurrent requests)
    Transfer rate:          120.49 [Kbytes/sec] received

    Connnection Times (ms)
                 min  mean[+/-sd] median   max
    Connect:        0     0   17.6      0  2852
    Processing:     3     4   10.4      3  1270
    Waiting:        3     4   10.4      3  1270
    Total:          3     4   20.4      3  2858

    Percentage of the requests served within a certain time (ms)    
     50%      3
     66%      3
     75%      3
     80%      3
     90%      4
     95%      4
     98%      7
     99%      7
    100%   2858 (last request)



Resources :
GlassFish JRuby wiki
JRuby wiki
About

pramodg

Search

Categories
Archives
« July 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  
       
Today