You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/12/30 09:11:21 UTC

[camel] 01/05: CAMEL-14327: camel-jt400 no longer needs to be non singleton. Thanks to Rafal Gala for the patch.

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-3.0.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 6292b09c640da019cd20a509aa3e185a077b43a1
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Dec 27 14:37:40 2019 +0100

    CAMEL-14327: camel-jt400 no longer needs to be non singleton. Thanks to Rafal Gala for the patch.
---
 .../camel/component/jt400/Jt400Endpoint.java       |  6 --
 .../component/jt400/Jt400PgmCallException.java     |  4 ++
 .../camel/component/jt400/Jt400PgmProducer.java    | 82 ++++++++++++----------
 3 files changed, 49 insertions(+), 43 deletions(-)

diff --git a/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400Endpoint.java b/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400Endpoint.java
index 4b5d99a..7fb2c0e 100644
--- a/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400Endpoint.java
+++ b/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400Endpoint.java
@@ -94,12 +94,6 @@ public class Jt400Endpoint extends ScheduledPollEndpoint implements MultipleCons
         }
     }
 
-    @Override
-    public boolean isSingleton() {
-        // cannot be singleton as we store an AS400 instance on the configuration
-        return false;
-    }
-
     /**
      * Obtains an {@code AS400} object that connects to this endpoint. Since
      * these objects represent limited resources, clients have the
diff --git a/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400PgmCallException.java b/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400PgmCallException.java
index d42561d..1ad1bae 100644
--- a/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400PgmCallException.java
+++ b/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400PgmCallException.java
@@ -25,4 +25,8 @@ public class Jt400PgmCallException extends RuntimeCamelException {
     public Jt400PgmCallException(String message) {
         super(message);
     }
+
+    public Jt400PgmCallException(Exception e) {
+        super(e);
+    }
 }
diff --git a/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400PgmProducer.java b/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400PgmProducer.java
index 9a17fdb..42508cb 100644
--- a/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400PgmProducer.java
+++ b/components/camel-jt400/src/main/java/org/apache/camel/component/jt400/Jt400PgmProducer.java
@@ -37,8 +37,6 @@ import org.slf4j.LoggerFactory;
 public class Jt400PgmProducer extends DefaultProducer {
 
     private static final Logger LOG = LoggerFactory.getLogger(Jt400PgmProducer.class);
-    
-    private AS400 iSeries;
 
     public Jt400PgmProducer(Jt400Endpoint endpoint) {
         super(endpoint);
@@ -51,39 +49,52 @@ public class Jt400PgmProducer extends DefaultProducer {
     @Override
     public void process(Exchange exchange) throws Exception {
 
-        String commandStr = getISeriesEndpoint().getObjectPath();
-        ProgramParameter[] parameterList = getParameterList(exchange);
+        AS400 iSeries = null;
+        try {
+            iSeries = connect();
 
-        ProgramCall pgmCall;
-        if (getISeriesEndpoint().getType() == Jt400Type.PGM) {
-            pgmCall = new ProgramCall(iSeries);
-        } else {
-            pgmCall = new ServiceProgramCall(iSeries);
-            ((ServiceProgramCall)pgmCall).setProcedureName(getISeriesEndpoint().getProcedureName());
-            ((ServiceProgramCall)pgmCall).setReturnValueFormat(ServiceProgramCall.NO_RETURN_VALUE);
-        }
-        pgmCall.setProgram(commandStr);
-        pgmCall.setParameterList(parameterList);
+            String commandStr = getISeriesEndpoint().getObjectPath();
+            ProgramParameter[] parameterList = getParameterList(exchange, iSeries);
+
+            ProgramCall pgmCall;
+            if (getISeriesEndpoint().getType() == Jt400Type.PGM) {
+                pgmCall = new ProgramCall(iSeries);
+            } else {
+                pgmCall = new ServiceProgramCall(iSeries);
+                ((ServiceProgramCall) pgmCall)
+                    .setProcedureName(getISeriesEndpoint().getProcedureName());
+                ((ServiceProgramCall) pgmCall)
+                    .setReturnValueFormat(ServiceProgramCall.NO_RETURN_VALUE);
+            }
+            pgmCall.setProgram(commandStr);
+            pgmCall.setParameterList(parameterList);
 
-        if (LOG.isDebugEnabled()) {
-            LOG.trace("Starting to call PGM '{}' in host '{}' authentication with the user '{}'",
+            if (LOG.isDebugEnabled()) {
+                LOG.trace(
+                    "Starting to call PGM '{}' in host '{}' authentication with the user '{}'",
                     new Object[]{commandStr, iSeries.getSystemName(), iSeries.getUserId()});
-        }
+            }
 
-        boolean result = pgmCall.run();
+            boolean result = pgmCall.run();
 
-        if (LOG.isTraceEnabled()) {
-            LOG.trace("Executed PGM '{}' in host '{}'. Success? {}", commandStr, iSeries.getSystemName(), result);
-        }
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Executed PGM '{}' in host '{}'. Success? {}", commandStr,
+                    iSeries.getSystemName(), result);
+            }
 
-        if (result) {
-            handlePGMOutput(exchange, pgmCall, parameterList);
-        } else {
-            throw new Jt400PgmCallException(getOutputMessages(pgmCall));
+            if (result) {
+                handlePGMOutput(exchange, pgmCall, parameterList, iSeries);
+            } else {
+                throw new Jt400PgmCallException(getOutputMessages(pgmCall));
+            }
+        } catch (Exception e) {
+            throw new Jt400PgmCallException(e);
+        } finally {
+            release(iSeries);
         }
     }
 
-    private ProgramParameter[] getParameterList(Exchange exchange) throws InvalidPayloadException, PropertyVetoException {
+    private ProgramParameter[] getParameterList(Exchange exchange, AS400 iSeries) throws InvalidPayloadException, PropertyVetoException {
 
         Object body = exchange.getIn().getMandatoryBody();
 
@@ -147,7 +158,7 @@ public class Jt400PgmProducer extends DefaultProducer {
         return parameterList;
     }
 
-    private void handlePGMOutput(Exchange exchange, ProgramCall pgmCall, ProgramParameter[] inputs) throws InvalidPayloadException {
+    private void handlePGMOutput(Exchange exchange, ProgramCall pgmCall, ProgramParameter[] inputs, AS400 iSeries) throws InvalidPayloadException {
 
         Object body = exchange.getIn().getMandatoryBody();
         Object[] params = (Object[]) body;
@@ -196,23 +207,20 @@ public class Jt400PgmProducer extends DefaultProducer {
         return outputMsg.toString();
     }
 
-    @Override
-    protected void doStart() throws Exception {
-        if (iSeries == null) {
-            iSeries = getISeriesEndpoint().getSystem();
-        }
+    private AS400 connect() throws Exception {
+        AS400 iSeries = getISeriesEndpoint().getSystem();
         if (!iSeries.isConnected(AS400.COMMAND)) {
-            LOG.info("Connecting to {}", getISeriesEndpoint());
+            LOG.debug("Connecting to {}", getISeriesEndpoint());
             iSeries.connectService(AS400.COMMAND);
         }
+
+        return iSeries;
     }
 
-    @Override
-    protected void doStop() throws Exception {
+    private void release(AS400 iSeries) throws Exception {
         if (iSeries != null) {
-            LOG.info("Releasing connection to {}", getISeriesEndpoint());
+            LOG.debug("Releasing connection to {}", getISeriesEndpoint());
             getISeriesEndpoint().releaseSystem(iSeries);
-            iSeries = null;
         }
     }