Author: rwesten
Date: Wed May 16 10:01:47 2012
New Revision: 1339101

URL: http://svn.apache.org/viewvc?rev=1339101&view=rev
Log:
STANBOL-583: Ensures write locks are used while writing Enhancements in the 
CELI Lemmatizer engine.

In my opinnion the Lemmatizer Engine is now ready to use. However I would 
really like to see unit tests for longer tests with special chars to ensure the 
absence of similar issues as for the CELI NER engine before giving a final 
green light. 

Modified:
    
incubator/stanbol/branches/celi-enhancement-engines/engines/celi/src/main/java/org/apache/stanbol/enhancer/engines/celi/lemmatizer/impl/CeliLemmatizerEnhancementEngine.java

Modified: 
incubator/stanbol/branches/celi-enhancement-engines/engines/celi/src/main/java/org/apache/stanbol/enhancer/engines/celi/lemmatizer/impl/CeliLemmatizerEnhancementEngine.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/branches/celi-enhancement-engines/engines/celi/src/main/java/org/apache/stanbol/enhancer/engines/celi/lemmatizer/impl/CeliLemmatizerEnhancementEngine.java?rev=1339101&r1=1339100&r2=1339101&view=diff
==============================================================================
--- 
incubator/stanbol/branches/celi-enhancement-engines/engines/celi/src/main/java/org/apache/stanbol/enhancer/engines/celi/lemmatizer/impl/CeliLemmatizerEnhancementEngine.java
 (original)
+++ 
incubator/stanbol/branches/celi-enhancement-engines/engines/celi/src/main/java/org/apache/stanbol/enhancer/engines/celi/lemmatizer/impl/CeliLemmatizerEnhancementEngine.java
 Wed May 16 10:01:47 2012
@@ -187,13 +187,24 @@ public class CeliLemmatizerEnhancementEn
                        return;
                }
 
-               try {
-                       
-                       MGraph g = ci.getMetadata();
-                       LiteralFactory literalFactory = 
LiteralFactory.getInstance();
+               MGraph g = ci.getMetadata();
+               LiteralFactory literalFactory = LiteralFactory.getInstance();
 
-                       if (this.completeMorphoAnalysis) {
-                               List<LexicalEntry> terms = 
this.client.performMorfologicalAnalysis(text, language);
+               if (this.completeMorphoAnalysis) {
+                   List<LexicalEntry> terms;
+               try {
+                   terms = this.client.performMorfologicalAnalysis(text, 
language);
+               } catch (IOException e) {
+                   throw new EngineException("Error while calling the CELI 
Lemmatizer"
+                       +" service (configured URL: "
+                       +serviceURL+")!",e);
+               } catch (SOAPException e) {
+                   throw new EngineException("Error wile encoding/decoding the 
request/"
+                       +"response to the CELI lemmatizer service!",e);
+               }
+               //get a write lock before writing the enhancements
+               ci.getLock().writeLock().lock();
+               try {
                                for (LexicalEntry le : terms) {
                                    if(!le.termReadings.isEmpty()){
                                        UriRef textAnnotation = 
EnhancementEngineHelper.createTextEnhancement(ci, this);
@@ -215,22 +226,31 @@ public class CeliLemmatizerEnhancementEn
                                        }
                                    } //TODO: check if it is OK to ignore 
lexical entries with no readings
                                }
-                       } else {
-                               String lemmatizedContents = 
this.client.lemmatizeContents(text, language);
-
+               } finally {
+                   ci.getLock().writeLock().unlock();
+               }
+               } else {
+                   String lemmatizedContents;
+               try {
+                   lemmatizedContents = this.client.lemmatizeContents(text, 
language);
+            } catch (IOException e) {
+                throw new EngineException("Error while calling the CELI 
Lemmatizer"
+                    +" service (configured URL: "
+                    +serviceURL+")!",e);
+            } catch (SOAPException e) {
+                throw new EngineException("Error wile encoding/decoding the 
request/"
+                    +"response to the CELI lemmatizer service!",e);
+            }
+            //get a write lock before writing the enhancements
+            ci.getLock().writeLock().lock();
+            try {
                                UriRef textEnhancement = 
EnhancementEngineHelper.createTextEnhancement(ci, this);
                                g.add(new TripleImpl(textEnhancement, 
hasLemmaForm, 
                                    new 
PlainLiteralImpl(lemmatizedContents,lang)));
-                       }
-        } catch (IOException e) {
-            throw new EngineException("Error while calling the CELI Lemmatizer"
-                +" service (configured URL: "
-                +serviceURL+")!",e);
-        } catch (SOAPException e) {
-            throw new EngineException("Error wile encoding/decoding the 
request/"
-                +"response to the CELI lemmatizer service!",e);
-        } 
-
+            } finally {
+                ci.getLock().writeLock().unlock();
+            }
+               }
        }
 
        private boolean isLangSupported(String language) {


Reply via email to