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