[ 
https://issues.apache.org/jira/browse/UIMA-5763?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16444426#comment-16444426
 ] 

Richard Eckart de Castilho commented on UIMA-5763:
--------------------------------------------------

I would welcome a flag that marks a CAS as read-only. We have recently 
implemented write-protection layer around the CAS based on Java dynamic proxies 
- but a flag within the CAS proper would be a much better solution.

Use-case: an annotation tool where the CAS is updated by a user action, then 
saved, and then forwarded to other parts of the application for post-update 
actions. We want to avoid that the post-update actions make modifications to 
the CAS. Any such modifications would likely be bugs because after the CAS has 
been updated and saved once, further updates would not be persisted.

> UIMA: need a way to lock a CAS to prevent user from releasing it prematurely
> ----------------------------------------------------------------------------
>
>                 Key: UIMA-5763
>                 URL: https://issues.apache.org/jira/browse/UIMA-5763
>             Project: UIMA
>          Issue Type: New Feature
>          Components: UIMA
>            Reporter: Jerry Cwiklik
>            Assignee: Marshall Schor
>            Priority: Major
>             Fix For: 3.0.1SDK, 2.10.3SDK
>
>
> UIMA-AS client supports an async style of sending CASes for processing to a 
> remote service. When using sendCAS( CAS aCas), the code serializes CAS and 
> dispatches it to the remote but keeps the CAS in a cache. When a reply comes, 
> the cached CAS is used to deserialize a response. The contract is that the 
> user code should not call CAS.release(). When a reply finally comes, the CAS 
> is handed over to an application callback and upon return from the callback, 
> the UIMA-AS releases the CAS. 
> Problem: there is nothing to prevent user code to violate the contract. If 
> CAS.release() is called while UIMA-AS client awaits reply (or during reply 
> deserialization), bad things happen. In a specific use case, a NPE was thrown 
> during deserialization and debugging was quite painful.
> Proposed solution: to protect integrity of a CAS need a way to lock/unlock 
> it. Such facility can be added to CASImpl class. When a user code tries to 
> call release()  when a CAS is locked,  the code should throw an exception 
> (IllegalStateException or similar). 
> WDYT?
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to