Java and JBoss related stuff
RSS icon Home icon
  • Ruby on Rails + CDI? Why not! Enter TorqueBox + Weld

    Posted on July 27th, 2010 Adam Warski 1 comment

    I guess many people are often “unsatisfied” with how JSF works and how much time it sometimes takes to do a simple thing. That’s why we are trying out a new combination: RoR for the frontend and CDI for the backend. How?

    Deploying RoR applications to JBoss AS is really easy thanks to the TorqueBox project. You just deploy a .yml file using the provided rake tasks and you can develop the application “live” – no redeploys, instant changes, and so on.

    Using RoR as a frontend to a CDI/Weld based application requries two more steps, so that RoR can see the business logic classes and share the same http session with CDI (so it’s possible to access @SessionScoped beans from RoR and CDI code).

    First you need to deploy your application in the DefaultDomain (at least until TORQUE-85 is fixed). To do this, add a jboss-classloading.xml file to the META-INF directory with this content:

    
    <classloading xmlns="urn:jboss:classloading:1.0"
                  domain="DefaultDomain"
                  top-level-classloader="true"
                  export-all="NON_EMPTY"
                  import-all="true">
    </classloading>
    

    Secondly, you need to add a filter to RoR’s web application, so that Weld and RoR share the same session. Just edit config/web.xml in your RoR application (the magic in the RoR deployer will add it to the virtual .war deployment it creates) and add the following:

    
    <web-app>
        <listener>
            <listener-class>org.jboss.weld.servlet.WeldListener</listener-class>
        </listener>
    </web-app>
    

    Now RoR and CDI share the same session (so you can use @SessionScoped beans etc, probably also @ConversationScoped, but I haven’t tried that). You can lookup CDI beans from RoR code using e.g. the BeanInject class from cdi-ext, or just by writing a very simple utility method which lookups the BeanManager.

    Adam

     

    1 responses to “Ruby on Rails + CDI? Why not! Enter TorqueBox + Weld” RSS icon

    • Wow, an actual real life jboss-classloading.xml usage with RoR app.
      Never thought I’ll see this in my lifetime. :-)


    Leave a reply