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 2015/12/01 17:59:32 UTC

svn commit: r1717465 - in /uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima: resource/CasDefinition.java util/CasCreationUtils.java

Author: schor
Date: Tue Dec  1 16:59:32 2015
New Revision: 1717465

URL: http://svn.apache.org/viewvc?rev=1717465&view=rev
Log:
[UIMA-4701] save type system impl associated with a cas definition for reuse

Modified:
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/CasDefinition.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/CasCreationUtils.java

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/CasDefinition.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/CasDefinition.java?rev=1717465&r1=1717464&r2=1717465&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/CasDefinition.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/CasDefinition.java Tue Dec  1 16:59:32 2015
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Properties;
 
 import org.apache.uima.UIMAFramework;
+import org.apache.uima.cas.impl.TypeSystemImpl;
 import org.apache.uima.resource.metadata.FsIndexCollection;
 import org.apache.uima.resource.metadata.FsIndexDescription;
 import org.apache.uima.resource.metadata.ProcessingResourceMetaData;
@@ -38,6 +39,8 @@ import org.apache.uima.util.CasCreationU
  */
 public class CasDefinition {
   private TypeSystemDescription typeSystemDescription;
+  
+  private TypeSystemImpl typeSystemImpl;
 
   private TypePriorities typePriorities;
 
@@ -174,4 +177,18 @@ public class CasDefinition {
     md.setFsIndexCollection(indColl);
     return md;
   }
+
+  /**
+   * @return the typeSystemImpl
+   */
+  public TypeSystemImpl getTypeSystemImpl() {
+    return typeSystemImpl;
+  }
+
+  /**
+   * @param typeSystemImpl the typeSystemImpl to set
+   */
+  public void setTypeSystemImpl(TypeSystemImpl typeSystemImpl) {
+    this.typeSystemImpl = typeSystemImpl;
+  }
 }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/CasCreationUtils.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/CasCreationUtils.java?rev=1717465&r1=1717464&r2=1717465&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/CasCreationUtils.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/CasCreationUtils.java Tue Dec  1 16:59:32 2015
@@ -53,6 +53,7 @@ import org.apache.uima.cas.admin.FSIndex
 import org.apache.uima.cas.admin.LinearTypeOrderBuilder;
 import org.apache.uima.cas.admin.TypeSystemMgr;
 import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeSystemImpl;
 import org.apache.uima.cas_data.CasData;
 import org.apache.uima.cas_data.FeatureStructure;
 import org.apache.uima.cas_data.PrimitiveValue;
@@ -576,10 +577,20 @@ public class CasCreationUtils {
     CASMgr casMgr;
     if (aTypeSystem != null) {
       casMgr = CASFactory.createCAS(aTypeSystem, useJcasCache);
+      
+      // Set JCas ClassLoader - before setupTypeSystem
+      if (aResourceManager.getExtensionClassLoader() != null) {
+        casMgr.setJCasClassLoader(aResourceManager.getExtensionClassLoader());
+      }
+
     } else // no TypeSystem to reuse - create a new one
     {
       casMgr = CASFactory.createCAS();
  
+      if (aResourceManager.getExtensionClassLoader() != null) {
+        casMgr.setJCasClassLoader(aResourceManager.getExtensionClassLoader());
+      }
+
       // install type system
       setupTypeSystem(casMgr, aTypeSystemDesc);
       // Commit the type system
@@ -602,10 +613,6 @@ public class CasCreationUtils {
     // Commit the index repository
     casMgr.getIndexRepositoryMgr().commit();
 
-    // Set JCas ClassLoader
-    if (aResourceManager.getExtensionClassLoader() != null) {
-      casMgr.setJCasClassLoader(aResourceManager.getExtensionClassLoader());
-    }
 
     return casMgr.getCAS().getView(CAS.NAME_DEFAULT_SOFA);
   }
@@ -613,6 +620,9 @@ public class CasCreationUtils {
   /**
    * Create a CAS from a CAS Definition.
    * 
+   * In V3, creating the type system is expensive (due to loading and setting up of JCas classes), so
+   * we do the type system creation once per CasDefinition and store it with the CAS definition
+   * 
    * @param casDef
    *                completely describes the CAS to be created
    * @param performanceTuningSettings
@@ -626,8 +636,21 @@ public class CasCreationUtils {
    */
   public static CAS createCas(CasDefinition casDef, Properties performanceTuningSettings)
       throws ResourceInitializationException {
-    return createCas(casDef.getTypeSystemDescription(), casDef.getTypePriorities(), casDef
-        .getFsIndexDescriptions(), performanceTuningSettings, casDef.getResourceManager());
+    TypeSystemImpl tsi = casDef.getTypeSystemImpl();
+    CAS cas;
+    if (null == tsi) {
+      synchronized (casDef) {
+        if (null == tsi) { // retest under sync lock
+          cas = createCas(casDef.getTypeSystemDescription(), casDef.getTypePriorities(), 
+              casDef.getFsIndexDescriptions(), performanceTuningSettings, casDef.getResourceManager());
+          casDef.setTypeSystemImpl((TypeSystemImpl) cas.getTypeSystem());
+          return cas;
+        }  
+      }
+    } 
+    
+    return doCreateCas(tsi, casDef.getTypeSystemDescription(), casDef.getTypePriorities(), 
+            casDef.getFsIndexDescriptions(), performanceTuningSettings, casDef.getResourceManager());
   }
 
   /**