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

Reply via email to