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
> ------------------------------------------------------------------- 
> 
> 
> 
> 
> 
> 

Reply via email to