Hmmmm. That's just not what I am seeing. I have a printout in each of my BasicWebdavStore implementation methods.
Here's what I see when I use the slide webdav client to "put /etc/resolv.conf" into "/music" in my system.
%% WebdavStoreImpl: begin %% objectExists: /music/resolv.conf %% objectExists: / %% getChildrenNames: / %% objectExists: /music %% getChildrenNames: /music %% objectExists: /music/resolv.conf %% objectExists: /music/resolv.conf %% objectExists: /music/resolv.conf %% objectExists: /music/resolv.conf %% objectExists: /music/resolv.conf %% objectExists: /music %% objectExists: /music %% objectExists: /music %% objectExists: /music/resolv.conf %% setResourceContent: /music/resolv.conf %% createResource: /music/resolv.conf %% WebdavStoreImpl: commit
Note the order of the setResourceContent and createResource calls.
Here's the trace for setResourceContent:
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1064)
at
com.ris.manager.gateway.http.WebdavStoreImpl.setResourceContent(WebdavStoreImpl.java:195)
at
org.apache.slide.simple.store.WebdavStoreAdapter$TransactionId.storeRevisionContent(WebdavStoreAdapter.java:520)
at
org.apache.slide.simple.store.WebdavStoreAdapter.storeRevisionContent(WebdavStoreAdapter.java:159)
at
org.apache.slide.store.AbstractStore.storeRevisionContent(AbstractStore.java:1474)
at
org.apache.slide.store.ExtendedStore.storeRevisionContent(ExtendedStore.java:546)
at org.apache.slide.content.ContentImpl.create(ContentImpl.java:593)
at
org.apache.slide.webdav.method.PutMethod.executeRequest(PutMethod.java:407)
at
org.apache.slide.webdav.method.AbstractWebdavMethod.run(AbstractWebdavMethod.java:412)
at org.apache.slide.webdav.WebdavServlet.service(WebdavServlet.java:151)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:354)
at
org.mortbay.jetty.servlet.WebApplicationHandler$Chain.doFilter(WebApplicationHandler.java:342)
at org.apache.slide.webdav.filter.LogFilter.doFilter(LogFilter.java:141)
at
org.mortbay.jetty.servlet.WebApplicationHandler$Chain.doFilter(WebApplicationHandler.java:334)
at
com.ris.manager.gateway.http.IPAddressRestriction.doFilter(IPAddressRestriction.java:248)
at
org.mortbay.jetty.servlet.WebApplicationHandler$Chain.doFilter(WebApplicationHandler.java:334)
at
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:286)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:567)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1808)
at
org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:525)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1758)
at org.mortbay.http.HttpServer.service(HttpServer.java:879)
at org.mortbay.http.HttpConnection.service(HttpConnection.java:790)
at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:952)
at org.mortbay.http.HttpConnection.handle(HttpConnection.java:807)
at
org.mortbay.http.SocketListener.handleConnection(SocketListener.java:197)
at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:289)
at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:501)Here's the trace for createResource:
at
com.ris.manager.gateway.http.WebdavStoreImpl.createResource(WebdavStoreImpl.java:176)
at
org.apache.slide.simple.store.WebdavStoreAdapter$TransactionId.storeRevisionDescriptor(WebdavStoreAdapter.java:675)
at
org.apache.slide.simple.store.WebdavStoreAdapter.storeRevisionDescriptor(WebdavStoreAdapter.java:255)
at
org.apache.slide.store.AbstractStore.storeRevisionDescriptor(AbstractStore.java:1305)
at
org.apache.slide.store.ExtendedStore.storeRevisionDescriptor(ExtendedStore.java:1060)
at org.apache.slide.content.ContentImpl.create(ContentImpl.java:608)
at
org.apache.slide.webdav.method.PutMethod.executeRequest(PutMethod.java:407)
at
org.apache.slide.webdav.method.AbstractWebdavMethod.run(AbstractWebdavMethod.java:412)
at org.apache.slide.webdav.WebdavServlet.service(WebdavServlet.java:151)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:354)
at
org.mortbay.jetty.servlet.WebApplicationHandler$Chain.doFilter(WebApplicationHandler.java:342)
at org.apache.slide.webdav.filter.LogFilter.doFilter(LogFilter.java:141)
at
org.mortbay.jetty.servlet.WebApplicationHandler$Chain.doFilter(WebApplicationHandler.java:334)
at
com.ris.manager.gateway.http.IPAddressRestriction.doFilter(IPAddressRestriction.java:248)
at
org.mortbay.jetty.servlet.WebApplicationHandler$Chain.doFilter(WebApplicationHandler.java:334)
at
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:286)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:567)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1808)
at
org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:525)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1758)
at org.mortbay.http.HttpServer.service(HttpServer.java:879)
at org.mortbay.http.HttpConnection.service(HttpConnection.java:790)
at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:952)
at org.mortbay.http.HttpConnection.handle(HttpConnection.java:807)
at
org.mortbay.http.SocketListener.handleConnection(SocketListener.java:197)
at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:289)
at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:501)Also, why so many calls to "objectExists", and it is really necessary to getChildrenNames on all the parents?
Thanks again! -John
Oliver Zeigermann wrote:
Just checked it and it works the way it should be.
Maybe the confusion is caused by Slide's weird init proc where it tries to set content before creation of a folder? In this case you will have to throw an ObjectNotFoundException as you can not store anything to a non-existing file. The start of the code of setResourceContent in the file RI looks like this
File file = getFile(resourceUri); if (!file.exists()) throw new ObjectNotFoundException(resourceUri);
I hope this helps,
Oliver
On Fri, 3 Dec 2004 23:58:48 +0100, Oliver Zeigermann <[EMAIL PROTECTED]> wrote:
What you expected is the way it should be. If it is not this is a bug. I will check this with the reference implementation.
Oliver
On Fri, 03 Dec 2004 15:59:59 -0500, John Rousseau <[EMAIL PROTECTED]> wrote:
I'm trying to understand the BasicWebdavStore API a bit better.
I was expecting that during a PUT, createResource() would be called with the name of a new resource and then setResourceContent() would be then called to supply the content itself.
What I'm seeing is that setResourceContent is being called first and then createResource. In my implementation of createResource, I check to see if the resource already exists and if so throw ObjectAlreadyExistsException. Since I just created the resource in setResourceCountent, this causes me to throw and the WCK then calls rollback.
Can someone describe these two methods in a bit more detail and explain what I should be doing in them?
Should I just make createResource a no-op?
Thanks -John
--- John Rousseau Archivas, Inc.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
