Author: schor
Date: Mon Jul 23 20:55:38 2018
New Revision: 1836513

URL: http://svn.apache.org/viewvc?rev=1836513&view=rev
Log:
[UIMA-5763] add support and test case for CasState

Added:
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CasState.java
Modified:
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/UIMARuntimeException.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/CasPoolTest.java

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/UIMARuntimeException.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/UIMARuntimeException.java?rev=1836513&r1=1836512&r2=1836513&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/UIMARuntimeException.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/UIMARuntimeException.java
 Mon Jul 23 20:55:38 2018
@@ -57,6 +57,11 @@ public class UIMARuntimeException extend
   public static final String CAS_RELEASED_TO_WRONG_CAS_MANAGER = 
"cas_released_to_wrong_cas_manager";
 
   /**
+   * Illegal invocation of casRelease() while awaiting response from a UIMA-AS 
Service.
+   */
+  public static final String CAS_RELEASE_NOT_ALLOWED_WHILE_WAITING_FOR_UIMA_AS 
= "CAS_RELEASE_NOT_ALLOWED_WHILE_WAITING_FOR_UIMA_AS";
+
+  /**
    * Message key for a standard UIMA exception message: "The Ecore model for 
the UIMA built-in types
    * (uima.ecore) was not found in the classpath."
    */

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java?rev=1836513&r1=1836512&r2=1836513&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
 Mon Jul 23 20:55:38 2018
@@ -35,6 +35,7 @@ import java.util.Arrays;
 import java.util.BitSet;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.IdentityHashMap;
@@ -553,7 +554,9 @@ public class CASImpl extends AbstractCas
      *    modify serializers to include reachables only found via id2fs table
      */
     private boolean isId2Fs;
-                
+    
+    private final EnumSet<CasState> casState = EnumSet.noneOf(CasState.class); 
+
     private SharedViewData(CASImpl baseCAS, int initialHeapSize, 
TypeSystemImpl tsi) {
       this.baseCAS = baseCAS;
       this.tsi = tsi;
@@ -868,6 +871,29 @@ public class CASImpl extends AbstractCas
   // package protected to let other things share this info
   final SharedViewData svd; // shared view data
   
+  /**
+   * @param state to add to the set
+   * @return true if the set changed as a result of this operation
+   */
+  public boolean setCasState(CasState state) {
+    return svd.casState.add(state);
+  }
+  
+  /**
+   * @param state to see if it is among the items in this set
+   * @return true if the set contains that state
+   */
+  public boolean containsCasState(CasState state) {
+    return svd.casState.contains(state);
+  }
+
+  /**
+   * @param state to be removed
+   * @return true if it was present, and is now removed
+   */
+  public boolean clearCasState(CasState state) {
+    return svd.casState.remove(state);
+  }
     
   /** The index repository. Referenced by XmiCasSerializer */
   FSIndexRepositoryImpl indexRepository;

Added: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CasState.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CasState.java?rev=1836513&view=auto
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CasState.java
 (added)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CasState.java
 Mon Jul 23 20:55:38 2018
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.uima.cas.impl;
+
+/**
+ * states the CAS can be in
+ */
+public enum CasState {
+   UIMA_AS_WAIT_4_RESPONSE,   // when in this state, uima-as is awaiting 
response from a remote,
+                              // any attempt "release" this cas will throw an 
exception
+   // READ_ONLY,              // multi-threaded access for reading allowed, no 
updating 
+   // NO_ACCESS,              // no reading or writing (except by privileged 
internal operations)
+}

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java?rev=1836513&r1=1836512&r2=1836513&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java
 Mon Jul 23 20:55:38 2018
@@ -34,6 +34,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.CASException;
 import org.apache.uima.cas.TypeSystem;
 import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.CasState;
 import org.apache.uima.internal.util.JmxMBeanAgent;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.resource.CasDefinition;
@@ -188,6 +189,10 @@ public class CasManager_impl implements
     CASImpl baseCas = (aCAS instanceof JCas) ? 
((JCas)aCAS).getCasImpl().getBaseCAS() 
                                              : ((CASImpl)aCAS).getBaseCAS();
 
+    if (baseCas.containsCasState(CasState.UIMA_AS_WAIT_4_RESPONSE)) {
+      throw new 
UIMARuntimeException(UIMARuntimeException.CAS_RELEASE_NOT_ALLOWED_WHILE_WAITING_FOR_UIMA_AS,
 new Object[0]);
+    }
+    
     CasPool pool = mCasToCasPoolMap.get(baseCas);
     if (pool == null) {
       // CAS doesn't belong to this CasManager!

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties?rev=1836513&r1=1836512&r2=1836513&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties
 Mon Jul 23 20:55:38 2018
@@ -27,6 +27,8 @@
 cas_released_to_wrong_cas_manager = CasManager.releaseCas(CAS) was called with 
a CAS that does not belong \
                to this CasManager.
 
+CAS_RELEASE_NOT_ALLOWED_WHILE_WAITING_FOR_UIMA_AS = Illegal invocation of 
casRelease() while awaiting response from a UIMA-AS Service.
+
 uima_ecore_not_found = The Ecore model for the UIMA built-in types 
(uima.ecore) was not found in the classpath.
 
 ecore_unresolved_proxy =  The Ecore model contained an unresolved proxy {0}.

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/CasPoolTest.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/CasPoolTest.java?rev=1836513&r1=1836512&r2=1836513&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/CasPoolTest.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/CasPoolTest.java
 Mon Jul 23 20:55:38 2018
@@ -26,6 +26,7 @@ import java.util.Random;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.uima.UIMAFramework;
+import org.apache.uima.UIMARuntimeException;
 import org.apache.uima.analysis_engine.AnalysisEngine;
 import org.apache.uima.analysis_engine.AnalysisEngineDescription;
 import org.apache.uima.cas.CAS;
@@ -77,6 +78,31 @@ public class CasPoolTest extends TestCas
     
   }
   
+  public void testCasReleaseNotAllowed() throws Exception {
+    final Properties p = new Properties();
+    p.put(UIMAFramework.CAS_INITIAL_HEAP_SIZE,  200);   
+    casManager.defineCasPool("id",  2,  p);
+    CASImpl c = (CASImpl) casManager.getCas("id");
+    c.setCasState(CasState.UIMA_AS_WAIT_4_RESPONSE);
+    Exception ex = null;
+    try {
+      c.release();
+    } catch (UIMARuntimeException e) {
+      ex = e;
+    }
+    assertTrue(ex != null && 
+        ex.getMessage().equals("Illegal invocation of casRelease() while 
awaiting response from a UIMA-AS Service."));
+    c.clearCasState(CasState.UIMA_AS_WAIT_4_RESPONSE);
+    ex = null;
+    try {
+      c.release();
+    } catch (UIMARuntimeException e) {
+      ex = e;
+    }
+    assertTrue(ex == null);
+        
+  }
+
   public void testMultiThread() throws Exception {
     final Properties p = new Properties();
     p.put(UIMAFramework.CAS_INITIAL_HEAP_SIZE,  200);   


Reply via email to