From: <di...@us...> - 2013-07-14 19:43:45
|
Revision: 18683 http://sourceforge.net/p/exist/code/18683 Author: dizzzz Date: 2013-07-14 19:43:40 +0000 (Sun, 14 Jul 2013) Log Message: ----------- [bugfix] during replication (receiver) an action should not fail, or at least as less as possible; added fallback mechanism. Makes the extension more reliable in a sense. Modified Paths: -------------- trunk/eXist/extensions/replication/src/org/exist/replication/jms/subscribe/JMSMessageListener.java Modified: trunk/eXist/extensions/replication/src/org/exist/replication/jms/subscribe/JMSMessageListener.java =================================================================== --- trunk/eXist/extensions/replication/src/org/exist/replication/jms/subscribe/JMSMessageListener.java 2013-07-14 16:02:21 UTC (rev 18682) +++ trunk/eXist/extensions/replication/src/org/exist/replication/jms/subscribe/JMSMessageListener.java 2013-07-14 19:43:40 UTC (rev 18683) @@ -215,7 +215,6 @@ */ private void handleCollection(eXistMessage em) { - switch (em.getResourceOperation()) { case CREATE: case UPDATE: @@ -248,7 +247,6 @@ Map<String, Object> props = em.getMetadata(); - XmldbURI sourcePath = XmldbURI.create(em.getResourcePath()); XmldbURI colURI = sourcePath.removeLastSegment(); XmldbURI docURI = sourcePath.lastSegment(); @@ -263,8 +261,9 @@ mime = MimeType.BINARY_TYPE; } - + // // Get OWNER + /// String userName = null; Object prop = props.get(MessageHelper.EXIST_RESOURCE_OWNER); if (prop != null && prop instanceof String) { @@ -275,10 +274,14 @@ if (account == null) { String errorText = String.format("Username %s does not exist.", userName); LOG.error(errorText); - throw new MessageReceiveException(errorText); + //throw new MessageReceiveException(errorText); + account = securityManager.getSystemSubject(); + userName = account.getName(); } + // // Get GROUP + // String groupName = null; prop = props.get(MessageHelper.EXIST_RESOURCE_GROUP); if (prop != null && prop instanceof String) { @@ -289,10 +292,14 @@ if (group == null) { String errorText = String.format("Group %s does not exist.", groupName); LOG.error(errorText); - throw new MessageReceiveException(errorText); + //throw new MessageReceiveException(errorText); + group = securityManager.getSystemSubject().getDefaultGroup(); + groupName = group.getName(); } + // // Get MIME_TYPE + // MimeTable mimeTable = MimeTable.getInstance(); String mimeType = null; prop = props.get(MessageHelper.EXIST_RESOURCE_MIMETYPE); @@ -314,8 +321,6 @@ mimeType = mT.getName(); } - - // Get/Set permissions Integer mode = null; prop = props.get(MessageHelper.EXIST_RESOURCE_MODE); @@ -323,9 +328,6 @@ mode = (Integer) prop; } - - - // Start transaction TransactionManager txnManager = brokerPool.getTransactionManager(); Txn txn = txnManager.beginTransaction(); @@ -334,15 +336,16 @@ // TODO get user broker = brokerPool.get(securityManager.getSystemSubject()); - // Check if collection exists. not likely to happen since availability is checked - // by ResourceFactory collection = broker.openCollection(colURI, Lock.WRITE_LOCK); -// collection.setTriggersEnabled(false); + if (collection == null) { String errorMessage = String.format("Collection %s does not exist", colURI); LOG.error(errorMessage); - txnManager.abort(txn); - throw new MessageReceiveException(errorMessage); + //txnManager.abort(txn); + //throw new MessageReceiveException(errorMessage); + + // Create collection anyway + collection=broker.getOrCreateCollection(txn, colURI); } DocumentImpl doc = null; @@ -423,6 +426,8 @@ /** * Metadata is updated in database + * + * TODO not usable yet */ private void updateMetadataDocument(eXistMessage em) { // Permissions @@ -451,7 +456,10 @@ String errorText = String.format("Collection does not exist %s", colURI); LOG.error(errorText); txnManager.abort(txn); - throw new MessageReceiveException(errorText); + //throw new MessageReceiveException(errorText); + + // be silent + return; } // Open document if possible, else abort @@ -460,7 +468,10 @@ String errorText = String.format("No resource found for path: %s", sourcePath); LOG.error(errorText); txnManager.abort(txn); - throw new MessageReceiveException(errorText); + //throw new MessageReceiveException(errorText); + + // be silent + return; } DocumentMetadata metadata = resource.getMetadata(); @@ -515,7 +526,10 @@ String errorText = String.format("Collection does not exist %s", colURI); LOG.error(errorText); txnManager.abort(txn); - throw new MessageReceiveException(errorText); + //throw new MessageReceiveException(errorText); + + // silently ignore + return; } // Open document if possible, else abort @@ -524,7 +538,10 @@ String errorText = String.format("No resource found for path: %s", sourcePath); LOG.error(errorText); txnManager.abort(txn); - throw new MessageReceiveException(errorText); + //throw new MessageReceiveException(errorText); + + // silently ignore + return; } // This delete is based on mime-type /ljo if (resource.getResourceType() == DocumentImpl.BINARY_FILE) { @@ -550,7 +567,6 @@ } finally { - // TODO: check if can be done earlier if (collection != null) { collection.release(Lock.WRITE_LOCK); } @@ -587,6 +603,7 @@ collection = broker.openCollection(sourcePath, Lock.WRITE_LOCK); if (collection == null) { txnManager.abort(txn); + // be silent return; } @@ -644,7 +661,10 @@ if (account == null) { String errorText = String.format("Username %s does not exist.", userName); LOG.error(errorText); - throw new MessageReceiveException(errorText); + //throw new MessageReceiveException(errorText); + + account = securityManager.getSystemSubject(); + userName = account.getName(); } // Get GROUP @@ -654,6 +674,15 @@ groupName = (String) prop; } + Group group = securityManager.getGroup(groupName); + if (group == null) { + String errorText = String.format("Group %s does not exist.", groupName); + LOG.error(errorText); + //throw new MessageReceiveException(errorText); + group = securityManager.getSystemSubject().getDefaultGroup(); + groupName = group.getName(); + } + // Get/Set permissions Integer mode = null; prop = props.get(MessageHelper.EXIST_RESOURCE_MODE); @@ -678,7 +707,10 @@ String errorText = String.format("Collection %s already exists", sourcePath); LOG.error(errorText); txnManager.abort(txn); - throw new MessageReceiveException(errorText); + //throw new MessageReceiveException(errorText); + + // silently ignore + return; } // Create collection @@ -756,7 +788,10 @@ String errorMessage = String.format("Collection not found: %s", sourceColURI); LOG.error(errorMessage); txnManager.abort(txn); - throw new MessageReceiveException(errorMessage); + //throw new MessageReceiveException(errorMessage); + + // be silent + return; } // Open document if possible, else abort @@ -765,7 +800,10 @@ String errorMessage = String.format("No resource found for path: %s", sourcePath); LOG.error(errorMessage); txnManager.abort(txn); - throw new MessageReceiveException(errorMessage); + //throw new MessageReceiveException(errorMessage); + + // be silent + return; } // Open collection if possible, else abort @@ -774,7 +812,10 @@ String errorMessage = String.format("Destination collection %s does not exist.", destColURI); LOG.error(errorMessage); txnManager.abort(txn); - throw new MessageReceiveException(errorMessage); + //throw new MessageReceiveException(errorMessage); + + // be silent + return; } @@ -843,7 +884,10 @@ String errorMessage = String.format("Collection %s does not exist.", sourcePath); LOG.error(errorMessage); txnManager.abort(txn); - throw new MessageReceiveException(errorMessage); + //throw new MessageReceiveException(errorMessage); + + // be silent + return; } @@ -853,7 +897,10 @@ String errorMessage = String.format("Destination collection %s does not exist.", destColURI); LOG.error(errorMessage); txnManager.abort(txn); - throw new MessageReceiveException(errorMessage); + //throw new MessageReceiveException(errorMessage); + + // be silent + return; } // Perform actual move/copy |