You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@isis.apache.org by "Oscar Bou (JIRA)" <ji...@apache.org> on 2016/08/18 13:32:21 UTC

[jira] [Updated] (ISIS-1476) Transaction interface: Expose "clearAbortCause" for don't pick up handled persistence Exceptions

     [ https://issues.apache.org/jira/browse/ISIS-1476?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Oscar Bou updated ISIS-1476:
----------------------------
    Summary: Transaction interface: Expose "clearAbortCause" for don't pick up handled persistence Exceptions  (was: Transaction interface: Expose "clearAbortCause" for avoiding handled persistence Exceptions)

> Transaction interface: Expose "clearAbortCause" for don't pick up handled persistence Exceptions
> ------------------------------------------------------------------------------------------------
>
>                 Key: ISIS-1476
>                 URL: https://issues.apache.org/jira/browse/ISIS-1476
>             Project: Isis
>          Issue Type: Improvement
>            Reporter: Oscar Bou
>            Assignee: Oscar Bou
>
> That way we avoid casting from "Transaction" to "IsisTransaction", and can support use cases that properly handle the Exception without further consequences.
> For example, creating an idempotent action that first tries to create an object and, if an SQLIntegrityConstraintViolationException occurs, return the previously persisted entity, avoiding one SELECT on massive bulk actions.
> {code}
>  // {{ addMessage (action)
>     @Action(semantics=SemanticsOf.IDEMPOTENT)
>     public Message addMessageIdempotent(
> 	    final String receiptHandle, final String notificationId,
> 	    final Clob xmlContent, final String notificationType, 
> 	    final DateTime publishTime, final String payloadVersion) {
> 	Notification unprocessedNotification = null;
> 	try {
> 	    unprocessedMessage = this.wrap(this).createMessage(receiptHandle,
> 		    notificationId, amazonMarketplace, xmlContent,
> 		    notificationType, publishTime, payloadVersion, sellerId);
> 	} catch (final JDODataStoreException e) {
> 	    if (Iterables.filter(Throwables.getCausalChain(e),
> 		    SQLIntegrityConstraintViolationException.class) != null) {
> 		((IsisTransaction) this.transactionService.currentTransaction())
> 			.clearAbortCause();
> 		unprocessedMessage = this.wrap(this).findByReceiptHandle(
> 			receiptHandle);
> 	    } else {
> 		throw e;
> 	    }
> 	}
> 	return unprocessedMessage;
>     }
>     // }}
> {code}
> If published in the "Transaction" interface, the casting can be avoided, being simply:
> {code}
> 		this.transactionService.currentTransaction()
> 			.clearAbortCause();
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)