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