Hello Rhett, 

That's not at all a bad idea! I keep forgetting about the fact that classes 
themselves are generic. I'd still have to make a subclass of finder to add the 
extra class parameter to my resource (I really like the idea of creating a 
resource per request, mostly for the reasons stated in this thread already). 
That, however is not a big deal.


------------------------------------------------------------
Kyrre Kristiansen


--- On Tue, 7/4/09, Rhett Sutphin <rh...@detailedbalance.net> wrote:

> From: Rhett Sutphin <rh...@detailedbalance.net>
> Subject: Re: Resource factories
> To: discuss@restlet.tigris.org
> Date: Tuesday, 7 April, 2009, 5:49 PM
> Hi Kyrre,
> 
> On Apr 7, 2009, at 9:28 AM, Kyrre Kristiansen wrote:
> 
> > Hello, all.
> >
> > *rant alert*
> >
> > I came over this discussion, and wanted to share my
> experiences with  
> > creating resources. I started playing around with
> restlet before it  
> > became 1.0, and am generally very, very pleased with
> it. One of the  
> > things I use it for is my own prototype environment,
> where I can  
> > throw together some quite impressive applications in a
> matter of  
> > hours..
> >
> > After creating a whole host of different resource
> types, I started  
> > seeing some quite distinct patterns in my resources,
> at least the  
> > simplest ones.
> > This resulted in using Generics on my resources, where
> I created a  
> > class, ListResource<T extends Referrable> (where
> Referrable is an  
> > interface, with one method, getId() ). I already have
> a generic DAO  
> > implementation based on the Referrable interface. In
> addition, I  
> > created a ResourceConfig<T extends Referrable>
> that I could pull off  
> > all the things I need for the ListResource (including
> the DAO,  
> > that's why it's parametrized), as well as a
> FormBuilder<T extends  
> > BaseObject> interface for building my objects based
> on a Form. All  
> > this leads to ListResource being a concrete class that
> relies solely  
> > on one object, the config, and that works with any
> resource that  
> > represents a Referrable subtype and is a top-level
> "list resource".
> >
> > This, however, is where my trouble starts. Because at
> run-time, the  
> > system cannot differentiate between a
> ListResource<Foo>.class and a  
> > ListResource<Bar>.class due to type erasure. At
> the moment I have to  
> > subclass ListResource for each type I am using it for,
> but hopefully  
> > making a parametrized Finder class that can then be
> attached to a  
> > Router, will solve my troubles. Has anyonw tried
> this?
> 
> This isn't specific to Restlet, but the way I handle this
> "feature" of  
> generics is to define a method like this:
> 
> public abstract class ListResource<T extends
> Referrable> extends  
> Resource {
>    // ...
>    public abstract Class<T>
> referrableType();
>    // ...
> }
> 
> If you wanted to do it in a way that doesn't require
> subclassing, you  
> could do
> 
> public class ListResource<T extends Referrable>
> extends Resource {
>    public ListResource(/* whatever
> parameters */, Class<T> type) {
>      // ...
>      this.type = type;
>    }
> 
>    public Class<T> referrableType() {
> return this.type; }
> }
> 
> Rhett
> 
> > I have, BTW, also a solution for SingleResource<T
> extends  
> > Referrable>, but this is not used as much as my
> ListResource, so I  
> > didn't describe this.
> >
> > The big, unsolved task is to make the resources and
> interfaces  
> > available for more complex resource hierarchies where
> you have to  
> > check for the existence of a parent resource before
> you allow  
> > creation and modification of a child resource. Twenty
> or so more  
> > resource types under the belt, and I might get there
> ;-)
> >
> > *end rant*
> >
> >
> ------------------------------------------------------------
> > Kyrre Kristiansen
> >
> >
> > --- On Thu, 26/3/09, Jerome Louvel <jerome.lou...@noelios.com>
> wrote:
> >
> >> From: Jerome Louvel <jerome.lou...@noelios.com>
> >> Subject: RE: Resource factories
> >> To: discuss@restlet.tigris.org
> >> Date: Thursday, 26 March, 2009, 1:20 PM
> >>
> >>
> >>
> >>
> >>
> >> Hi all,
> >>
> >> I've just found time to read this thread and
> >> enjoyed it very much. It's
> >> hard to find the best balance between so much
> points of
> >> views and ways to deal
> >> with instantiations, wiring of objects, etc. so
> >> it's nice to hear that
> >> the current
> >> design has more advantages than
> >> drawbacks.
> >>
> >> As Tal mentioned, we are redesigning the Resource
> >> API to support
> >> client-side resources and focused use of
> annotations. I
> >> didn't intend to change
> >> the way resources are instantiated though. But,
> >> if
> >> we can adjust the new design
> >> to accommodate more use cases, I would be
> interested to
> >> explore.
> >>
> >>
> >> Currently, we are working on Restlet 1.2 M2 which
> >> will give you a chance
> >> to play with the new resource API and provide
> >> feed-back.
> >>
> >>
> >>
> >>
> >> Best
> >> regards,
> >> Jerome
> >> Louvel
> >> --
> >> Restlet ~ Founder and Lead developer ~
> >> http://www.restlet.org
> >> Noelios Technologies ~ Co-founder ~
> >> http://www.noelios.com
> >>
> >>
> >>
> >>
> >> De : Tal Liron
> >> [mailto:tal.li...@threecrickets.com]
> >> Envoyé : jeudi 26 mars 2009
> >> 08:49
> >> À : discuss@restlet.tigris.org
> >> Objet : Re:
> >> Resource factories
> >>
> >>
> >>
> >> Thanks to all
> >> who replied on this. After a discussion on the
> code list,
> >> it became clear that
> >> the Restlety solution to configuring resources is
> to use
> >> the Context. The
> >> Context has a ConcurrentMap of attributes,
> described as
> >> so:
> >>
> >> "This
> >> is a convenient mean[s] to provide common objects
> to all
> >> the Restlets and
> >> Resources composing an Application."
> >>
> >>
> >>
> >> So, that's it!
> >> The nice thing about contexts, too, is that they
> pass
> >> through restlets along the
> >> way. So, even if you configure your Application
> context in
> >> a certain way, you
> >> can apply filters or whatnot along the way to
> adapt the
> >> configuration. For
> >> example, a DebuggingFilter might enable all the
> >> configuration aspects that have
> >> to do with debugging. It's then easy to add/remove
> such
> >> a filter, even
> >> on-the-fly, without reconfiguring the whole
> >> application.
> >>
> >>
> >>
> >>
> >> -Tal
> >>
> >>
> >>
> >>
> >
> >
> ------------------------------------------------------
> > http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1577974
> 
> ------------------------------------------------------
> http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1579025
>

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1579419

Reply via email to