Thank you Richard for the precious help. Indeed, simplifying UIMA is a big selling point of uimaFIT, I wasn't complaining :)

Best,
Hugo

Le 2014-06-25 18:23, Richard Eckart de Castilho a écrit :
Hello Hugo,

the resource is not stored in the resource manager under the name
that you specify, but under a "qualified name" that consists of the
qualified context name and the resource key to which the resource is
bound.

The proper way to access the resource after the execution would be
through the UIMAContext of the AE, e.g.

    AnalysisEngine ae = createEngine(
            DummyAE3.class,
            DummyAE3.RES_KEY_1, createExternalResourceDescription(
                    "lala", AnnotatedResource.class,
                    AnnotatedResource.PARAM_VALUE, "1"));

    ... = ae.getUimaContext().getResourceObject(DummyAE3.RES_KEY_1);

The alternative would be to manually construct the qualified name,
which then would go like this:

   ... = ae.getResourceManager().getResource(
            ae.getUimaContextAdmin().getQualifiedContextName() +
DummyAE3.RES_KEY_1);

Sure, uimaFIT ( mind capitalization ;) ) does hide a lot of the
details - that's the point!

But the names under which resources are stored in the resource
manager is determined by the UIMA core:

The ResourceManager_Impl has multiple internal lookup tables. The one
used for getResource() uses these qualified names and a resource can
appear in there multiple times, bound to multiple qualified names
(multiple AEs). There is another lookp table called
mInternalResourceRegistrationMap in which each resource appears only
once under the name that you can optionally specify in the
createExternalResourceDescription call (here "lala"). However, that
table is very unfortunately not accessible.

Cheers,

-- Richard

On 25.06.2014, at 09:37, Hugo Mougard <m...@crydee.eu> wrote:

Dear UIMA list,

I've read the different tutorials about resources a couple of times but haven't found a straightforward way to accomplish what I'm trying to do.

Using UIMAfit, I declare a resource and use it in several AEs, through a SimplePipeline. Once the processing is done, I'd like to access that resource (it's some kind of HashMap on steroids). Accessing it in onCollectionProcessComplete is not enough for me here, because I run several of such pipelines and need the results of all of them to obtain the information I'm interested in.

I've tried accessing it with

   myAe.getResourceManager().getResource("resName");

where resName is the name I gave it when declaring it with createExternalResourceDescription.

However this NPEs and I'm not sure how to proceed from there. It seems UIMAfit is hiding a lot of details of the original UIMA resource management so I may very well just have missed some very important concept, if so please enlighten me :)

Cheers,
Hugo

Reply via email to