johan, so i made these changes and it seems to work fine. i also added
a DatabaseResourceStream class which works beautifully as well. the
problem i have now is that my database session is not available when
this getLastModified() call is made. oops. anyway, i think the fix
below may be good. i just added code that never gets the resource
stream if the resource is not cacheable. it seems to fix my problem and
should be more efficient in general. is there any problem with this or
should i check it in?
protected long getLastModified(final HttpServletRequest servletRequest)
{
final String pathInfo = servletRequest.getPathInfo();
if ((pathInfo != null) &&
pathInfo.startsWith(WebRequestCycle.resourceReferencePrefix))
{
final String resourceReferenceKey = pathInfo
.substring(WebRequestCycle.resourceReferencePrefix.length());
final Resource resource =
webApplication.getSharedResources().get(resourceReferenceKey);
resource.setParameters(new
WebRequest(servletRequest).getParameterMap());
if (resource != null)
{
if (resource instanceof StaticResource)
{
((StaticResource)resource).setApplication(webApplication);
}
// If resource is not cacheable, there's no point in
getting the
// last modified time!
if (!resource.isCacheable())
{
return -1;
}
else
{
// Get resource stream
IResourceStream stream = resource.getResourceStream();
// First ask the length so the content is
created/accessed
stream.length();
// Get last modified time from stream
Time time = stream.lastModifiedTime();
return time != null ? time.getMilliseconds() : -1;
}
}
}
return -1;
}
Jonathan Locke wrote:
nah, we just label it with the usual "this is not a public api"
comment like we do elsewhere...
Johan Compagner wrote:
hmm would be nice but WicketServlet is in wicket.protocol.http and
Resource in just wicket...
So we then have to introduce a between class that replays the call to
the package scope Resource method?
johan
Jonathan Locke wrote:
couldn't the setParameters() method be private or at least package
private? it's really an implementation detail we wouldn't want users
to work with, correct?
On Sat, 6 Aug 2005, Johan Compagner wrote:
That looks fine to me.
The only problem is that i was trying to hide the fact that
RequestCycle.get() CAN return NULL for resources..
(It can be null when the call is going through getLastModified() of
wicketservlet....)
We should come up with something else for that, because the
parameters are still there.
But with resource having a getParameters.. i think we can add a
setParameters()
and call that one in the WicketServlet.getLastModified() That would
work perfectly because the we also have parameters
when the last modified call is done (and that has to be done
because else such a resource can never be cachable....)
johan
Jonathan Locke wrote:
maybe even add
public class Resource
{
protected ValueMap Resource.getParameters()
{
return new
ValueMap(RequestCycle.get().getRequest().getParameterMap());
}
}
that would allow easy access to typed parameters
Jonathan Locke wrote:
ooooh. very sneaky!
i like it. but maybe we can provide a little helper subclass so
people don't have to
do this to get resource parameters:
Map params = RequestCycle.get().getRequest().getParameterMap();
that takes a bit more knowledge of wicket than most people
probably have.
Johan Compagner wrote:
Works fine.
Just register at startup in youre application a
ResourceReference (that is youre service)
(you need head for this because there where 2 bugs in wicket,
lastModified couldn't return null
and cachable check didn't go through the isCachable() method but
cachable variable instead)
this is a quick hack of some code
getSharedResources().add("mydynamicresource",new Resource()
{
IResourceStream resourceStream = new IResourceStream()
{
public Time lastModifiedTime()
{
loadResource();
return null;
}
public void close() throws IOException
{
is.close();
is = null;
}
public InputStream getInputStream()
throws ResourceStreamNotFoundException
{
loadResource();
return is;
}
public long length()
{
loadResource();
if(is != null)
{
try
{
return (long)is.available();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return 0;
}
public String getContentType()
{
loadResource();
return "image/gif";
} };
InputStream is;
private void loadResource()
{
if(is == null && RequestCycle.get() != null)
{
Map params =
RequestCycle.get().getRequest().getParameterMap();
String fileName = (String)params.get("file");
if(fileName != null)
{
try
{
is = new FileInputStream("c:/" +
fileName);
}
catch (FileNotFoundException e)
{
throw new WicketRuntimeException(e);
}
}
else
{
is = null;
}
}
}
public boolean isCacheable()
{
return false;
}
public IResourceStream getResourceStream()
{
return resourceStream;
}
});
Jonathan Locke wrote:
right. except one crucial difference. this kind of resource
does not need to be
registered with the application (and you don't need an image
reference to it). i don't think you can do what you suggested
below. there are no parameters
to image resources currently (unless someone changed something
on me... ;-))
Johan Compagner wrote:
but what you are describing is pretty much how a resource
works now
With one exception you don't have this:
http://<host>/app/customResources/photos/test/100
but this
http://<host>/app/resources/photos?image=test&width=100
johan
Jonathan Locke wrote:
right.
but how is this different from the simpler
WebRequestCycle.onCustomResource?
is it just that it's a little more modular? if that's the
goal, maybe we should have a generalized
custom resource architecture (i loathe the word 'service'
here because it's so unbelievably lacking
in meaning, btw). we could have just one way of parsing the
base part of the url and then pass
the tail on to a resource handler class registered with
WebRequestCycle. i really hate the idea
of loading more and more stuff into WebRequest/WebResponse,
because they are so inconvenient
to customize. so maybe it's like:
webRequestCycle.add("photos", new CustomResource() { })
and then URLs like:
http://<host>/app/customResources/photos/...
would go to the instance of CustomResource installed on the
WebRequestCycle...
yeah, i like that a bunch better... is this kindof what
you're driving at?
Igor Vaynberg wrote:
Not exactly.
I think you are taking a more resource based approach then
what I tried to
describe. Basically lets say in your case you need to return
some resources
from within your wicket app that don't fit well with the
default
request/response processing. What you can do is create your own
implementation of WebRequest and WebResponse and register
them with wicket
under a service name. So when the user hits a url with that
service name
your registered implementations of WebRequest and
WebResponse will be used
to process the url and generate the response as opposed to
wicket's default.
You can completely bypass wicket's pages/components and just
write your file
into the response.
So its not just a resource reference but more like a
sub-servlet that works
inside wicket and handles all urls with a specific service
attrubute.
The advantage to a separate servlet is that you still get
all the wicket
features because your alternate impls are still running
within wicket.
You can write an image service that given an image name from
within a
package will write it to the response, kind of like a
resource reference
does now.
Does this make sense or do I just now know enough about
resource references
in wicket?
-Igor
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf
Of Johan Compagner
Sent: Friday, August 05, 2005 2:14 PM
To: wicket-user@lists.sourceforge.net
Subject: Re: [Wicket-user] Re: Problem
but isn't this adding a esourcereference to youre application?
Then that resourcereference will becalled under the url:
/wicket-examples/images/resources/home/image5
and you can do anything you want in the resource that
reference is making.
johan
Igor Vaynberg wrote:
Or someone might write components/pages that generate
xml
and are xslt
transformed into a ui. Or voice xml components. And im
sure
there are
a thousand more reasons.
Tapestry takes an nice approach that allows easy
integration of things
like this. You can basically write your own service
providers (in this
case customized webrequest/webresponse pair) and register
them with the framework. When your url contains a
service=<service-name> tapestry uses your service to
process the request and
produce the response.
-Igor
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On
Behalf
Of Philip
A. Chapman
Sent: Friday, August 05, 2005 1:03 PM
To: wicket-user@lists.sourceforge.net
Subject: Re: [Wicket-user] Re: Problem
Gili wrote:
Jon, I think you need to give more information about
your actual
requirements. As I already mentioned, I have a
simple
servlet which
serves up images by ID and the ID is passed in via a
HTTP POST (although originally I had it going via a HTTP
GET and you
could do this too).
I don't see why one would need access to the
Wicket
session...?
Again, it isn't clear to me what your actual requirements
are. If you
simply have a client-server architecture, why not code
up
all your
server components as servlets to send image data, etc?
This is not Jon's argument, I do not believe, but
an
argument that I
think is valid. Let us say that your images served up by
your servlet are generated charts, such as the relative
wages of employees. You wouldn't want just anyone to be
able to
access this
data unless they had authenticated successfully. In
order to determine whether they have authenticated, you
would need to check the wicket session.
--
Philip A. Chapman
Application Development:
Java, Visual Basic (MCP), PostgreSQL, MySQL, MSSQL
Linux,
Windows 9x,
Windows NT, Windows 2000, Windows XP
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software
Conference & EXPO September 19-22, 2005 * San Francisco,
CA * Development Lifecycle Practices Agile & Plan-Driven
Development * Managing
Projects & Teams
* Testing & QA Security * Process Improvement &
Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference
& EXPO September 19-22, 2005 * San Francisco, CA *
Development Lifecycle Practices Agile & Plan-Driven
Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference
& EXPO
September 19-22, 2005 * San Francisco, CA * Development
Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams
* Testing & QA
Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference &
EXPO
September 19-22, 2005 * San Francisco, CA * Development
Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams *
Testing & QA
Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference &
EXPO
September 19-22, 2005 * San Francisco, CA * Development
Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams *
Testing & QA
Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development
Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams *
Testing & QA
Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development
Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams *
Testing & QA
Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle
Practices
Agile & Plan-Driven Development * Managing Projects & Teams *
Testing & QA
Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle
Practices
Agile & Plan-Driven Development * Managing Projects & Teams *
Testing & QA
Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle
Practices
Agile & Plan-Driven Development * Managing Projects & Teams *
Testing & QA
Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle
Practices
Agile & Plan-Driven Development * Managing Projects & Teams *
Testing & QA
Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle
Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing
& QA
Security * Process Improvement & Measurement *
http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle
Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing
& QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user