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:
1 2 3 4 5 6
<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:
1 2 3 4 5
<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