You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by ma...@apache.org on 2004/11/30 08:05:54 UTC
cvs commit: jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib WebdavResource.java
masonjm 2004/11/29 23:05:54
Modified: src/share/org/apache/slide/event Tag:
SLIDE_2_1_RELEASE_BRANCH EventCollectionFilter.java
src/webdav/server/org/apache/slide/webdav/method Tag:
SLIDE_2_1_RELEASE_BRANCH AbstractWebdavMethod.java
UnlockMethod.java
webdavclient/clientlib/src/java/org/apache/webdav/lib Tag:
SLIDE_2_1_RELEASE_BRANCH WebdavResource.java
Log:
Fix for bug 32250, submitted by Warwick Burrows
Revision Changes Path
No revision
No revision
1.5.2.1 +37 -28 jakarta-slide/src/share/org/apache/slide/event/EventCollectionFilter.java
Index: EventCollectionFilter.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/event/EventCollectionFilter.java,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -r1.5 -r1.5.2.1
--- EventCollectionFilter.java 28 Jul 2004 09:36:26 -0000 1.5
+++ EventCollectionFilter.java 30 Nov 2004 07:05:52 -0000 1.5.2.1
@@ -34,14 +34,17 @@
public class EventCollectionFilter {
public static ContentEvent[] getChangedContents(EventCollection collection) {
List changedContents = new ArrayList();
- List collectedEvents = collection.getCollection();
- for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
- EventCollection.Event event = (EventCollection.Event)i.next();
- if ( event.getMethod() == ContentEvent.STORE ) {
- removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
- changedContents.add(event.getEvent());
- } else if ( event.getMethod() == ContentEvent.REMOVE ) {
- removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
+ if (collection != null)
+ {
+ List collectedEvents = collection.getCollection();
+ for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
+ EventCollection.Event event = (EventCollection.Event)i.next();
+ if ( event.getMethod() == ContentEvent.STORE ) {
+ removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
+ changedContents.add(event.getEvent());
+ } else if ( event.getMethod() == ContentEvent.REMOVE ) {
+ removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
+ }
}
}
ContentEvent[] changedContentEvents = new ContentEvent[changedContents.size()];
@@ -50,14 +53,17 @@
public static ContentEvent[] getCreatedContents(EventCollection collection) {
List changedContents = new ArrayList();
- List collectedEvents = collection.getCollection();
- for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
- EventCollection.Event event = (EventCollection.Event)i.next();
- if ( event.getMethod() == ContentEvent.CREATE ) {
- removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
- changedContents.add(event.getEvent());
- } else if ( event.getMethod() == ContentEvent.REMOVE ) {
- removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
+ if (collection != null)
+ {
+ List collectedEvents = collection.getCollection();
+ for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
+ EventCollection.Event event = (EventCollection.Event)i.next();
+ if ( event.getMethod() == ContentEvent.CREATE ) {
+ removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
+ changedContents.add(event.getEvent());
+ } else if ( event.getMethod() == ContentEvent.REMOVE ) {
+ removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
+ }
}
}
ContentEvent[] changedContentEvents = new ContentEvent[changedContents.size()];
@@ -66,14 +72,17 @@
public static ContentEvent[] getRemovedContents(EventCollection collection) {
List changedContents = new ArrayList();
- List collectedEvents = collection.getCollection();
- for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
- EventCollection.Event event = (EventCollection.Event)i.next();
- if ( event.getMethod() == ContentEvent.REMOVE ) {
- removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
- changedContents.add(event.getEvent());
- } else if ( event.getMethod() == ContentEvent.CREATE || event.getMethod() == ContentEvent.STORE ) {
- removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
+ if (collection != null)
+ {
+ List collectedEvents = collection.getCollection();
+ for ( Iterator i = collectedEvents.iterator(); i.hasNext(); ) {
+ EventCollection.Event event = (EventCollection.Event)i.next();
+ if ( event.getMethod() == ContentEvent.REMOVE ) {
+ removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
+ changedContents.add(event.getEvent());
+ } else if ( event.getMethod() == ContentEvent.CREATE || event.getMethod() == ContentEvent.STORE ) {
+ removeContentEvents(changedContents, ((ContentEvent)event.getEvent()).getUri());
+ }
}
}
ContentEvent[] changedContentEvents = new ContentEvent[changedContents.size()];
No revision
No revision
1.43.2.10 +38 -18 jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java
Index: AbstractWebdavMethod.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java,v
retrieving revision 1.43.2.9
retrieving revision 1.43.2.10
diff -u -r1.43.2.9 -r1.43.2.10
--- AbstractWebdavMethod.java 5 Oct 2004 12:09:24 -0000 1.43.2.9
+++ AbstractWebdavMethod.java 30 Nov 2004 07:05:53 -0000 1.43.2.10
@@ -364,26 +364,46 @@
globalLockObtained = true;
}
- try {
- // retrive to check it exists, otherwise it can't have locks
- structure.retrieve(slideToken, requestUri);
- // clear expired lock-tokens
- UnlockListenerImpl listener = new UnlockListenerImpl(slideToken, token, config, req, resp);
- lock.clearExpiredLocks(slideToken, requestUri, listener);
+ // Was this call made to finalize a transaction?
+ boolean isEndofTransactionxUnlock = false;
+ if (this instanceof UnlockMethod)
+ {
+ UnlockMethod meth = (UnlockMethod)this;
+ if (meth.getCommand() != UnlockMethod.NO_TRANSACTION)
+ isEndofTransactionxUnlock = true;
+ }
+
+ /*
+ * Check for object existence and cleanup locks only if we're not
+ * unlocking as part of finalizing a transaction. Otherwise we
+ * are making calls to the store that require a transaction to
+ * be in process while we're trying to commit or abort it the
+ * current transaction.
+ */
+ if (!isEndofTransactionxUnlock)
+ {
+ try {
+ // retrive to check it exists, otherwise it can't have locks
+ structure.retrieve(slideToken, requestUri);
+ // clear expired lock-tokens
+ UnlockListenerImpl listener = new UnlockListenerImpl(slideToken, token, config, req, resp);
+ lock.clearExpiredLocks(slideToken, requestUri, listener);
- if (listener.getUnlockCount() > 0) {
- // If we have have cleared any lock or any lock-null resource in
- // the previous step we commit this changes, otherwise they will
- // be lost if executeRequest() exits with an exception (e.g.
- // because of Not Found 404)
- token.commit();
- token.begin();
+ if (listener.getUnlockCount() > 0) {
+ // If we have have cleared any lock or any lock-null resource in
+ // the previous step we commit this changes, otherwise they will
+ // be lost if executeRequest() exits with an exception (e.g.
+ // because of Not Found 404)
+ token.commit();
+ token.begin();
+ }
+ } catch (ObjectNotFoundException e) {
+ // ignore, it can't have locks
}
- } catch (ObjectNotFoundException e) {
- // ignore, it can't have locks
}
executeRequest();
+
if (!slideToken.isExternalTransaction() && transactionIsStarted) {
token.commit();
transactionIsStarted = false;
1.39.2.3 +13 -3 jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/UnlockMethod.java
Index: UnlockMethod.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/UnlockMethod.java,v
retrieving revision 1.39.2.2
retrieving revision 1.39.2.3
diff -u -r1.39.2.2 -r1.39.2.3
--- UnlockMethod.java 11 Oct 2004 10:20:21 -0000 1.39.2.2
+++ UnlockMethod.java 30 Nov 2004 07:05:53 -0000 1.39.2.3
@@ -111,6 +111,16 @@
// ------------------------------------------------------ Protected Methods
+ /**
+ * get the command for this unlock operation.
+ *
+ * @return int command. One of NO_TRANSACTION, COMMIT_TRANSACTION, ABORT_TRANSACTION
+ */
+ public int getCommand()
+ {
+ return command;
+ }
+
/**
* Parse the request.
*
No revision
No revision
1.29.2.3 +9 -3 jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResource.java
Index: WebdavResource.java
===================================================================
RCS file: /home/cvs/jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResource.java,v
retrieving revision 1.29.2.2
retrieving revision 1.29.2.3
diff -u -r1.29.2.2 -r1.29.2.3
--- WebdavResource.java 2 Oct 2004 17:57:28 -0000 1.29.2.2
+++ WebdavResource.java 30 Nov 2004 07:05:54 -0000 1.29.2.3
@@ -4239,6 +4239,7 @@
method.setDepth(depth);
generateIfHeader(method);
+ generateTransactionHeader(method);
int statusCode = client.executeMethod(method);
String lock = method.getLockToken();
WebdavState state = (WebdavState) client.getState();
@@ -4459,6 +4460,7 @@
method.setFollowRedirects(this.followRedirects);
generateIfHeader(method);
+ generateTransactionHeader(method);
method.setLockToken(lock);
int statusCode = client.executeMethod(method);
@@ -5183,6 +5185,7 @@
method.setSubsciptionLifetime(lifetime);
method.setNotificationType(notificationType);
method.setNotificationDelay(notificationDelay);
+ generateTransactionHeader(method);
int statusCode = client.executeMethod(method);
@@ -5215,6 +5218,7 @@
method.setFollowRedirects(this.followRedirects);
method.setSubscriptionId(subscriptionId);
+ generateTransactionHeader(method);
int statusCode = client.executeMethod(method);
@@ -5252,6 +5256,7 @@
method.setFollowRedirects(this.followRedirects);
method.addSubscriptionId(subscriptionId);
+ generateTransactionHeader(method);
int statusCode = client.executeMethod(method);
@@ -5289,6 +5294,7 @@
method.setFollowRedirects(this.followRedirects);
method.addSubscriptionId(subscriptionId);
+ generateTransactionHeader(method);
int statusCode = client.executeMethod(method);
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org