diff --git a/pentaho-kettle/src/main/java/org/pentaho/di/www/StartExecutionTransServlet.java b/pentaho-kettle/src/main/java/org/pentaho/di/www/StartExecutionTransServlet.java new file mode 100644 index 0000000..711bd52 --- /dev/null +++ b/pentaho-kettle/src/main/java/org/pentaho/di/www/StartExecutionTransServlet.java @@ -0,0 +1,273 @@ +/*! ****************************************************************************** + * + * Pentaho Data Integration + * + * Copyright (C) 2002-2016 by Pentaho : http://www.pentaho.com + * + ******************************************************************************* + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +package org.pentaho.di.www; + +import org.owasp.esapi.ESAPI; +import org.owasp.esapi.Encoder; +import org.pentaho.di.core.Const; +import org.pentaho.di.core.exception.KettleException; +import org.pentaho.di.core.util.Utils; +import org.pentaho.di.core.xml.XMLHandler; +import org.pentaho.di.i18n.BaseMessages; +import org.pentaho.di.trans.Trans; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URLEncoder; + +public class StartExecutionTransServlet extends BaseHttpServlet implements CartePluginInterface { + private static Class> PKG = StartExecutionTransServlet.class; // for i18n purposes, needed by Translator2!! + + private static final long serialVersionUID = 3634806745372015720L; + public static final String CONTEXT_PATH = "/kettle/startExec"; + + public StartExecutionTransServlet() { + } + + public StartExecutionTransServlet(TransformationMap transformationMap) { + super(transformationMap); + } + + /** + *
Starts transformation. If the transformation is not ready, an error is returned.
+ *+ *
Example Request:
+ *
+ * GET /kettle/startExec/?name=dummy-trans&xml=Y + *+ *
+ *
+ *name | + *description | + *type | + *
---|---|---|
name | + *Name of the transformation to be executed. | + *query | + *
xml | + *Boolean flag which sets the output format required. Use Y to receive XML response. |
+ * boolean, optional | + *
id | + *Carte transformation ID of the transformation to be executed. This parameter is optional when xml=Y is used. | + *query, optional | + *
+ *
+ *
text: | + *HTML | + *
media types: | + *text/xml, text/html | + *
Response XML or HTML containing operation result. When using xml=Y result
field indicates whether
+ * operation was successful (OK
) or not (ERROR
).
+ *
Example Response:
+ *+ * + *+ *+ * + *OK + *+ * + *
+ *
code | + *description | + *
---|---|
200 | + *Request was processed. | + *
500 | + *Internal server error occurs during request processing. | + *
"); + } + } else { + String message = + "The specified transformation [" + + transName + "] is not ready to be started. (Was not prepared for execution)"; + if (useXML) { + out.println(new WebResult(WebResult.STRING_ERROR, message)); + } else { + out.println("
"); + } + } + } else { + if (useXML) { + out.println(new WebResult(WebResult.STRING_ERROR, BaseMessages.getString( + PKG, "TransStatusServlet.Log.CoundNotFindSpecTrans", transName))); + } else { + out.println("
"); + } + } + } catch (Exception ex) { + if (useXML) { + out.println(new WebResult( + WebResult.STRING_ERROR, "Unexpected error during transformation execution preparation:" + + Const.CR + Const.getStackTracker(ex))); + } else { + out.println("
"); + out.println("
"); + out.println(encoder.encodeForHTML(Const.getStackTracker(ex))); + out.println(""); + } + } + + if (!useXML) { + out.println("
"); + out.println(""); + out.println(""); + } + } + + public String toString() { + return "Start transformation"; + } + + public String getService() { + return CONTEXT_PATH + " (" + toString() + ")"; + } + + protected void startThreads(Trans trans) throws KettleException { + trans.startThreads(); + } + + public String getContextPath() { + return CONTEXT_PATH; + } + +} diff --git a/pentaho-kettle/src/main/java/org/pentaho/di/www/StartJobServlet.java b/pentaho-kettle/src/main/java/org/pentaho/di/www/StartJobServlet.java new file mode 100644 index 0000000..a1108b6 --- /dev/null +++ b/pentaho-kettle/src/main/java/org/pentaho/di/www/StartJobServlet.java @@ -0,0 +1,305 @@ +/*! ****************************************************************************** + * + * Pentaho Data Integration + * + * Copyright (C) 2002-2016 by Pentaho : http://www.pentaho.com + * + ******************************************************************************* + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +package org.pentaho.di.www; + +import org.owasp.esapi.ESAPI; +import org.owasp.esapi.Encoder; +import org.pentaho.di.core.Const; +import org.pentaho.di.core.exception.KettleException; +import org.pentaho.di.core.logging.KettleLogStore; +import org.pentaho.di.core.logging.LoggingObjectType; +import org.pentaho.di.core.logging.SimpleLoggingObject; +import org.pentaho.di.core.util.Utils; +import org.pentaho.di.core.xml.XMLHandler; +import org.pentaho.di.i18n.BaseMessages; +import org.pentaho.di.job.Job; +import org.pentaho.di.job.JobConfiguration; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URLEncoder; +import java.util.UUID; + +public class StartJobServlet extends BaseHttpServlet implements CartePluginInterface { + private static Class> PKG = StartJobServlet.class; // for i18n purposes, + // needed by + // Translator2!! + + private static final long serialVersionUID = -8487225953910464032L; + + public static final String CONTEXT_PATH = "/kettle/startJob"; + + public StartJobServlet() { + } + + public StartJobServlet(JobMap jobMap) { + super(jobMap); + } + + /** + *
Starts the job. If the job cannot be started, an error is returned.
+ *+ *
Example Request:
+ *
+ * GET /kettle/startJob/?name=dummy_job&xml=Y + *+ *
+ *
+ *name | + *description | + *type | + *
---|---|---|
name | + *Name of the job to be executed. | + *query | + *
xml | + *Boolean flag which sets the output format required. Use Y to receive XML response. |
+ * boolean, optional | + *
id | + *Carte job ID of the job to be executed. This parameter is optional when xml=Y is used. | + *query, optional | + *
+ *
+ *
text: | + *HTML | + *
media types: | + *text/xml, text/html | + *
Response XML or HTML containing operation result. When using xml=Y result
field indicates whether
+ * operation was successful (OK
) or not (ERROR
).
+ *
Example Response:
+ *+ * + *+ *+ * + *OK + *Job [dummy_job] was started. + *abd61143-8174-4f27-9037-6b22fbd3e229 + *
+ *
code | + *description | + *
---|---|
200 | + *Request was processed. | + *
500 | + *Internal server error occurs during request processing. | + *
"); + } + } else { + String message = BaseMessages.getString(PKG, "StartJobServlet.Log.SpecifiedJobNotFound", jobName); + if (useXML) { + out.println(new WebResult(WebResult.STRING_ERROR, message)); + } else { + out.println("
"); + } + } + } catch (Exception ex) { + if (useXML) { + out.println(new WebResult(WebResult.STRING_ERROR, BaseMessages.getString( + PKG, "StartJobServlet.Error.UnexpectedError", Const.CR + Const.getStackTracker(ex)))); + } else { + out.println("
"); + out.println("
"); + out.println(encoder.encodeForHTML(Const.getStackTracker(ex))); + out.println(""); + } + } + + if (!useXML) { + out.println("
"); + out.println(""); + out.println(""); + } + } + + public String toString() { + return "Start job"; + } + + public String getService() { + return CONTEXT_PATH + " (" + toString() + ")"; + } + + protected void runJob(Job job) throws KettleException { + job.start(); // runs the thread in the background... + } + + public String getContextPath() { + return CONTEXT_PATH; + } + +}