You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2014/04/16 17:24:41 UTC
svn commit: r1587942 - in /uima/uimaj/trunk/uimaj-core/src/main:
java/org/apache/uima/UIMARuntimeException.java
java/org/apache/uima/resource/impl/CasManager_impl.java
resources/org/apache/uima/UIMAException_Messages.properties
Author: schor
Date: Wed Apr 16 15:24:41 2014
New Revision: 1587942
URL: http://svn.apache.org/r1587942
Log:
[UIMA-1249] allow initialization of additional instances of a pipeline with the same resourcemanager, after the cas pool has been defined. Otherwise, report an error.
Modified:
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMARuntimeException.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java
uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMARuntimeException.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMARuntimeException.java?rev=1587942&r1=1587941&r2=1587942&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMARuntimeException.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMARuntimeException.java Wed Apr 16 15:24:41 2014
@@ -136,6 +136,14 @@ public class UIMARuntimeException extend
public static final String ILLEGAL_CAS_COPY_TO_SAME_CAS = "illegal_cas_copy_to_same_cas";
/**
+ * Message key for a standard UIMA exception message: "Illegal adding of additional MetaData after
+ * CASes have been defined. Likely cause is the reuse of a Resource Manager object for a different
+ * pipeline, after it has already been initialized."
+ */
+ public static final String ILLEGAL_ADDING_OF_NEW_META_INFO_AFTER_CAS_DEFINED = "illegal_adding_of_new_meta_info";
+
+
+ /**
* Creates a new exception with a null message.
*/
public UIMARuntimeException() {
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java?rev=1587942&r1=1587941&r2=1587942&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java Wed Apr 16 15:24:41 2014
@@ -40,7 +40,10 @@ import org.apache.uima.resource.CasDefin
import org.apache.uima.resource.CasManager;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.ResourceManager;
+import org.apache.uima.resource.metadata.FsIndexCollection;
import org.apache.uima.resource.metadata.ProcessingResourceMetaData;
+import org.apache.uima.resource.metadata.TypePriorities;
+import org.apache.uima.resource.metadata.TypeSystemDescription;
import org.apache.uima.util.CasCreationUtils;
import org.apache.uima.util.CasPool;
import org.apache.uima.util.impl.CasPoolManagementImpl;
@@ -60,8 +63,10 @@ public class CasManager_impl implements
* accumulates the metadata needed for shared CASes for this resource manager
* Starts out "empty" when this is created; is added to (but never removed)
* Duplicates may be in the list.
+ *
+ * Threading: This list is always accessed under the class instance lock.
*/
- private final List<ProcessingResourceMetaData> mMetaDataList = Collections.synchronizedList(new ArrayList<ProcessingResourceMetaData>());
+ private final List<ProcessingResourceMetaData> mMetaDataList = new ArrayList<ProcessingResourceMetaData>();
private final Map<String, CasPool> mRequestorToCasPoolMap = Collections.synchronizedMap(new HashMap<String, CasPool>());
@@ -91,12 +96,55 @@ public class CasManager_impl implements
*/
public synchronized void addMetaData(ProcessingResourceMetaData aMetaData) {
if (mCasDefinition != null) {
- throw new UIMARuntimeException(); // internal error UIMA-1249
+ if (containsSameTypeAndIndexInfo(aMetaData)) { //UIMA-1249
+ return;
+ }
+ throw new UIMARuntimeException(UIMARuntimeException.ILLEGAL_ADDING_OF_NEW_META_INFO_AFTER_CAS_DEFINED, new Object[] {}); // internal error UIMA-1249
}
mMetaDataList.add(aMetaData);
// mCasDefinition = null; // mark this stale
// mCurrentTypeSystem = null; //this too
}
+
+ /**
+ * This comparison is needed to avoid throwing errors in the use case:
+ * a) the pipeline has been fully initialized, and one or more CASes have been drawn from this pool
+ * b) Another instance of an annotator using the same resource manager is initialized.
+ *
+ * In this case there is no change to the metadata, and we do not want to disturb anything.
+ *
+ * @param md the metadata to see if its in the list already
+ * @return true if the type system description, the type priority description, and the index collection are
+ * in the list already.
+ */
+ private boolean containsSameTypeAndIndexInfo(ProcessingResourceMetaData md) {
+ final TypeSystemDescription tsd = md.getTypeSystem();
+ final TypePriorities tsp = md.getTypePriorities();
+ final FsIndexCollection ic = md.getFsIndexCollection();
+
+ for (ProcessingResourceMetaData item : mMetaDataList) {
+ final TypeSystemDescription otsd = item.getTypeSystem();
+ final TypePriorities otsp = item.getTypePriorities();
+ final FsIndexCollection oic = item.getFsIndexCollection();
+ if (equalsWithNulls(tsp, otsp) &&
+ equalsWithNulls(tsd, otsd) &&
+ equalsWithNulls(ic , oic )) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean equalsWithNulls(Object a, Object b) {
+ if (a == null && b == null) {
+ return true;
+ }
+ if (a != null) {
+ return a.equals(b);
+ } else {
+ return b.equals(a);
+ }
+ }
/*
* (non-Javadoc)
Modified: uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties?rev=1587942&r1=1587941&r2=1587942&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties Wed Apr 16 15:24:41 2014
@@ -53,6 +53,8 @@ illegal_cas_copy_to_same_cas = It is not
unsupported_cas_copy_view_base_cas = Unsupported invocation of CasCopier copyCasView, specifying a source or destination as a base CAS.
+illegal_adding_of_new_meta_info = Illegal adding of additional MetaData after CASes have been defined. Likely cause is the reuse of a Resource Manager object for a different pipeline, after it has already been initialized.
+
#--------------------------
#UIMA_IllegalStateException
#--------------------------