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());
}
/**