in your  Resource file:

@Override
   public void init(Context context, Request request, Response response) {
       super.init(context, request, response);
 ...
 }

If you mean in the Finder:

   @Override
   public Resource createResource(Request request, Response response) {
       Resource result = createResource();

       if (result != null) {
           result.init(getContext(), request, response);
       }

       return result;
   }

The new org.restlet.ext.spring.SpringFinder class has this all setup for you.

Jonathan

Makunas, Michael wrote:
Hi-

Been lurking for a while but this is my first post so forgive my newbieness....

With solution 2, how do you call the init() method on the resource in such a 
way that it is aware of the restlet context?

Cheers,
Michael

-----Original Message-----
From: Jerome Louvel [mailto:[EMAIL PROTECTED] Sent: 26 February 2007 09:28
To: [email protected]
Subject: RE: Spring context and Resource


Hi all,

Thanks for the discussion. I've added a SpringFinder class into the Spring
extension package with the
Javadocs based on solution 2.

Best regards,
Jerome
-----Message d'origine-----
De : Jonathan Hall [mailto:[EMAIL PROTECTED] Envoyé : samedi 24 février 2007 16:10
À : [email protected]
Objet : Re: Spring context and Resource

Thankyou Valdis, I went with option 2 which works great.

Jonathan


Valdis Rigdon wrote:
I've found 2 approaches that work, and there are possibly more.

1. Use @Configurable on your Resource classes, and use
Spring AOP to
inject dependencies. Search the message archives for more
details on
this.

2. If you don't like having the dependency on AspectJ, you
can extend
org.restlet.Finder and override createResource(Request,
Response) to
delegate to a no-arg createResource() method (but be sure to call init() on it after it's created). Then create a singleton
Spring bean
based on that Finder, and configure it using "lookup-method" to return instances of a "prototype" bean for
createResource(). Finally,
attach the Finder to your Router. When the
createResource() method is
invoked, a new instance of your prototype bean will be created and returned.


A sample xml for "lookup-method":

<bean id="myRestlet" class="com.mycompany.rest.SpringFinder">
       <lookup-method name="createResource" bean="myResource"/>
</bean>
<bean id="myResource"
class="com.mycompany.rest.resource.MyResource"
scope="prototype">
   <property name="aProperty" value="anotherOne"/>
   <property name="oneMore" value="true"/>
</bean>


Perhaps org.restlet.Finder could be reworked so this worked
out of the
box, instead of having to have a custom Finder object.


Valdis


Jonathan Hall wrote:
Hi,

Following the wiki examples, I integrated Spring and
Restlet by using an
extended Restlet bean and handle(Request request, Response
response).
However, it seems I would want to extend Resource instead,
as it has all
the gubbins for get/post/put/etc. The problem is the
router accepts a
class and not an object; so I can't use Spring to inject
other beans
into my extended class.

The following options occur to me:
modify Router to accept instances,
recreate the spring context on every call in the Resource,
stash the springcontext in the restlet context.

Have I missed something that would solve this problem, or
misunderstood
the framework? If not, then would it be possible to add
something to
help with this in future releases?

Thanks for all the great work, I'm enjoying learning this
framework.
Best Regards,
Jonathan



Reply via email to