You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2007/02/13 10:25:53 UTC
svn commit: r506924 - in
/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit:
server/ webdav/jcr/ webdav/jcr/observation/
Author: mreutegg
Date: Tue Feb 13 01:25:52 2007
New Revision: 506924
URL: http://svn.apache.org/viewvc?view=rev&rev=506924
Log:
Add PollTimeout header (required for spi2dav)
Modified:
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java?view=diff&rev=506924&r1=506923&r2=506924
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java Tue Feb 13 01:25:52 2007
@@ -809,7 +809,8 @@
response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
return;
}
- EventDiscovery ed = ((ObservationResource) resource).poll(request.getSubscriptionId());
+ EventDiscovery ed = ((ObservationResource) resource).poll(
+ request.getSubscriptionId(), request.getPollTimeout());
response.sendPollResponse(ed);
}
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java?view=diff&rev=506924&r1=506923&r2=506924
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java Tue Feb 13 01:25:52 2007
@@ -289,11 +289,11 @@
}
/**
- * @see ObservationResource#poll(String)
- * @see SubscriptionManager#poll(String, org.apache.jackrabbit.webdav.observation.ObservationResource)
+ * @see ObservationResource#poll(String, long)
+ * @see SubscriptionManager#poll(String, long, org.apache.jackrabbit.webdav.observation.ObservationResource)
*/
- public EventDiscovery poll(String subscriptionId) throws DavException {
- return subsMgr.poll(subscriptionId, this);
+ public EventDiscovery poll(String subscriptionId, long timeout) throws DavException {
+ return subsMgr.poll(subscriptionId, timeout, this);
}
//--------------------------------------------------------------------------
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java?view=diff&rev=506924&r1=506923&r2=506924
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java Tue Feb 13 01:25:52 2007
@@ -262,11 +262,20 @@
* recorded since the last call to this method and clears the list of event
* bundles.
*
+ * @param timeout time in milliseconds to wait at most for events if none
+ * are present currently.
* @return object listing all events that were recorded.
* @see #onEvent(EventIterator)
*/
- synchronized EventDiscovery discoverEvents() {
+ synchronized EventDiscovery discoverEvents(long timeout) {
EventDiscovery ed = new EventDiscovery();
+ if (eventBundles.isEmpty() && timeout > 0) {
+ try {
+ wait(timeout);
+ } catch (InterruptedException e) {
+ // continue and possibly return empty event discovery
+ }
+ }
Iterator it = eventBundles.iterator();
while (it.hasNext()) {
EventBundle eb = (EventBundle) it.next();
@@ -335,13 +344,13 @@
//--------------------------------------------< EventListener interface >---
/**
* Records the events passed as a new event bundle in order to make them
- * available with the next {@link #discoverEvents()} request. If this
+ * available with the next {@link #discoverEvents(long)} request. If this
* subscription is expired it will remove itself as listener from the
* observation manager.
*
* @param events to be recorded.
* @see EventListener#onEvent(EventIterator)
- * @see #discoverEvents()
+ * @see #discoverEvents(long)
*/
public synchronized void onEvent(EventIterator events) {
if (!isExpired()) {
@@ -354,6 +363,7 @@
log.warn("Exception while unsubscribing: " + e);
}
}
+ notifyAll();
}
//--------------------------------------------------------------------------
@@ -445,7 +455,7 @@
* provides the possibility to retrieve the Xml representation of the
* bundle and the events included in order to respond to a POLL request.
*
- * @see SubscriptionImpl#discoverEvents()
+ * @see SubscriptionImpl#discoverEvents(long)
*/
private class EventBundleImpl implements EventBundle {
@@ -508,7 +518,10 @@
if (tId == null) {
tId = UUID.randomUUID().toString();
}
- eventBundles.add(new EventBundleImpl(events, tId));
+ synchronized (SubscriptionImpl.this) {
+ eventBundles.add(new EventBundleImpl(events, tId));
+ SubscriptionImpl.this.notifyAll();
+ }
}
//-----------------------------< TransactionListener >------------------
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java?view=diff&rev=506924&r1=506923&r2=506924
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java Tue Feb 13 01:25:52 2007
@@ -184,14 +184,15 @@
* by the given id.
*
* @param subscriptionId
+ * @param timeout timeout in milliseconds
* @param resource
* @return object encapsulating the events.
*/
- public EventDiscovery poll(String subscriptionId, ObservationResource resource)
+ public EventDiscovery poll(String subscriptionId, long timeout, ObservationResource resource)
throws DavException {
SubscriptionImpl subs = validate(subscriptionId, resource);
- return subs.discoverEvents();
+ return subs.discoverEvents(timeout);
}
/**