jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From defeng <defeng...@gmail.com>
Subject Replace cluster-wide lock to itemstate-wide lock
Date Wed, 18 Feb 2009 17:04:15 GMT

Currently when I update an itemstate, I need to acquire a cluster lock
(Journal.doLock()). This lock will block any update on others itemstates. I
want to only lock *one* itemstate in the cluster. So I want to modify the
SharedISM.update( ). (I donot use XA). Is there any side-effect? 

    public void update(ChangeLog local, EventStateCollectionFactory factory)
			throws ReferentialIntegrityException, StaleItemStateException,
			ItemStateException {
    	
		// beginUpdate(oneItemLog, factory, null).end();
		
  		Iterator deletedStates = local.deletedStates();
		while (deletedStates.hasNext()) {
			ItemState state = (ItemState) deletedStates.next();
			updateOneItemState(state, factory);
		}
		Iterator modifiedStates = local.modifiedStates();
		while (modifiedStates.hasNext()) {
			ItemState state = (ItemState) modifiedStates.next();
			updateOneItemState(state, factory);

		}
		Iterator addedStates = local.addedStates();
		while (addedStates.hasNext()) {
			ItemState state = (ItemState) addedStates.next();
			updateOneItemState(state, factory);
		}
	}

    private void updateOneItemState(ItemState state,
EventStateCollectionFactory factory)
    	throws ReferentialIntegrityException, StaleItemStateException,
ItemStateException{
    	ChangeLog oneItemLog  = new ChangeLog();
    	oneItemLog.added(state);
         try {
      	   doLock(state);//Only lock this state in the cluster
      	   beginUpdate(oneItemLog, factory, null).end();
         }finally{
      	   unLock(state);
         }
    }
-- 
View this message in context: http://www.nabble.com/Replace-cluster-wide-lock-to-itemstate-wide-lock-tp22083258p22083258.html
Sent from the Jackrabbit - Dev mailing list archive at Nabble.com.


Mime
View raw message