You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2011/10/14 18:34:20 UTC
svn commit: r1183414 - in
/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi:
./ hierarchy/ lock/ state/
Author: mduerig
Date: Fri Oct 14 16:34:19 2011
New Revision: 1183414
URL: http://svn.apache.org/viewvc?rev=1183414&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP)
remove MODIFIED status
Modified:
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCache.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemLifeCycleListener.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockStateManagerImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/Status.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCache.java?rev=1183414&r1=1183413&r2=1183414&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCache.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCache.java Fri Oct 14 16:34:19 2011
@@ -96,12 +96,6 @@ public class ItemCache implements ItemLi
}
@Override
- public void itemUpdated(ItemImpl<?> item, boolean modified) {
- // do nothing: we don't touch the cache here since the LRU
- // should only be affected by client side operations.
- }
-
- @Override
public void itemDestroyed(ItemImpl<?> item) {
evictItem(item.getItemState());
}
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java?rev=1183414&r1=1183413&r2=1183414&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java Fri Oct 14 16:34:19 2011
@@ -235,37 +235,18 @@ public abstract class ItemImpl<STATE_TYP
throw e;
}
- switch (state.getStatus()) {
- // Notify listeners about an update (status was MODIFIED before)
- // or a simple refresh without modification (status was INVALIDATED).
- case EXISTING:
- if (previousStatus == Status.INVALIDATED || previousStatus == Status.MODIFIED) {
- notifyUpdated(previousStatus == Status.MODIFIED);
- }
- break;
-
- // Notify listeners that this item is transiently or permanently destroyed.
- // - Status#REMOVED : permanent removal. item will never get back to life
- case REMOVED:
- state.removeListener(this);
- notifyDestroyed();
- break;
-
- // Invalid status. A state can never change its state to 'New'.
- case NEW:
- // should never happen.
- log.error("invalid state change to STATUS_NEW");
- break;
-
- // Nothing to do here
- case EXISTING_MODIFIED: // transient modification
- case STALE_MODIFIED: // external modifications while transient changes pending
- case STALE_DESTROYED: // external modifications while transient changes pending
- case MODIFIED: // externally modified -> marker for sessionISM states only
- case EXISTING_REMOVED: // transient removal
- case _UNDEFINED_:
- case INVALIDATED:
- break;
+ Status status = state.getStatus();
+ if (status == Status.NEW) {
+ // Invalid: state can never change to NEW
+ IllegalArgumentException e = new IllegalArgumentException("Invalid state change to status NEW");
+ log.error(e.getMessage(), e);
+ throw e;
+ }
+
+ if (status == Status.REMOVED) {
+ // permanent removal. item will never get back to life
+ state.removeListener(this);
+ notifyDestroyed();
}
}
@@ -281,15 +262,6 @@ public abstract class ItemImpl<STATE_TYP
}
/**
- * Notify the listeners that this instance has been updated.
- */
- private void notifyUpdated(boolean modified) {
- if (listener != null) {
- listener.itemUpdated(this, modified);
- }
- }
-
- /**
* Notify the listeners that this instance has been destroyed.
*/
private void notifyDestroyed() {
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemLifeCycleListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemLifeCycleListener.java?rev=1183414&r1=1183413&r2=1183414&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemLifeCycleListener.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemLifeCycleListener.java Fri Oct 14 16:34:19 2011
@@ -30,15 +30,6 @@ public interface ItemLifeCycleListener {
void itemCreated(ItemImpl<?> item);
/**
- * Called when an {@code Item} instance has been refreshed. If
- * {@code modified} is {@code true}, the refresh included
- * some modification.
- *
- * @param item the instance which has been refreshed
- */
- void itemUpdated(ItemImpl<?> item, boolean modified);
-
- /**
* Called when an {@code ItemImpl} instance has been destroyed
* (i.e. it has been permanently rendered 'invalid').
* <p/>
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java?rev=1183414&r1=1183413&r2=1183414&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java Fri Oct 14 16:34:19 2011
@@ -333,11 +333,9 @@ public abstract class HierarchyEntry<STA
Status currentStatus = currentState.getStatus();
boolean keepChanges = Status.isTransient(currentStatus) || Status.isStale(currentStatus);
MergeResult mergeResult = currentState.merge(state, keepChanges);
- if (currentStatus == Status.INVALIDATED) {
+ if (currentStatus == Status.INVALIDATED || mergeResult.modified()) {
currentState.setStatus(Status.EXISTING);
- } else if (mergeResult.modified()) {
- currentState.setStatus(Status.MODIFIED);
- } // else: not modified. just leave status as it is.
+ }
mergeResult.dispose();
}
}
@@ -403,7 +401,6 @@ public abstract class HierarchyEntry<STA
case _UNDEFINED_:
case INVALIDATED:
case EXISTING:
- case MODIFIED:
case REMOVED:
// Cannot revert EXISTING, REMOVED, INVALIDATED, MODIFIED states.
// State was implicitly reverted or external modifications
@@ -495,7 +492,6 @@ public abstract class HierarchyEntry<STA
case INVALIDATED:
case EXISTING_REMOVED:
case STALE_MODIFIED:
- case MODIFIED:
throw new RepositoryException("Cannot transiently remove an ItemState with status " + state.getStatus());
}
}
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockStateManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockStateManagerImpl.java?rev=1183414&r1=1183413&r2=1183414&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockStateManagerImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockStateManagerImpl.java Fri Oct 14 16:34:19 2011
@@ -581,24 +581,10 @@ public class LockStateManagerImpl implem
return;
}
- switch (state.getStatus()) {
- case REMOVED:
- // this lock has been release by someone else (and not by
- // a call to LockManager#unlock -> clean up and set isLive
- // flag to false.
- unlocked();
- break;
- case _UNDEFINED_:
- case INVALIDATED:
- case EXISTING:
- case EXISTING_MODIFIED:
- case EXISTING_REMOVED:
- case NEW:
- case STALE_MODIFIED:
- case STALE_DESTROYED:
- case MODIFIED:
- // not interested
- break;
+ if (state.getStatus() == Status.REMOVED) {
+ // this lock has been release by someone else (and not by a call to LockManager#unlock
+ // -> clean up and set isLive flag to false.
+ unlocked();
}
}
}
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java?rev=1183414&r1=1183413&r2=1183414&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java Fri Oct 14 16:34:19 2011
@@ -128,7 +128,6 @@ public class ChangeLog {
entry.invalidate(false);
break;
case NEW:
- case MODIFIED:
case _UNDEFINED_:
case STALE_DESTROYED:
case STALE_MODIFIED:
@@ -159,7 +158,6 @@ public class ChangeLog {
state.getHierarchyEntry().revert();
break;
case NEW:
- case MODIFIED:
case _UNDEFINED_:
IllegalStateException e = new IllegalStateException("ChangeLog contains state (" + state.getName() +
") with illegal status " + state.getStatus());
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java?rev=1183414&r1=1183413&r2=1183414&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java Fri Oct 14 16:34:19 2011
@@ -248,12 +248,6 @@ public abstract class ItemState<ENTRY_TY
aLa.statusChanged(this, oldStatus);
}
}
-
- if (status == Status.MODIFIED) {
- // change back tmp MODIFIED status, that is used as marker only
- // inform listeners about (external) changes.
- status = Status.EXISTING;
- }
}
/**
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/Status.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/Status.java?rev=1183414&r1=1183413&r2=1183414&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/Status.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/Status.java Fri Oct 14 16:34:19 2011
@@ -41,13 +41,6 @@ public enum Status {
STALE_DESTROYED,
/**
- * Temporary status used to mark a state, this is permanently modified
- * either by saving transient changes, by workspace operations or by
- * external modification.
- */
- MODIFIED,
-
- /**
* a new state was removed and is now 'removed'
* or an existing item has been removed by a workspace operation or
* by an external modification.
@@ -142,8 +135,7 @@ public enum Status {
|| oldStatus == NEW // save
|| oldStatus == EXISTING_MODIFIED // save, revert
|| oldStatus == EXISTING_REMOVED // revert
- || oldStatus == STALE_MODIFIED // revert
- || oldStatus == MODIFIED;
+ || oldStatus == STALE_MODIFIED; // revert
// REMOVED, STALE_DESTROYED -> false
break;
case EXISTING_MODIFIED:
@@ -159,12 +151,9 @@ public enum Status {
|| oldStatus == EXISTING_REMOVED
|| oldStatus == STALE_MODIFIED;
break;
- case REMOVED: // removal always possible -> getNewStatus(int, int)
+ case REMOVED: // removal always possible -> getNewStatus(Status, Status)
isValid = true;
break;
- case MODIFIED: // except for NEW states an external modification is always valid
- isValid = oldStatus != NEW;
- break;
case NEW: // cannot change state to NEW -> false
case _UNDEFINED_: // cannot change state to _UNDEFINED_ -> false
break;
@@ -182,37 +171,12 @@ public enum Status {
* @return new status that takes transient modification/removal into account.
*/
public static Status getNewStatus(Status oldStatus, Status newStatusHint) {
- Status newStatus = newStatusHint;
- switch (newStatusHint) {
- case MODIFIED:
- // underlying state has been modified by external changes
- if (oldStatus == EXISTING || oldStatus == INVALIDATED) {
- // temporarily set the state to MODIFIED in order to inform listeners.
- newStatus = MODIFIED;
- } else if (oldStatus == EXISTING_MODIFIED) {
- newStatus = STALE_MODIFIED;
- } else {
- // old status is EXISTING_REMOVED (or any other) => ignore.
- // a NEW state may never be marked modified.
- newStatus = oldStatus;
- }
- break;
- case REMOVED:
- if (oldStatus == EXISTING_MODIFIED || oldStatus == STALE_MODIFIED) {
- newStatus = STALE_DESTROYED;
- }
- break;
- case _UNDEFINED_:
- case INVALIDATED:
- case EXISTING:
- case EXISTING_MODIFIED:
- case EXISTING_REMOVED:
- case NEW:
- case STALE_MODIFIED:
- case STALE_DESTROYED:
- break;
+ if (newStatusHint == REMOVED && (oldStatus == EXISTING_MODIFIED || oldStatus == STALE_MODIFIED)) {
+ return STALE_DESTROYED;
+ }
+ else {
+ return newStatusHint;
}
- return newStatus;
}
}
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java?rev=1183414&r1=1183413&r2=1183414&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java Fri Oct 14 16:34:19 2011
@@ -244,7 +244,6 @@ public class TransientItemStateManager i
case INVALIDATED:
case EXISTING:
case STALE_DESTROYED:
- case MODIFIED:
case REMOVED:
// INVALIDATED, MODIFIED ignore. no effect to transient modifications.
// any other status change is invalid -> see Status#isValidStatusChange(int, int
@@ -277,7 +276,6 @@ public class TransientItemStateManager i
case EXISTING_MODIFIED:
case STALE_MODIFIED:
case STALE_DESTROYED:
- case MODIFIED:
case REMOVED:
break;
}
@@ -293,7 +291,6 @@ public class TransientItemStateManager i
modifiedStates.remove(state);
staleStates.add(state);
break;
- case MODIFIED:
case INVALIDATED:
// MODIFIED, INVALIDATED: ignore.
log.debug("Item " + state.getName() + " changed status from " + previousStatus +