If a sharedresourcetarget is created for a ResourceReference
then the bind() is called on the ResourceReference so the Resource is
created
this has to be done because else the url can't be completely constructed.

But a Resource itself is just a simple constainer of data how the byte[] can
be constructed
for example all the fields of PackageResource is just a few strings:


/** The path to the resource */

*private* *final* String absolutePath;

/** The resource's *locale* */

*private* Locale locale;

/** The path this resource was created with. */

*private* *final* String path;

/** The scoping class, used for class loading and to determine the package.
*/

*private* *final* String scopeName;

/** The resource's style */

*private* *final* String style;

So you can get it just fine. And the resource should be there.

johan




On 11/7/07, Ate Douma <[EMAIL PROTECTED]> wrote:
>
> Johan Compagner wrote:
> > ok you can get the resource from the sharedResources with the key the
> that
> > the
> > ISharedResourceRequestTarget.getResourceKey() gives you
> > And then you have the Resource object where you can ask if it is
> cachable or
> > not.
> > You can just ask for the resource from the SharedResources
> > it will be in there at the time it comes to the WRCS.encode()
> > But that doesn't mean that the byte[] behind the Resource have to be
> loaded
> > that is done when the Stream is asked for. The Resource itself is just a
> > shallow container.
> Ok, sounds great, but what about lazy initialization?
> Right now, WRCS.encode() only uses the resourceKey itself but doesn't
> access the (possibly not yet registered) Resource.
> If I look at SharedResourceRequestTarget.respond(RequestCycle), there is a
> whole lot of plumbing going on to handle not yet registered Resources.
> I guess I then need to duplicate/implement that same logic in WRCS then,
> right?
> Doable of course, but maybe that logic then better should be refactored in
> a separate method so I can reuse it?
>
> Again, thanks for helping me out on this Johan!
>
> Regards,
>
> Ate
>
> >
> > johan
> >
> >
> >
> > On 11/6/07, Ate Douma <[EMAIL PROTECTED]> wrote:
> >> Thanks for helping out Johan!
> >>
> >> Comments and more specific questions inline below.
> >>
> >>
> >> Johan Compagner wrote:
> >>> Ate,
> >>>
> >>> So you want to know if more then one url is the same Resource?
> >> No :)
> >> I see I didn't properly describe my situation, although your second
> guess
> >> below comes close :)
> >>
> >>> What do you have to start with? The url?
> >>>
> >>> Because an url maps directly to a Resource (not an ResourceReference)
> >>> And that Resource tells you if it is cacheable.
> >>>
> >>>
> >>> Or do you mean you need to know when you build the page? And you have
> >>> ResourceReferences everywhere?
> >> When rendering a "page", especially when processing the HeaderResponse,
> I
> >> need to know if a WebRequestCodingStrategy.encode(RequestCycle,
> >> ISharedResourceRequestTarget) concerns a static/stateless/cacheable
> >> Resource or a (potentially) dynamic Resource which might be different
> for
> >> each and every
> >> request...
> >>
> >> As I tried to explain: I'm trying to find a safe algorithm to prevent
> >> multiple links to the the same application scoped/static/cacheable
> resource
> >> for portal
> >> pages which include more than one instance of a wicket portlet
> >> (potentially even the same).
> >> Right now, all the ISharedResource urls generated for a portlet gets
> the
> >> portlet unique id encoded in it, just to make sure dynamic resources
> links
> >> are
> >> targeting the correct portlet instance.
> >> But for certain resources, like the JavascriptResourceReference for "
> >> wicket-ajax.js" this isn't needed of course and this unique portlet id
> >> should not be
> >> encoded in the url.
> >>
> >>> after a resource reference is binded you just can get the Resource
> >>> (getResource()) method and that one
> >>> can tell you if it is cachable.
> >> I'd rather not "get" the Resource at this stage: I guess a long list of
> >> mp3 Resources might not be the best example to "get" just for this
> purpose,
> >> right?
> >>
> >> Furthermore, if I understood it correctly, ResourceReferences can still
> be
> >> used for creating "dynamic" resources, e.g. resources which might
> deliver
> >> a different
> >> result for each request. For (Application scope) cacheable dynamic
> >> resources, even if just short lived, I would be ok with it, as long as
> the
> >> proper lifetime is
> >> set on the response headers. I just need to know how I can be sure of
> the
> >> referenced resourrce isn't going to be dynamic after all.
> >>
> >> Regards,
> >>
> >> Ate
> >>
> >>> johan
> >>>
> >>>
> >>>
> >>> On 11/6/07, Ate Douma <[EMAIL PROTECTED]> wrote:
> >>>> For portlet support, shared resource urls are served in a specific
> way
> >>>> (through the servlet api, not the portlet api).
> >>>> But because these might be component level resources, a portlet id is
> >> also
> >>>> encoded in their url to protect against potential url overlap when
> >> multiple
> >>>> instances
> >>>> of the same portlet are displayed on the same portal page.
> >>>>
> >>>> So far so good, but when these resources are really static (or
> >> cacheable)
> >>>> the same resource might be linked/loaded multiple times for nothing,
> >> like
> >>>> with the
> >>>> standard wicket JavascriptReference for wicket-ajax.js etc.
> >>>>
> >>>> I've been looking for a way to *safely* determine if a
> >>>> ISharedResourceRequestTarget is actually targetting such a static
> >> Resource.
> >>>> But even a ResourceReference can be extended to override the
> >> newResource()
> >>>> method and then all bets are off I'm afraid, isn't it?
> >>>>
> >>>> Is there something I'm missing here or is Wicket simply too "wicked"
> in
> >>>> that I never can safely "merge" multiple resource requests like for a
> >> proper
> >>>> PortletHeaderResponse implementation???
> >>>>
> >>>> Of course, for the core Wicket framework I can pre identify the most
> >>>> common/used static ResourceReferences like wicket-ajax.js, but I'd
> >> rather
> >>>> implement a
> >>>> generic solution for this instead of having to fall back to a hard
> >> coded
> >>>> lookup table...
> >>>>
> >>>> Regards,
> >>>>
> >>>> Ate
> >>>>
> >>>>
> >>
> >
>
>

Reply via email to