public static URI getParentEntityUri(final WonMessage message) { URI parentURI = null; WonMessageDirection direction = message.getEnvelopeType(); if (direction == WonMessageDirection.FROM_EXTERNAL ){ parentURI = getParentUriFromReceiverProperties(message); } else if (direction == WonMessageDirection.FROM_OWNER || direction == WonMessageDirection.FROM_SYSTEM){ parentURI = getParentUriFromSenderProperties(message); } return parentURI; }
URI isResponseToURI = WonMessageUtils.getLocalIsResponseToURI(message); MessageEventPlaceholder messageEventPlaceholder = messageEventRepository.findOneByMessageURI(isResponseToURI); String methodName = "selectLatestMessage::response"; URI parentUri = WonMessageUtils.getParentEntityUri(message); messageEventPlaceholder = messageEventRepository.findNewestByParentURI(parentUri); if (messageEventPlaceholder != null) { URI parentNeedUri = WonMessageUtils.getParentNeedUri(message); List<MessageEventPlaceholder> eventsToSelect = messageEventRepository .findByParentURIAndMessageType(parentNeedUri, WonMessageType
@Override //we use READ_COMMITTED because we want to wait for an exclusive lock will accept data written by a concurrent transaction that commits before we read public WonMessage process(WonMessage message) throws WonMessageProcessingException { URI parentURI = WonMessageUtils.getParentEntityUri(message); updateResponseInfo(message); saveMessage(message, parentURI); return message; }
/** * Selects all unreferenced messages for referencing */ private void selectUnreferenceMessages(Set<MessageUriAndParentUri> selectedUris, final WonMessage message) throws WonMessageProcessingException { if (message.getMessageType() == WonMessageType.CREATE_NEED) return; URI parentUri = WonMessageUtils.getParentEntityUri(message); //find all unreferenced messages for the current message's parent List<MessageEventPlaceholder> messageEventPlaceholders = messageEventRepository .findByParentURIAndNotReferencedByOtherMessage(parentUri); //load the WonMessages for the placeholders selectedUris.addAll(messageEventPlaceholders .stream() .map(p -> new MessageUriAndParentUri(p.getMessageURI(), p.getParentURI())) .collect(Collectors.toList())); }
private void lockParent(WonMessage message) { //get the parent's URI (either a connection or a need URI parentURI = WonMessageUtils.getParentEntityUri(message); //try a connection: Connection con = connectionRepository.findOneByConnectionURIForUpdate(parentURI); if (con != null) { connectionEventContainerRepository.findOneByParentUriForUpdate(parentURI); } else { needRepository.findOneByNeedURIForUpdate(parentURI); needEventContainerRepository.findOneByParentUriForUpdate(parentURI); } } }