Your suggestion to create a new type and add it to the CAS worked perfectly and was straightforward to implement. Thank you!
Larry -----Original Message----- From: Richard Eckart de Castilho [mailto:[email protected]] Sent: Monday, January 07, 2013 9:29 AM To: <[email protected]> Subject: Re: Sessions Am 07.01.2013 um 14:57 schrieb "Kline, Larry D" <[email protected]>: > The reason I want to use a session object to store my properties is > that the API says these sessions are per client. My UIMA app is > running in a JBoss container that is accessed by a web service call. > So multiple clients could be accessing it simultaneously, each one > passing slightly different parameters. In the web service method I do this: > > protected AnalysisEngine recognitionAE; > ... > > recognitionAE.getUimaContext().getSession().put(STEMMER_KEY_NAME, > stemmerAlgorithmKey); > > Then later in my custom flow controller I want to get this property > and use it to control the flow. > > I'm not familiar with the external resource support. Can I do > something similar using that? The external resource mechanism allows you to share an object between UIMA components. You tell UIMA how to instantiate this object as part of your analysis engine description (or aggregate AE description). The object is instantiated once per UIMA root context, so should have the same scope as the session. I have no idea if external resources can be accessed from a FlowController. Your concept of "client" and that used in the documentation of the session may be slightly different. I am pretty sure the session documentation refers to a UIMA deployment which is distributed on a network. Every node (client) in that network, e.g. every UIMA-AS deployment, has its own session - they are not in any way synchronized across the network. In your case, to make sure a session (or external resource below) is not shared between clients accessing your web application, you need to make sure that your recognitionAE instance is not shared between web clients - or put it otherwise - it is not thread-safe when you store data in the session. I'd probably create a new UIMA type which holds such information and add it to the CAS. That way, the CAS has some metadata on how it was processed and it can be accessed by the FlowController. This also restores the thread-safety and if your annotator is programmed in a thread-safe way, you can instantiate it once and share it between all your clients. Since the instantiation of an analysis engine can be a costly process, you may want to consider that. Cheers, -- Richard -- ------------------------------------------------------------------- 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 ------------------------------------------------------------------- </pre>The contents of this electronic mail message and any attachments are confidential, possibly privileged and intended for the addressee(s) only.<br>Only the addressee(s) may read, disseminate, retain or otherwise use this message. If received in error, please immediately inform the sender and then delete this message without disclosing its contents to anyone.</pre>
