The Source for Java Technology Collaboration
User: Password:



Vivek Pandey's Blog

J2EE Archives


JRuby Module 3.0 for for GlassFish v2 is out

Posted by vivekp on May 03, 2008 at 01:11 AM | Permalink | Comments (1)

JRuby Update Center module 3.0 for GlassFish v2 is out. It has been tested to work with GlassFish v2 UR2. The Update Center modules provide out of the box tested-on-GlassFish version of JRuby, Rails and other required gems. For the GlassFish users it is very convinient just install the JRuby module from the GlassFish update center and start writing the Rails applications.

Here are some details on this release of Update Centner Modules:

It is a major upgrade from the previous 2.1 version which came with JRuby 1.0.3 and Rails 1.2.6. The major upgrade comes in forms of JRuby version 1.1.1, Rails version 2.0.2 and Warbler. You can use Warbler to create a WAR of the Rails application on GlassFish v2. The UC module also provides ant scripts for shared mode, where JRuby and Goldspike jars are installed on Glassfish v2 and you don't have to package any of these jars and the gems with JRuby. This will result in to smaller Rails applications compared to the WAR files created by Warbler.

Rails 2.0.2 is not backward compatible with Rails 1.2.6 so samples form the previous JRuby UC module will not work on this new ver 3.0.

JRuby and installed gem versions

  • JRuby 1.1.1
  • gems
  • actionmailer (2.0.2)
    actionpack (2.0.2)
    activerecord (2.0.2)
    activerecord-jdbc-adapter (0.8)
    activerecord-jdbcmysql-adapter (0.8)
    activeresource (2.0.2)
    activesupport (2.0.2)
    jdbc-mysql (5.0.4)
    rails (2.0.2)
    rake (0.8.1)
    rspec (1.1.3)
    sources (0.0.1)
    warbler (0.9.5)
                

Installing JRuby UC Module 3.0

To install, cd to your GlassFish installation, and run

./updatecenter/bin/updatetool
. This will bring the window below:

gfv2-jruby-uc.png

Select JRuby On GlassFish checkbox and click Install. After it finishes, it will create jruby director inside the GlassFish installation.

lsjruby.png

Run HelloWorldRailsApp sample

  • Start GlassFish v2
    asadmin start-domain
                    
  • Inside your GlassFish installation,
    cd jruby/samples/HelloWorldRailsApp
  • Create a WAR file HelloWorldRailsApp.war by running warbler
    JRuby -S warble
  • Now Deploy the war file
    asadmin deploy HelloWorldRailsApp.war
  • Access http://localhost:8080/HelloWorldRailsApp/say/hello in your browser.

Above Warbler was used to create a standalone WAR file. Warbler packages all the required JARs and gems in the the WAR file resulting in to large WAR size. You can as well use setup-shared-env target from jruby/build.xml from inside the GlassFish installation. This will copy JRuby and Goldspike jars in to glassfish/lib directory. After this instead of running Warlbe, simply run create-shared target inside the application this will create WEB-INF/web.xml inside your Rails application. At the end simply run asadmin deploy yourRailsApp. For details see GLASSFISH_README.txt inside the samples.

Continue sending your feedback to the GlassFish WebTier forum or to the mailing list. Report any bugs to the IssueTracker

Embedding GlassFish v3 with Grails

Posted by vivekp on May 01, 2008 at 04:52 PM | Permalink | Comments (3)

In my blog on running Grails application on GlassFish v3, I need to create a war of my application and then deploy that war. This was a serious bottleneck in my development process as I wanted to test it out this application on GlassFish v3.

I really wanted to run my Grails application with GlassFish v3 as embedded server in the same fashion as running grails run-app, that is without creating a war file and to speed up my development. By default Grails uses Jetty web server to run the applications. But I wanted to use V3, it is very modular, extensible and embeddable and and is going to allow me to get the JavaEE features that I may like to use at some point in time. One possible way was that GlassFish v3 is an OSGi container and if Grails has an OSGi container I could easily replace jetty with v3. So I mentioned this problem to Kohsuke and came to know that he is working on GlassFish v3 embed APIs. So I gave it a try and guess what? It was darn simple to write few lines of groovy script to get it embedded with Grails and run my application.

Here is the groovy script that starts GlassFish v3 server and deploys the grails application. Please note that the API is using scattered war in literal sense - there is no WAR file structure here.

    appName = new File("${grailsAppName}");
    webxml = new File(webXmlFile.absolutePath)
    resource = new File("${basedir}/web-app")
    ScatteredWar war = new ScatteredWar(
                "${grailsAppName}",
                resource,
                webxml,
                Collections.singleton(new File(appName, classesDir.getAbsolutePath()).toURI().toURL()))

    grailsServer = new GlassFish(serverPort)/a>
    grailsApp = grailsServer.deploy(war)
        

