-
Ruby on Rails + CDI? Why not! Enter TorqueBox + Weld
Posted on July 27th, 2010 1 commentI 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
.ymlfile using the providedraketasks 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
@SessionScopedbeans 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 ajboss-classloading.xmlfile to theMETA-INFdirectory 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.xmlin 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
@SessionScopedbeans 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 theBeanManager.Adam

