You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2008/11/08 22:22:07 UTC

svn commit: r712435 - in /ode/trunk: runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/ runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/xpath10/ runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/ runtimes/src/main/java/org/apache/ode/bpel/rtrep...

Author: mriou
Date: Sat Nov  8 13:22:06 2008
New Revision: 712435

URL: http://svn.apache.org/viewvc?rev=712435&view=rev
Log:
ODE-408 BPEL process operating large data runs very slowly

Modified:
    ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/RuntimeInstanceImpl.java
    ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/xpath10/JaxenContexts.java
    ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeInstanceImpl.java
    ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/xpath10/JaxenContexts.java
    ode/trunk/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java

Modified: ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/RuntimeInstanceImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/RuntimeInstanceImpl.java?rev=712435&r1=712434&r2=712435&view=diff
==============================================================================
--- ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/RuntimeInstanceImpl.java (original)
+++ ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/RuntimeInstanceImpl.java Sat Nov  8 13:22:06 2008
@@ -285,7 +285,8 @@
 
     public void commitChanges(VariableInstance var, ScopeFrame scopeFrame, Node value) throws ExternalVariableModuleException {
         if (var.declaration.extVar != null) /* external variable */ {
-            __log.debug("Write external variable: name="+var.declaration + " value="+DOMUtils.domToString(value));
+            if (__log.isDebugEnabled())
+                __log.debug("Write external variable: name="+var.declaration + " value="+DOMUtils.domToString(value));
             VariableInstance related = scopeFrame.resolve(var.declaration.extVar.related);
             Node reference = null;
             try {
@@ -296,7 +297,8 @@
             VariableContext.ValueReferencePair vrp  = _brc.writeExtVar(var, reference, value);
             commitChanges(related, scopeFrame, vrp.reference);
         } else /* normal variable */ {
-            __log.debug("Write variable: name="+var.declaration + " value="+DOMUtils.domToString(value));
+            if (__log.isDebugEnabled())
+                __log.debug("Write variable: name="+var.declaration + " value="+DOMUtils.domToString(value));
             _brc.commitChanges(var, value);
         }
         writeProperties(var, value);

Modified: ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/xpath10/JaxenContexts.java
URL: http://svn.apache.org/viewvc/ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/xpath10/JaxenContexts.java?rev=712435&r1=712434&r2=712435&view=diff
==============================================================================
--- ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/xpath10/JaxenContexts.java (original)
+++ ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v1/xpath10/JaxenContexts.java Sat Nov  8 13:22:06 2008
@@ -35,13 +35,9 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
 
 import javax.xml.namespace.QName;
 import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import java.io.IOException;
-import java.io.StringWriter;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -349,36 +345,18 @@
             Document varDoc = DOMUtils.newDocument();
             varDoc.appendChild(varDoc.importNode(varElmt, true));
 
+            Object result;
             DOMSource source = new DOMSource(varDoc);
-            // Using a StreamResult as a DOMResult doesn't behaves properly when the result
-            // of the transformation is just a string.
-            StringWriter writerResult = new StringWriter();
-            StreamResult result = new StreamResult(writerResult);
             XslRuntimeUriResolver resolver = new XslRuntimeUriResolver(_oxpath, _xpathEvalCtx.getBaseResourceURI());
             XslTransformHandler.getInstance().cacheXSLSheet(xslUri, xslSheet.sheetBody, resolver);
             try {
-                XslTransformHandler.getInstance().transform(xslUri, source, result, parametersMap, resolver);
+                result = XslTransformHandler.getInstance().transform(xslUri, source, parametersMap, resolver);
             } catch (Exception e) {
                 throw new WrappedFaultException.JaxenFunctionException(
                         new FaultException(_oxpath.getOwner().constants.qnSubLanguageExecutionFault,
                                 e.toString()));
             }
-            writerResult.flush();
-
-            String output = writerResult.toString();
-            // I'm not really proud of that but hey, it does the job and I don't think there's
-            // any other easy way.
-            if (output.startsWith("<?xml")) {
-                try {
-                    return DOMUtils.stringToDOM(writerResult.toString());
-                } catch (SAXException e) {
-                    throw new FunctionCallException(e);
-                } catch (IOException e) {
-                    throw new FunctionCallException(e);
-                }
-            } else {
-                return output;
-            }
+            return result;
         }
     }
 

