|
From: <dav...@us...> - 2010-03-18 17:03:12
|
Revision: 2386
http://qtitools.svn.sourceforge.net/qtitools/?rev=2386&view=rev
Author: davemckain
Date: 2010-03-18 17:03:04 +0000 (Thu, 18 Mar 2010)
Log Message:
-----------
* Updated to use latest snapshot of Jacomax (which is now 0.2-SNAPSHOT)
* Removed PoolableMaximaInteractiveProcessFactory as it's no longer used
* Added some documentation to the pooling classes
Modified Paths:
--------------
MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/BadQTICASCodeException.java
MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/maxima/QTIMaximaSession.java
MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/maxima/SimpleQTIMaximaSessionManager.java
MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolTest.java
MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolableQTIMaximaSessionFactory.java
MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PooledQTIMaximaSessionManager.java
MathAssessTools/trunk/pom.xml
Removed Paths:
-------------
MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolableMaximaInteractiveProcessFactory.java
Modified: MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/BadQTICASCodeException.java
===================================================================
--- MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/BadQTICASCodeException.java 2010-03-18 16:57:53 UTC (rev 2385)
+++ MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/BadQTICASCodeException.java 2010-03-18 17:03:04 UTC (rev 2386)
@@ -27,8 +27,9 @@
public BadQTICASCodeException(final String reason, final String maximaInput, final String maximaOutput) {
super(reason
- + "\nMaxima Input was: " + maximaInput
- + "\nMaxima Output was: " + maximaOutput);
+ + "\nMaxima Input was: '" + maximaInput
+ + "'\nMaxima Output was: '" + maximaOutput
+ + "'");
this.reason = reason;
this.maximaInput = maximaInput;
this.maximaOutput = maximaOutput;
Modified: MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/maxima/QTIMaximaSession.java
===================================================================
--- MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/maxima/QTIMaximaSession.java 2010-03-18 16:57:53 UTC (rev 2385)
+++ MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/maxima/QTIMaximaSession.java 2010-03-18 17:03:04 UTC (rev 2386)
@@ -112,7 +112,7 @@
logger.info("Initialising new QTIMaximaSession");
try {
/* Load the MathML module */
- maximaInteractiveProcess.executeCallIgnoreOutput("load(mathml)$");
+ maximaInteractiveProcess.executeCallDiscardOutput("load(mathml)$");
}
catch (Exception e) {
throw new QTICASBridgeException("Failed to start and fully initialise Maxima process for use with MathAssess QTI", e);
@@ -153,7 +153,7 @@
if (valueWrapper==null || valueWrapper.isNull()) {
/* Nullify variable using kill() */
try {
- maximaInteractiveProcess.executeCallIgnoreOutput("kill(" + variableIdentifier + ")$");
+ maximaInteractiveProcess.executeCallDiscardOutput("kill(" + variableIdentifier + ")$");
}
catch (MaximaTimeoutException e) {
/* This shouldn't happen here! */
@@ -167,7 +167,7 @@
/* Then do the appropriate Maxima call, with no simplification */
try {
- maximaInteractiveProcess.executeCallIgnoreOutput("simp:false$ " + variableIdentifier + ": " + maximaValue + "$");
+ maximaInteractiveProcess.executeCallDiscardOutput("simp:false$ " + variableIdentifier + ": " + maximaValue + "$");
}
catch (MaximaTimeoutException e) {
/* This shouldn't happen here! */
@@ -311,7 +311,7 @@
String maximaOutput = maximaInteractiveProcess.executeCall(maximaInput);
/* Decompose the output */
- String result = MaximaOutputUtilities.extractSingleLinearOutputResult(maximaOutput);
+ String result = MaximaOutputUtilities.parseSingleLinearOutputResult(maximaOutput);
if (result==null) {
throw new BadQTICASCodeException("Maxima call did not return a parseable result", maximaInput, maximaOutput);
}
@@ -416,7 +416,7 @@
throws MaximaTimeoutException {
logger.info("executeScriptRule: code={}, simp={}", maximaCode, simplify);
ConstraintUtilities.ensureNotNull(maximaCode, "maximaCode");
- maximaInteractiveProcess.executeCallIgnoreOutput("simp:" + simplify + "$ " + maximaCode);
+ maximaInteractiveProcess.executeCallDiscardOutput("simp:" + simplify + "$ " + maximaCode);
}
/**
Modified: MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/maxima/SimpleQTIMaximaSessionManager.java
===================================================================
--- MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/maxima/SimpleQTIMaximaSessionManager.java 2010-03-18 16:57:53 UTC (rev 2385)
+++ MathAssessTools/trunk/MathAssessTools-Glue/src/main/java/org/qtitools/mathassess/tools/qticasbridge/maxima/SimpleQTIMaximaSessionManager.java 2010-03-18 17:03:04 UTC (rev 2386)
@@ -7,15 +7,15 @@
import org.qtitools.mathassess.tools.qticasbridge.QTICASBridgeException;
+import uk.ac.ed.ph.jacomax.JacomaxSimpleConfigurator;
import uk.ac.ed.ph.jacomax.MaximaConfiguration;
import uk.ac.ed.ph.jacomax.MaximaInteractiveProcess;
import uk.ac.ed.ph.jacomax.MaximaProcessLauncher;
-import uk.ac.ed.ph.jacomax.MaximaPropertiesConfigurer;
import uk.ac.ed.ph.snuggletex.utilities.SimpleStylesheetCache;
import uk.ac.ed.ph.snuggletex.utilities.StylesheetCache;
/**
- * FIXME: Document this type!
+ * Simplest possible implementation of {@link QTIMaximaSessionManager}.
*
* @author David McKain
* @version $Revision$
@@ -26,7 +26,7 @@
private final MaximaProcessLauncher maximaProcessLauncher;
public SimpleQTIMaximaSessionManager() {
- this(new MaximaPropertiesConfigurer().configure());
+ this(JacomaxSimpleConfigurator.configure());
}
public SimpleQTIMaximaSessionManager(MaximaConfiguration maximaConfiguration) {
Modified: MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolTest.java
===================================================================
--- MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolTest.java 2010-03-18 16:57:53 UTC (rev 2385)
+++ MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolTest.java 2010-03-18 17:03:04 UTC (rev 2386)
@@ -7,20 +7,20 @@
import org.qtitools.mathassess.tools.qticasbridge.maxima.QTIMaximaSession;
-import uk.ac.ed.ph.jacomax.MaximaPropertiesConfigurer;
+import uk.ac.ed.ph.jacomax.JacomaxSimpleConfigurator;
import uk.ac.ed.ph.snuggletex.utilities.SimpleStylesheetCache;
/**
- * FIXME: Document this type!
+ * Standalone test class. This should end up as a unit test...
*
- * @author FIXME
+ * @author David McKain
* @version $Revision$
*/
public class PoolTest {
public static void main(String[] args) throws Exception {
PooledQTIMaximaSessionManager manager = new PooledQTIMaximaSessionManager();
- manager.setMaximaConfiguration(new MaximaPropertiesConfigurer().configure());
+ manager.setMaximaConfiguration(JacomaxSimpleConfigurator.configure());
manager.setStylesheetCache(new SimpleStylesheetCache());
manager.init();
Deleted: MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolableMaximaInteractiveProcessFactory.java
===================================================================
--- MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolableMaximaInteractiveProcessFactory.java 2010-03-18 16:57:53 UTC (rev 2385)
+++ MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolableMaximaInteractiveProcessFactory.java 2010-03-18 17:03:04 UTC (rev 2386)
@@ -1,65 +0,0 @@
-/* $Id$
- *
- * Copyright (c) 2010, The University of Edinburgh.
- * All Rights Reserved
- */
-package org.qtitools.mathassess.tools.glue.extras.pooling;
-
-import uk.ac.ed.ph.jacomax.MaximaInteractiveProcess;
-import uk.ac.ed.ph.jacomax.MaximaProcessLauncher;
-
-import org.apache.commons.pool.PoolableObjectFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * FIXME: Document this type!
- *
- * @author David McKain
- * @version $Revision$
- */
-class PoolableMaximaInteractiveProcessFactory implements PoolableObjectFactory {
-
- private static final Logger logger = LoggerFactory.getLogger(PoolableMaximaInteractiveProcessFactory.class);
-
- private final MaximaProcessLauncher maximaProcessLauncher;
-
- public PoolableMaximaInteractiveProcessFactory(MaximaProcessLauncher maximaProcessLauncher) {
- this.maximaProcessLauncher = maximaProcessLauncher;
- }
-
- public Object makeObject() throws Exception {
- logger.debug("Creating new pooled Maxima process");
- return maximaProcessLauncher.launchInteractiveProcess();
- }
-
- public void activateObject(Object obj) {
- /* (Nothing to do here) */
- }
-
- public void passivateObject(Object obj) {
- logger.debug("Resetting Maxima process and passivating");
- MaximaInteractiveProcess process = (MaximaInteractiveProcess) obj;
- if (process.isTerminated()) {
- throw new IllegalStateException("Expected pool to verify Objects before passivation");
- }
- try {
- process.softReset();
- }
- catch (Exception e) {
- logger.warn("Could not reset process - terminating so that it is no longer considered valid");
- process.terminate();
- }
- }
-
- public boolean validateObject(Object obj) {
- MaximaInteractiveProcess process = (MaximaInteractiveProcess) obj;
- return !process.isTerminated();
- }
-
- public void destroyObject(Object obj) {
- logger.debug("Terminating pooled Maxima process");
- MaximaInteractiveProcess process = (MaximaInteractiveProcess) obj;
- process.terminate();
- }
-}
Modified: MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolableQTIMaximaSessionFactory.java
===================================================================
--- MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolableQTIMaximaSessionFactory.java 2010-03-18 16:57:53 UTC (rev 2385)
+++ MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PoolableQTIMaximaSessionFactory.java 2010-03-18 17:03:04 UTC (rev 2386)
@@ -18,7 +18,7 @@
import org.slf4j.LoggerFactory;
/**
- * FIXME: Document this type!
+ * Implementation of {@link PoolableObjectFactory} catering {@link QTIMaximaSession}s.
*
* @author David McKain
* @version $Revision$
Modified: MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PooledQTIMaximaSessionManager.java
===================================================================
--- MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PooledQTIMaximaSessionManager.java 2010-03-18 16:57:53 UTC (rev 2385)
+++ MathAssessTools/trunk/MathAssessTools-Glue-Extras/src/main/java/org/qtitools/mathassess/tools/glue/extras/pooling/PooledQTIMaximaSessionManager.java 2010-03-18 17:03:04 UTC (rev 2386)
@@ -14,15 +14,22 @@
import uk.ac.ed.ph.snuggletex.utilities.StylesheetCache;
import org.apache.commons.pool.impl.GenericObjectPool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
- * FIXME: Document this type!
+ * Implementation of {@link QTIMaximaSessionManager} that pools running Maxima processes
+ * for increased performance.
+ * <p>
+ * (This is implemented as a POJO with {@link #init()} and {@link #shutdown()} lifecycle methods.)
*
- * @author FIXME
+ * @author David McKain
* @version $Revision$
*/
public class PooledQTIMaximaSessionManager implements QTIMaximaSessionManager {
+ private static final Logger logger = LoggerFactory.getLogger(PooledQTIMaximaSessionManager.class);
+
private StylesheetCache stylesheetCache;
private MaximaConfiguration maximaConfiguration;
@@ -55,12 +62,14 @@
factory.setStylesheetCache(stylesheetCache);
factory.init();
+ logger.info("Creating QTIMaximaSession Object pool");
qtiMaximaSessionPool = new GenericObjectPool(factory);
qtiMaximaSessionPool.setTestOnBorrow(true);
qtiMaximaSessionPool.setTestOnReturn(true);
}
public void shutdown() {
+ logger.info("Closing QTIMaximaSession Object pool");
try {
qtiMaximaSessionPool.close();
}
Modified: MathAssessTools/trunk/pom.xml
===================================================================
--- MathAssessTools/trunk/pom.xml 2010-03-18 16:57:53 UTC (rev 2385)
+++ MathAssessTools/trunk/pom.xml 2010-03-18 17:03:04 UTC (rev 2386)
@@ -21,7 +21,7 @@
</modules>
<properties>
<snuggletex.version>1.2.0</snuggletex.version>
- <jacomax.version>1.0-SNAPSHOT</jacomax.version>
+ <jacomax.version>0.2-SNAPSHOT</jacomax.version>
<commons-pool.version>1.5.4</commons-pool.version>
<saxon9.version>9.1.0.8</saxon9.version>
<slf4j.version>1.5.10</slf4j.version>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|