Thank you, Richard. This information was very helpful. I ended up having my
resource implement DataResource, but it was also key to realize I needed to
override the initialize() method and recognize that the ResourceSpecifier
parameter there is an instance of CustomResourceSpecifier, from which I can get
my parameter values.
On Mar 17, 2012, at 6:18 AM, Richard Eckart de Castilho wrote:
> Hi Stephan,
>
> let's see if I can help you out here.
>
> 1) For a resource with parameters set statically in the descriptor, your
> resource should extend
> from Resource_ImplBase (implements DataResource).
>
> 2) For a resource that needs to load data from aURL, you resource class can
> be anything and
> implement SharedResourceObject. It's also possible to set parameters
> statically in the
> descriptor (see below).
>
> 3) If you do not know the values of the parameters at the time you write the
> descriptor, then
> you need to use a ParameterizedDataResource. You can get an instance of
> such a resource
> within your AE using
>
> getContext().getResourceObject("theResource", new String[] { param1,
> param2, param3... }).
>
>
> Resources of the type 1 and 2 are instantiated when the pipeline components
> are instantiated.
> The type 3 resource is instantiated when you try to access it using
> getResourceObject().
>
> Now to the descriptors that we use for the different types in uimaFIT:
>
> 1) CustomResourceSpecifier
>
> 2) FileResourceSpecifier (if the resource does not need parameters),
> otherwise
> ConfigurableDataResourceSpecifier
>
> 3) CustomResourceSpecifier
>
>
> If you are not bound to using XML descriptors, you might want to have a look
> at uimaFIT
> for programmatically creating component and resource descriptions. Here a
> little example
> binding an external resource to two different AEs:
>
> ExternalResourceDescription extDesc = createExternalResourceDescription(
> SharedModel.class, new File("somemodel.bin"));
>
> // Binding external resource to each Annotator individually
> AnalysisEngineDescription aed1 = createPrimitiveDescription(Annotator.class,
> Annotator.MODEL_KEY, extDesc);
> AnalysisEngineDescription aed2 =
> createPrimitiveDescription(Annotator.class,
> Annotator.MODEL_KEY, extDesc);
>
> // Process something with the two AEs
> AnalysisEngineDescription aaed = createAggregateDescription(aed1, aed2);
> AnalysisEngine ae = createAggregate(aaed);
> ae.process(ae.newJCas());
>
> (Source: http://code.google.com/p/uimafit/wiki/uimaFitResources)
>
> Cheers,
>
> -- Richard
>
> Am 16.03.2012 um 21:00 schrieb Stephan Greene:
>
>> Well, to answer my own question, I see that I can set a
>> CustomResourceSpecifier by editing my descriptor xml directly (thanks to a
>> post by Adam Lally in 2008;
>> http://www.mail-archive.com/[email protected]/msg01437.html )
>>
>> I have this now:
>>
>> <externalResource>
>> <name>theResource</name>
>> <description>my resource</description>
>> <customResourceSpecifier>
>>
>> <resourceClassName>com.my.resourcemanagers.MyDataResource</resourceClassName>
>> <parameters>
>> <parameter name="param1" value="paramval1"/>
>> <parameter name="param2" value="paramval2"/>
>> </parameters>
>> </customResourceSpecifier>
>> </externalResource>
>>
>>
>> I then implemented as
>>
>> public class MyDataResource extends Resource_ImplBase implements
>> ParameterizedDataResource, DataResource, SharedResourceObject
>>
>> This actually works and does what I want. But I suspect I'm not really using
>> the framework correctly. Does anyone knows the canonical way to use these
>> various Resource classes?
>>
>>
>> Stephan
>>
>> On Mar 16, 2012, at 12:30 PM, Stephan Greene wrote:
>>
>>> I am implementing a SharedResourceObject which requires a DataResource more
>>> involved than just a url to access the data the resource represents. I need
>>> something like the ParameterizedDataResource -- but I don't see how to
>>> instantiate this. The load() method of SharedResourceObject takes a
>>> DataResource object parameter. How do I configure my SharedResourceObject
>>> to use some other kind of DataResource? I know how to implement the data
>>> resource I need, but I can't figure out how to tell the framework that I
>>> want to use my own data resource with my own SharedResourceObject.
>>>
>>> Does it involve a CustomResourceSpecifier? I can't figure out how to use
>>> that, either. Any help appreciated.
>>>
>>> Stephan
>
> --
> -------------------------------------------------------------------
> Richard Eckart de Castilho
> Technical Lead
> Ubiquitous Knowledge Processing Lab (UKP-TUD)
> FB 20 Computer Science Department
> Technische Universität Darmstadt
> Hochschulstr. 10, D-64289 Darmstadt, Germany
> phone [+49] (0)6151 16-7477, fax -5455, room S2/02/B117
> [email protected]
> www.ukp.tu-darmstadt.de
> Web Research at TU Darmstadt (WeRC) www.werc.tu-darmstadt.de
> -------------------------------------------------------------------
>
>
>
>
>
>