I called this script RunaAppGf.groovy and after adding V3 Embed API and other v3 dependent jars (web-all.jar) to the Grails classpath, copied it to $GRAILS_HOME/script directory. With this I was ready to run my grails app and so I did by invoking grails run-app-gf inside my grails application directory.

vivekmz@boson(653)> grails run-app-gf

Welcome to Grails 1.0.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /tools/grails

Base Directory: /myhome/vivekmz/dev/grails/hello
Environment set to development
Note: No plugin scripts found
Running script /tools/grails/scripts/RunAppGf.groovy
Starting GlassFish embedded server...Running Grails application..
Application name : hello
Web App Root :/myhome/vivekmz/dev/grails/hello/web-app
web.xml:/myhome/vivekmz/.grails/1.0.1/projects/hello/resources/web.xml
May 1, 2008 1:46:45 PM com.sun.enterprise.v3.server.AppServerStartup run
INFO: HK2 initialized in 380 ms
May 1, 2008 1:46:45 PM com.sun.enterprise.v3.server.AppServerStartup run
INFO: com.sun.enterprise.naming.impl.ServicesHookup@304648 Init done in 391 ms
May 1, 2008 1:46:45 PM com.sun.enterprise.v3.server.AppServerStartup run
INFO: com.sun.enterprise.v3.server.Globals@6c9f0f Init done in 393 ms
May 1, 2008 1:46:45 PM com.sun.enterprise.v3.server.AppServerStartup run
INFO: com.sun.enterprise.v3.server.SystemTasks@1cdc190 Init done in 400 ms
May 1, 2008 1:46:45 PM com.sun.enterprise.v3.server.AppServerStartup run
INFO: com.sun.enterprise.v3.services.impl.HouseKeeper@d9b071 Init done in 403 ms
May 1, 2008 1:46:45 PM com.sun.enterprise.v3.server.AppServerStartup run
INFO: com.sun.enterprise.v3.services.impl.CmdLineParamProcessor@19f9c7a Init done in 407 ms
JMXMP connector server URL = service:jmx:jmxmp://localhost:8888
May 1, 2008 1:46:45 PM com.sun.enterprise.v3.services.impl.GrizzlyProxy start
INFO: Listening on port 8080
May 1, 2008 1:46:45 PM com.sun.enterprise.v3.server.AppServerStartup run
INFO: com.sun.enterprise.v3.services.impl.GrizzlyService@3a4822 startup done in 718 ms
May 1, 2008 1:46:45 PM com.sun.enterprise.v3.services.impl.ApplicationLoaderService postConstruct
INFO: loader service postConstruct started at 1209678405813
May 1, 2008 1:46:45 PM com.sun.enterprise.v3.server.AppServerStartup run
INFO: Application Loader startup done in 764 ms
May 1, 2008 1:46:45 PM com.sun.enterprise.v3.server.AppServerStartup run
INFO: Glassfish v3 started in 765 ms
May 1, 2008 1:46:51 PM com.sun.enterprise.web.WebModuleContextConfig authenticatorConfig
SEVERE: webModuleContextConfig.missingRealm
[0] commons.DefaultGrailsApplication The class [UrlMappings] was not found when attempting to load Grails application. Skipping.
[3] commons.DefaultGrailsApplication The class [Config] was not found when attempting to load Grails application. Skipping.
[5] commons.DefaultGrailsApplication The class [BootStrap] was not found when attempting to load Grails application. Skipping.
[8] commons.DefaultGrailsApplication The class [DataSource] was not found when attempting to load Grails application. Skipping.
[10] commons.DefaultGrailsApplication The class [resources] was not found when attempting to load Grails application. Skipping.
[1426] spring.GrailsWebApplicationContext Refreshing org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@1e5052b: display name [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@1e5052b]; startup date [Thu May 01 13:46:53 GMT-08:00 2008]; parent: org.springframework.web.context.support.XmlWebApplicationContext@13cb2c6
[1426] spring.GrailsWebApplicationContext Bean factory for application context [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@1e5052b]: org.springframework.beans.factory.support.DefaultListableBeanFactory@192974
Server running. Browse to http://localhost:8080/hello
    

The next steps are really to provide the required V3 jars, V3 Embed Jars and this script as a bundle so that you can easily install over the Grails installation and enjoy modularity, extensibility and embeddability of GlassFish v3. I plan to talk about it more during JavaOne and Kohsuke and me are trying to see if we could have something ready in another day or so.





Powered by
Movable Type 3.01D
 Feed java.net RSS Feeds