You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Marshall Schor (JIRA)" <de...@uima.apache.org> on 2016/10/18 21:46:59 UTC

[jira] [Comment Edited] (UIMA-2977) destroy method of shared resources never called

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

Marshall Schor edited comment on UIMA-2977 at 10/18/16 9:46 PM:
----------------------------------------------------------------

Adding Burn's reply from the dev list, slightly edited:
re: *The PEAR support version of this just forwards calls relating to external resources and cas pools to the parent.*
My understanding is that the RM's used by pears are created by copying the 5 resource maps and the CasManager --- so destroying one pear's RM would destroy the resources shared by the others.  (Marshall says: true. But remember, the framework never calls destroy on the Resource Manager; it is up to the overall application to decide if and when to do this.)

We also have a use case where multiple pipelines need to share resources but can't share the CasManager as their typesystems are different, and may be created much later.  We can use the 5-arg constructor to create a subclassed Resource Manager, but this has a problem in that it doesn't share the resources loaded by the original pipeline.  UIMA-5146 will allow a better way to create the other Resource Manager such that it *does* share the resources loaded by the original pipeline.


was (Author: schor):
Adding Burn's reply from the dev list, slightly edited:
re: *The PEAR support version of this just forwards calls relating to external resources and cas pools to the parent.*
My understanding is that the RM's used by pears are created by copying the 5 resource maps and the CasManager --- so destroying one pear's RM would destroy the resources shared by the others.  (Marshall says: true. But remember, the framework never calls destroy on the Resource Manager; it is up to the overall application to decide if and when to do this.)

We also have a use case where multiple pipelines need to share resources but can't share the CasManager as their typesystems are different, and may be created much later.  We can use the 5-arg constructor to create a subclassed Resource Manager, but this has a problem in that it doesn't share the resources loaded by the original pipeline.  UIMA-5146 will allow a better way to create the other Resource Manager such that it **does** share the resources loaded by the original pipeline.

> destroy method of shared resources never called
> -----------------------------------------------
>
>                 Key: UIMA-2977
>                 URL: https://issues.apache.org/jira/browse/UIMA-2977
>             Project: UIMA
>          Issue Type: Bug
>          Components: Core Java Framework
>            Reporter: Richard Eckart de Castilho
>            Assignee: Marshall Schor
>              Labels: Resources
>             Fix For: 3.0.0SDKexp
>
>
> Apparently the ResourceManager and the resources created by the manager do not participate in the usual component life cycle. On other components, such as analysis engines or readers, the destroy() method is called when the component is disposed of. External resources never get notified when they are no longer needed. At least any resources derived from Resource (e.g. DataResource and ParametrizedDataResource) should be notified. The SharedResourceObject interface does not define any such life cycle callback.
> As a side-note: An alternative to the rather heavy-weight Resource interface of UIMA maybe be small life cycle interfaces such as the Spring InitializingBean and DisposableBean interfaces, or Java annotations marking initialization and destruction methods (e.g. @PostConstruct and @PreDestroy).



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