Modified: ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeInstanceImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeInstanceImpl.java?rev=712435&r1=712434&r2=712435&view=diff
==============================================================================
--- ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeInstanceImpl.java (original)
+++ ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/RuntimeInstanceImpl.java Sat Nov  8 13:22:06 2008
@@ -285,7 +285,8 @@
 
     public void commitChanges(VariableInstance var, ScopeFrame scopeFrame, Node value) throws ExternalVariableModuleException {
         if (var.declaration.extVar != null) /* external variable */ {
-            __log.debug("Write external variable: name="+var.declaration + " value="+DOMUtils.domToString(value));
+            if (__log.isDebugEnabled())
+                __log.debug("Write external variable: name="+var.declaration + " value="+DOMUtils.domToString(value));
             VariableInstance related = scopeFrame.resolve(var.declaration.extVar.related);
             Node reference = null;
             try {
@@ -296,7 +297,8 @@
             VariableContext.ValueReferencePair vrp  = _brc.writeExtVar(var, reference, value);
             commitChanges(related, scopeFrame, vrp.reference);
         } else /* normal variable */ {
-            __log.debug("Write variable: name="+var.declaration + " value="+DOMUtils.domToString(value));
+            if (__log.isDebugEnabled())
+                __log.debug("Write variable: name="+var.declaration + " value="+DOMUtils.domToString(value));
             _brc.commitChanges(var, value);
         }
         writeProperties(var, value);

Modified: ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/xpath10/JaxenContexts.java
URL: http://svn.apache.org/viewvc/ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/xpath10/JaxenContexts.java?rev=712435&r1=712434&r2=712435&view=diff
==============================================================================
--- ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/xpath10/JaxenContexts.java (original)
+++ ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/xpath10/JaxenContexts.java Sat Nov  8 13:22:06 2008
@@ -35,13 +35,9 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
-import org.xml.sax.SAXException;
 
 import javax.xml.namespace.QName;
 import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import java.io.IOException;
-import java.io.StringWriter;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -343,36 +339,18 @@
             Document varDoc = DOMUtils.newDocument();
             varDoc.appendChild(varDoc.importNode(varElmt, true));
 
+            Object result;
             DOMSource source = new DOMSource(varDoc);
-            // Using a StreamResult as a DOMResult doesn't behaves properly when the result
-            // of the transformation is just a string.
-            StringWriter writerResult = new StringWriter();
-            StreamResult result = new StreamResult(writerResult);
             XslRuntimeUriResolver resolver = new XslRuntimeUriResolver(_oxpath, _xpathEvalCtx.getBaseResourceURI());
             XslTransformHandler.getInstance().cacheXSLSheet(xslUri, xslSheet.sheetBody, resolver);
             try {
-                XslTransformHandler.getInstance().transform(xslUri, source, result, parametersMap, resolver);
+                result = XslTransformHandler.getInstance().transform(xslUri, source, parametersMap, resolver);
             } catch (Exception e) {
-                throw new WrappedFaultException.JaxenFunctionException(
+                throw new org.apache.ode.bpel.rtrep.v1.xpath10.WrappedFaultException.JaxenFunctionException(
                         new FaultException(_oxpath.getOwner().constants.qnSubLanguageExecutionFault,
                                 e.toString()));
             }
-            writerResult.flush();
-
-            String output = writerResult.toString();
-            // I'm not really proud of that but hey, it does the job and I don't think there's
-            // any other easy way.
-            if (output.startsWith("<?xml")) {
-                try {
-                    return DOMUtils.stringToDOM(writerResult.toString());
-                } catch (SAXException e) {
-                    throw new FunctionCallException(e);
-                } catch (IOException e) {
-                    throw new FunctionCallException(e);
-                }
-            } else {
-                return output;
-            }
+            return result;
         }
     }
 

Modified: ode/trunk/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java
URL: http://svn.apache.org/viewvc/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java?rev=712435&r1=712434&r2=712435&view=diff
==============================================================================
--- ode/trunk/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java (original)
+++ ode/trunk/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java Sat Nov  8 13:22:06 2008
@@ -19,6 +19,9 @@
 
 package org.apache.ode.utils.xsl;
 
+import org.w3c.dom.Node;
+import org.w3c.dom.Document;
+
 import javax.xml.namespace.QName;
 import javax.xml.transform.ErrorListener;
 import javax.xml.transform.Result;
@@ -29,8 +32,11 @@
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.URIResolver;
+import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.stream.StreamSource;
+import javax.xml.transform.stream.StreamResult;
 import java.io.StringReader;
+import java.io.StringWriter;
 import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
@@ -111,11 +117,10 @@
    * by the provided URI. The stylesheet MUST have been parsed previously.
    * @param uri referencing the stylesheet
    * @param source XML document
-   * @param result of the transformation (XSL, HTML or text depending of the output method specified in stylesheet
    * @param parameters passed to the stylesheet
    * @param resolver used to resolve includes and imports
    */
-  public void transform(URI uri, Source source, Result result,
+  public Object transform(URI uri, Source source,
                         Map<QName, Object> parameters, URIResolver resolver) {
     Templates tm;
     synchronized (_templateCache) {
@@ -131,7 +136,21 @@
           tf.setParameter(param.getKey().getLocalPart(), param.getValue());
         }
       }
-      tf.transform(source, result);
+        String method = tf.getOutputProperties().getProperty("method");
+        if(method.equals("xml") || method.equals("html")) {
+            DOMResult result = new DOMResult();
+            tf.transform(source, result);
+            Node node = result.getNode();
+            if(node.getNodeType() == Node.DOCUMENT_NODE)
+                node = ((Document)node).getDocumentElement();
+            return node;
+        } else {
+            StringWriter writerResult = new StringWriter();
+            StreamResult result = new StreamResult(writerResult);
+            tf.transform(source, result);
+            writerResult.flush();
+            return writerResult.toString();
+        }
     } catch (TransformerConfigurationException e) {
       throw new XslTransformException(e);
     } catch (TransformerException e) {