Thanks Chris! Your solution actually works pretty well and seems elegant enough. Let me know when you have the plug-in done. I'd like to blog about it and how I used it in my app.
Shane On 7/22/07, Chris Nelson <[EMAIL PROTECTED]> wrote: > Shane, > > I think it's probably going to be a lot easier to take an approach like I > did and use a metaprogramming approach to add your Spring beans into your > controllers than it is going to be to have Spring inject into your Rails > code This is the approach I'm planning for my Spring Rails plugin to take. > Check out my blog post for details and example code: > http://mysterycoder.blogspot.com/2007/06/include-spring.html > > HTH, > > --Chris > > > On 7/22/07, Shane Witbeck <[EMAIL PROTECTED]> wrote: > > > > I'm putting together a proof of concept application where I'd like to > > elegantly inject Spring beans on Rails controllers. I successfully got > > an instance of the Spring applicationContext using > > WebApplicationContextUtils and the servlet_context introduced by Chris > > Nelson. I'm now defining the Rails controller in the Spring context > > and trying to inject a Java bean into it. > > > > Here's what I have so far: > > > > ----> in applicationContext.xml: > > > > <lang:jruby id="booksController" > > > script-interfaces="com.digitalsanctum.jrubyprototype.jruby.BookStoreAware" > > > script-source="/app/controllers/books_controller.rb"> > > <lang:property name="bookStore" ref="bookStore"/> > > </lang:jruby> > > > > > > ----> in books_controller.rb: > > > > require 'java' > > > > #include_class > 'org.springframework.web.context.support.WebApplicationContextUtils' > > include_class > 'com.digitalsanctum.jrubyprototype.domain.logic.BookStore ' > > > > class BooksController < ApplicationController > > > > def setBookStore(bookStore) > > @@bookStore = bookStore > > end > > > > def list > > # @book_pages, @books = paginate :books, :per_page => 10 > > logger.info("reached list") > > # ctx = > WebApplicationContextUtils.getWebApplicationContext($servlet_context); > > # bookStore = ctx.getBean("bookStore"); > > > > logger.info(@@bookStore) > > end > > > > ... > > end > > > > > > ----> Here's the exception: > > > > org.springframework.beans.factory.BeanCreationException: > Error > > creating bean with name 'scriptedObject.booksController': > > Instantiation of bean failed; nested exception is > > > org.springframework.beans.factory.BeanDefinitionStoreException: > > Factory method [public java.lang.Object > > > org.springframework.scripting.jruby.JRubyScriptFactory.getScriptedObject(org.springframework.scripting.ScriptSource > ,java.lang.Class[]) > > throws > java.io.IOException,org.springframework.scripting.ScriptCompilationException] > > threw exception; nested exception is > > org.springframework.scripting.ScriptCompilationException: > Could not > > compile JRuby script [ServletContext resource > > [/app/controllers/books_controller.rb]]: uninitialized > constant > > ApplicationController; nested exception is > > org.jruby.exceptions.RaiseException > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean > (AbstractAutowireCapableBeanFactory.java:435) > > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:255) > > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton > (DefaultSingletonBeanRegistry.java:156) > > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:252) > > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean > (AbstractBeanFactory.java:164) > > at > org.springframework.scripting.support.ScriptFactoryPostProcessor.postProcessBeforeInstantiation(ScriptFactoryPostProcessor.java:284) > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInstantiation > (AbstractAutowireCapableBeanFactory.java:673) > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:373) > > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject > (AbstractBeanFactory.java:255) > > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156) > > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean > (AbstractBeanFactory.java:252) > > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) > > at > org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons > (DefaultListableBeanFactory.java:303) > > at > org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:689) > > at > org.springframework.context.support.AbstractApplicationContext.refresh > (AbstractApplicationContext.java:358) > > at > org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244) > > at > org.springframework.web.context.ContextLoader.initWebApplicationContext > (ContextLoader.java:187) > > at > org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49) > > at > org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java > :3764) > > > > > > I realize this is a Spring exception but I'm guessing this list would > > have a better idea of what's going on rather than a Spring mailing > > list. Looking at the exception, it seems like Spring isn't aware of > > the Rails superclass ApplicationController but I'm not sure of the > > best way to handle this. > > > > Any guidance is appreciated. > > > > -- > > Thank you, > > > > Shane Witbeck > > Digital Sanctum, inc. > > ----------------------------------------------------- > > skype: digitalsanctum > > blog: http://www.digitalsanctum.com > > _______________________________________________ > > Jruby-extras-devel mailing list > > [email protected] > > http://rubyforge.org/mailman/listinfo/jruby-extras-devel > > > > > _______________________________________________ > Jruby-extras-devel mailing list > [email protected] > http://rubyforge.org/mailman/listinfo/jruby-extras-devel > -- Thank you, Shane Witbeck Digital Sanctum, inc. ----------------------------------------------------- skype: digitalsanctum blog: http://www.digitalsanctum.com _______________________________________________ Jruby-extras-devel mailing list [email protected] http://rubyforge.org/mailman/listinfo/jruby-extras-devel
