[seam-dev] Seam and RESTEasy integration

Pete Muir pete.muir at jboss.org
Sun Jul 13 10:12:20 EDT 2008


On 13 Jul 2008, at 14:44, Christian Bauer wrote:

>
> On Jul 13, 2008, at 15:04 , Ryan J. McDonough wrote:
>
>> Cool! I'm very interested as to how this is being implemented.  
>> Also, is this integration going to be part of Seam, RESTEasy, or as  
>> a sub-module of RESTEasy?
>
> It's going to be part of Seam, planned is a seam-resteasy.jar that  
> you simply drop into your libs (in addition to any resteasy JARs).  
> That's how other frameworks and libs are integrated with Seam today.  
> So I guess we need a RESTEasy dependency in the Seam POMs to compile  
> it (Pete?).

I will create a module in a bit.

> Same for configuration: Any @Provider and @Path classes are  
> automatically discovered during Seam application startup when the  
> RESTEasy libs are in the classpath. If you want to customize  
> settings, you override a built-in Seam component in a Seam  
> configuration file (many deployment options here, this is just one  
> of them):
>
>    <component name="resteasyApplicationConfig" precedence="20"
>                
> class="org.jboss.seam.resteasy.ResteasyApplicationConfig">
>        <property name="scanForResources">
>            <value>false</value>
>        </property>
>        <property name="resourceClassNames">
>            <value>my.CatalogResource</value>
>            <value>my.ItemResource</value>
>        </property>
>        ... and so on ...
>    </component>

We should have the namespaced version as well:

<reasteasy:reasteasy-application-config scan-for-resouces="false">
    <resteasy:resource-class-names>
       <value>my.CatalogResource</value>
       <value>my.ItemResource</value>
    </resteasy:resource-class-names>
</resteasy:resteasy-application-config>

(btw the precedence isn't necessary, components default to precedence  
40)

>
>
> This Seam component supports all the other settings you'd have in  
> web.xml with plain RESTEasy. You do not have to touch web.xml at all  
> with this approach. This Seam component is an extension of the JAX- 
> RS ApplicationConfig. (By the way, this should be an interface, not  
> an abstract class... tell the "experts".)
>
> So that allows you to run your existing @Path and @Provider classes  
> in a Seam app without any additional configuration or changes. Drop  
> the classes into the classpath and Seam will serve HTTP requests  
> through its existing resource-loading architecture (the  
> SeamResourceServlet is enabled in all Seam applications). You can  
> even hook into that request processing and customize the dispatcher,  
> wrap the request, and so on. This is regular Seam stuff.
>
> Of course people want that integration not only for integrated  
> bootstrap and request processing but for the Seam programming model  
> when writing resources and providers:
>
> 1. You can put an @Name onto your @Path root resource class. This  
> enables Seam lifecycle management for the resource object. If it is  
> ScopeType.EVENT you basically get the JAX-RS default (POJO per  
> request) lifecycle. If it is ScopeType.APPLICATION, you get  
> Singleton lifecycle - you can also put @Synchronized on it. And so  
> on for ScopeType.SESSION and ScopeType.CONVERSATION. Once your  
> resource classes and providers are Seam components, you get full  
> Seam interception for @In(jection), and so on. E.g. you can use @In  
> ItemDAO on a field in your resource implementation.
>
> 2. You can put @Name on your @Provider class. It has to be  
> ScopeType.APPLICATION or ScopeType.STATELESS. For the STATELESS  
> providers I need an extension to RESTEasy. I need to tell RESTEasy  
> how it should look up an instance of a Provider from Seam at  
> runtime. Right now you guys only support setProvider(clazz) and  
> setProviderInstance(o) at bootstrap. I need  
> setProviderLookup(anImplementationOfALookupInterface) or something  
> similar.
>
> 3. We'll probably have a mechanism for transporting conversation  
> identifiers in HTTP headers. However, I'm thinking that the way this  
> should be implemented is with explicit automatically created  
> resources that identify a particular conversation "workspace". See  
> Bill's blog about JMS integration and how you'd model a transaction  
> resource RESTfully. This is the same approach just for Seam  
> conversations.

So this would be similar to named conversations? You have to  
explicitly define and use a conversation?

> 4. In a second stage we might want to integrate the Seam Application  
> Framework. This is a basic CRUD framework, today used for quick  
> development of JSF apps. We can use this as a foundation to expose  
> entity lists and instances for CRUD/search directly from the  
> database as HTTP resources. Similar to what Rails does out of the  
> box, just nicer :)

Nice.

> 5. I'm thinking about a special provider that can marshal an object  
> graph into an XHTML (not just XML) response body and back from an  
> XHTML request body to an object graph. This is about the  
> "connectedness" of resources, see the O'Reilly REST book. As a  
> developer I should write a Facelets XHTML template that defines the  
> transformation. Imagine that you write it the same way you write a  
> JSF template today, with bidirectional binding using EL expressions,  
> from object getter/setter pair to XML attribute or element value. We  
> can even have built-in Facelets "widgets" that render certain  
> microformats. Seam has some machinery for this already but we might  
> need an extra interceptor on resource methods to trigger the  
> transformation. Or we use Seams pages.xml navigation rules ("when  
> this resource method finishes, render this template"). Bill, I'm not  
> sure we even need anything in RESTEasy for that, Seam intercepts  
> these things anyway if there is a @Name on the class.

Yup, I think this nice. I don't see any particular difficulties  
assuming Seam can intercept the calls correctly. You could perhaps do  
the mapping using pages.xml, or an annotation.

I assume you would build (4) on (5)?

--
Pete Muir
http://www.seamframework.org
http://in.relation.to/Bloggers/Pete







More information about the seam-dev mailing list