[
https://issues.apache.org/jira/browse/STANBOL-374?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rupert Westenthaler resolved STANBOL-374.
-----------------------------------------
Resolution: Fixed
fixed with revision #1205331
NOTES:
* The Interface of the implementation is slightly different as in the
Description.
* The DataFileTracker is an own Service with a dependency to the
DataFileProvider
* The DataFileTracker includes also a constructor that allows it usage outside
an OSGI environment.
> Add support for Resource Tracking to the DataFileProvider infrastructure
> ------------------------------------------------------------------------
>
> Key: STANBOL-374
> URL: https://issues.apache.org/jira/browse/STANBOL-374
> Project: Stanbol
> Issue Type: New Feature
> Components: Commons
> Reporter: Rupert Westenthaler
> Assignee: Rupert Westenthaler
> Labels: DataFileProvider
>
> Currently the DataFileProvider only supports requests for resources. If a
> specific resource is available the caller gets an InputStream for that
> Resource. Otherwise a IOException is thrown.
> Here the proposal is to add an new ResourceTracker Service that allows to
> register/unregister ResourceListener instances
> @Service
> ResourceTracker
> /** adds an listener for a resource with that name and a bundle **/
> + void add(ResourceListener listener, String bundleSymbolicName,
> String name)
> /** adds an listener for a resource with a given name **/
> + void add(ResourceListener listener, String name)
> /** removes all resources for that specific listener instance. Useful
> if the listening components gets deactivated. **/
> + void removeAll(ResourceListener listener)
> /** removes listening to that the resource with that name/bundle for
> that listener **/
> + void remove(ResourceListener listener, String bundleSymbolicName,
> String name)
> /** removes listening to that resource for that listener **/
> + void remove(ResourceListener listener, String name)
> ResourceListener (interface)
> /** Called as soon as a resource gets available. Also called for
> newly registered
> * resources if the requested resource is already present at the time
> of registration
> * @param resource the name of the available resource
> * @param is the inputstream for that resource
> * @return If <code>true</code> the registration for this event is
> automatically removed.
> * Otherwise the registration is kept and can be used to track if the
> resource get unavailable.
> **/
> + boolean available(String resource, InputStream is)
> /** Called as soon as a previous available resource is no longer
> available
> * @param resource The name of the unavailable resource
> * @return If <code>true</code> the registration for this event is
> automatically removed.
> * Otherwise the component receiving this call needs to remove the
> registration them self.
> **/
> +boolean unavailable(String resource)
> Implementation:
> The suggestion is to
> * add this to the "org.apache.stanbol.commons.stanboltools.datafileprovider"
> bundle
> * add the "ResourceTracker" and "ResourceListener" interface to the
> "org.apache.stanbol.commons.stanboltools.datafileprovider" package
> * add the implementation directly to the
> "org.apache.stanbol.commons.stanboltools.datafileprovider.impl.MainDataFileProvider"
> * use an own Thread that calls "getInputStream(...)" for all registered
> resources in fixed intervals (e.g. 5sec) . Computational overhead for the
> periodical polls should be minimal.
> * The poll interval should a configurable.
> Intended Usage:
> * Initially I require this feature to listen for archived Solr indexes copied
> to the /datafiles folders. Currently users need to manually restart the
> Component that manages SolrIndexes after the according file is available.
> * This feature will also be handy if we implement a functionality that allows
> to download referenced datafiles via the web, because as soon as the
> downloads completes the components depending on a resource could be notified.
> * This feature could also optionally be used to deactivate functionality by
> deleting the corresponding datafiles form the /datafiles folder. (e.g. the
> OpenNLP component loads Language models via the DatafileProvider. Currently
> the are kept in Memory even if the corresponding DataFile is no longer
> available. Even if the user provides an updated version. The old version is
> still available (in-memory) and the new one is only used after a restart of
> the Stanbol environment. This feature would allow to get notified as soon as
> a model is deleted and would trigger an re-initialisation of the model as
> soon as the updated datafile is available again.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira