You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by al...@apache.org on 2007/01/26 22:22:55 UTC

svn commit: r500357 - in /incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima: resource/CasManager.java resource/impl/CasManager_impl.java util/CasPool.java

Author: alally
Date: Fri Jan 26 13:22:54 2007
New Revision: 500357

URL: http://svn.apache.org/viewvc?view=rev&rev=500357
Log:
CASes available to CAS Multipliers now have identical TypeSystem
objects as CASes in the CPE CAS Pool.
UIMA-234: https://issues.apache.org/jira/browse/UIMA-234

Modified:
    incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/CasManager.java
    incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java
    incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/CasPool.java

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/CasManager.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/CasManager.java?view=diff&rev=500357&r1=500356&r2=500357
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/CasManager.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/CasManager.java Fri Jan 26 13:22:54 2007
@@ -81,6 +81,19 @@
   CAS getCas(String aRequestorContextName);
 
   /**
+   * Create a new CAS using the CasDefinition stored in this CAS Manager.  Note
+   * that this new CAS will not belong to any pool managed by this CAS Manager.
+   * If this method is called multiple times while the CasDefinition is constant,
+   * each new CAS will share an identical TypeSystem object. 
+   * 
+   * @param aPerformanceTuningSettings
+   *          settings, including initial CAS heap size, for the AE
+   * @return a new CAS
+   * @throws ResourceInitializationException if the CAS could not be created
+   */
+  CAS createNewCas(Properties aPerformanceTuningSettings) throws ResourceInitializationException;
+
+  /**
    * Gets a specified interface to a CAS.
    * 
    * @param cas
@@ -88,5 +101,5 @@
    * @param requiredInterface
    *          interface to get. Currently must be either CAS or JCas.
    */
-  AbstractCas getCasInterface(CAS cas, Class requiredInterface);
+  AbstractCas getCasInterface(CAS cas, Class requiredInterface);  
 }

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java?view=diff&rev=500357&r1=500356&r2=500357
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CasManager_impl.java Fri Jan 26 13:22:54 2007
@@ -28,6 +28,7 @@
 import org.apache.uima.cas.AbstractCas;
 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.jcas.JCas;
 import org.apache.uima.resource.CasDefinition;
@@ -35,6 +36,7 @@
 import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.resource.ResourceManager;
 import org.apache.uima.resource.metadata.ProcessingResourceMetaData;
+import org.apache.uima.util.CasCreationUtils;
 import org.apache.uima.util.CasPool;
 
 /**
@@ -51,6 +53,8 @@
   private Map mCasToCasPoolMap = new HashMap();
 
   private CasDefinition mCasDefinition = null;
+  
+  private TypeSystem mCurrentTypeSystem = null;
 
   public CasManager_impl(ResourceManager aResourceManager) {
     mResourceManager = aResourceManager;
@@ -64,6 +68,7 @@
   public void addMetaData(ProcessingResourceMetaData aMetaData) {
     mMetaDataList.add(aMetaData);
     mCasDefinition = null; // mark this stale
+    mCurrentTypeSystem = null; //this too
   }
 
   /*
@@ -120,7 +125,7 @@
       CasPool pool = (CasPool) mRequestorToCasPoolMap.get(aRequestorContextName);
       if (pool == null) {
         // this requestor hasn't requested a CAS before
-        pool = new CasPool(aSize, getCasDefinition(), aPerformanceTuningSettings);
+        pool = new CasPool(aSize, this, aPerformanceTuningSettings);
         populateCasToCasPoolMap(pool);
         mRequestorToCasPoolMap.put(aRequestorContextName, pool);
       } else {
@@ -128,6 +133,21 @@
                 new Object[] { aRequestorContextName });
       }
     }
+  }
+  
+  /* (non-Javadoc)
+   * @see org.apache.uima.resource.CasManager#createNewCas(java.util.Properties)
+   */
+  public CAS createNewCas(Properties aPerformanceTuningSettings) throws ResourceInitializationException {
+    CAS cas;
+    if (mCurrentTypeSystem != null) {
+      cas = CasCreationUtils.createCas(getCasDefinition(), aPerformanceTuningSettings, mCurrentTypeSystem);      
+    } else
+    {
+      cas = CasCreationUtils.createCas(getCasDefinition(), aPerformanceTuningSettings);
+      mCurrentTypeSystem = cas.getTypeSystem();
+    }    
+    return cas;
   }
 
   /**

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/CasPool.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/CasPool.java?view=diff&rev=500357&r1=500356&r2=500357
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/CasPool.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/CasPool.java Fri Jan 26 13:22:54 2007
@@ -33,6 +33,7 @@
 import org.apache.uima.collection.CasConsumerDescription;
 import org.apache.uima.collection.CollectionReaderDescription;
 import org.apache.uima.resource.CasDefinition;
+import org.apache.uima.resource.CasManager;
 import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.resource.ResourceManager;
 import org.apache.uima.resource.metadata.ProcessingResourceMetaData;
@@ -154,7 +155,8 @@
   }
 
   /**
-   * Creates a new CasPool
+   * Creates a new CasPool.
+   * TODO: do we need this method AND the one that takes a CasManager?
    * 
    * @param aNumInstances
    *          the number of CAS instances in the pool
@@ -172,6 +174,25 @@
   }
 
   /**
+   * Creates a new CasPool
+   * 
+   * @param aNumInstances
+   *          the number of CAS instances in the pool
+   * @param aCasManager
+   *          CAS Manager that will be used to create the CAS.  The CAS Manager
+   *          holds the CAS Definition.  Also all CASes created from the same
+   *          CAS Manager will share identical TypeSystem objects.
+   * @param aPerformanceTuningSettings
+   *          Properties object containing framework performance tuning settings using key names
+   *          defined on {@link UIMAFramework} interface
+   */
+  public CasPool(int aNumInstances, CasManager aCasManager,
+          Properties aPerformanceTuningSettings) throws ResourceInitializationException {
+    mNumInstances = aNumInstances;
+    fillPool(aCasManager, aPerformanceTuningSettings);
+  }
+  
+  /**
    * Checks out a CAS from the pool.
    * 
    * @return a CAS instance. Returns <code>null</code> if none are available (in which case the
@@ -277,6 +298,17 @@
     }
   }
 
+  private void fillPool(CasManager casManager, Properties performanceTuningSettings)
+          throws ResourceInitializationException {
+    // create additional CASes that share same type system
+    for (int i = 0; i < mNumInstances; i++) {
+      CAS c = casManager.createNewCas(performanceTuningSettings);
+      ((CASImpl) c).setOwner(casManager);
+      mAllInstances.add(c);
+      mFreeInstances.add(c);
+    }
+  }  
+  
   protected Vector getAllInstances() {
     return mAllInstances;
   }