You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by Paul Mietz Egli <pa...@obscure.com> on 2009/07/29 21:02:19 UTC
Re: Exposing DB Data
Andreas Kollegger wrote:
> I'd like to expose data stored in an external database as resource
> nodes in Sling.
Like Andreas, I'm exposing database tables as a virtual resource tree
in Sling. I'm using Dojo's JsonRestStore as a front-end for this
resource tree and have successfully set up ResourceProvider
implementations for each table that will be served through Sling. The
problem that I'm facing is that JsonRestStore uses the Content-Range
HTTP header and query params to narrow the number of records that are
returned by the server. I could get that information from the servlet
request, but the getResource(ResourceResolver, HttpServletRequest,
String) method in my custom resource provider is never called by
JcrResourceResolver2.resolve(HttpServletRequest, String). As far as I
can tell, the getResource() method with the servlet request isn't
called anywhere in the Sling codebase.
Any ideas on how to get headers and parameters from the servlet
request into my ResourceProvider class?
p.
Re: Exposing DB Data
Posted by Alexander Klimetschek <ak...@day.com>.
On Wed, Jul 29, 2009 at 9:02 PM, Paul Mietz Egli<pa...@obscure.com> wrote:
> Like Andreas, I'm exposing database tables as a virtual resource tree in
> Sling. I'm using Dojo's JsonRestStore as a front-end for this resource tree
> and have successfully set up ResourceProvider implementations for each table
> that will be served through Sling. The problem that I'm facing is that
> JsonRestStore uses the Content-Range HTTP header and query params to narrow
> the number of records that are returned by the server. I could get that
> information from the servlet request, but the getResource(ResourceResolver,
> HttpServletRequest, String) method in my custom resource provider is never
> called by JcrResourceResolver2.resolve(HttpServletRequest, String). As far
> as I can tell, the getResource() method with the servlet request isn't
> called anywhere in the Sling codebase.
>
> Any ideas on how to get headers and parameters from the servlet request into
> my ResourceProvider class?
I think for fully virtual resource providers Sling still misses the
"ResourceResolverFactory" [1]. That would probably make this use case
easier to implement.
But anyway my gut feeling tells me that you should not make the
Resource depending on request parameters or HTTP headers. These should
rather define how the resource should be rendered. In your case the
resource would most likely simply the table to be addressed. Limits,
offsets, and other "query" parameters would then be handled in a
servlet that provides a query rendering of this resource/db table.
That would most likely make that servlet and the resource
implementation generic for all tables, but you could still have
specific overrides for special tables (by using a more specific
resource type and a "generic/table" super resource type). In your
Resource implementation you could implement adaptTo to elegantly get
to the underlying JDBC connection or whatever the raw database access
it and use that in your Database query servlet.
[1] http://cwiki.apache.org/SLING/add-resourceresolverfactory-service-interface.html
Regards,
Alex
--
Alexander Klimetschek
alexander.klimetschek@day.com