You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2014/03/07 04:23:15 UTC
[2/2] git commit: CAMEL-7277 camel-ssh should close the session when
execution is finished.
CAMEL-7277 camel-ssh should close the session when execution is finished.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5d019355
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5d019355
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5d019355
Branch: refs/heads/camel-2.11.x
Commit: 5d0193555169bf8c940b64683be5645cd80e3fde
Parents: d26d7c5
Author: Willem Jiang <wi...@gmail.com>
Authored: Fri Mar 7 11:17:34 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Fri Mar 7 11:22:47 2014 +0800
----------------------------------------------------------------------
.../apache/camel/component/ssh/SshEndpoint.java | 109 +++++++++++--------
1 file changed, 61 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/5d019355/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshEndpoint.java b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshEndpoint.java
index e107009..f80f7d5 100644
--- a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshEndpoint.java
+++ b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshEndpoint.java
@@ -94,55 +94,68 @@ public class SshEndpoint extends ScheduledPollEndpoint {
log.debug("Connected to {}:{}", getHost(), getPort());
- AuthFuture authResult;
- ClientSession session = connectFuture.getSession();
-
- KeyPairProvider keyPairProvider;
- final String certResource = getCertResource();
- if (certResource != null) {
- log.debug("Attempting to authenticate using ResourceKey '{}'...", certResource);
- keyPairProvider = new ResourceHelperKeyPairProvider(new String[]{certResource}, getCamelContext().getClassResolver());
- } else {
- keyPairProvider = getKeyPairProvider();
+ ClientChannel channel = null;
+ ClientSession session = null;
+
+ try {
+ AuthFuture authResult;
+ session = connectFuture.getSession();
+
+ KeyPairProvider keyPairProvider;
+ final String certResource = getCertResource();
+ if (certResource != null) {
+ log.debug("Attempting to authenticate using ResourceKey '{}'...", certResource);
+ keyPairProvider = new ResourceHelperKeyPairProvider(new String[]{certResource}, getCamelContext().getClassResolver());
+ } else {
+ keyPairProvider = getKeyPairProvider();
+ }
+
+ if (keyPairProvider != null) {
+ log.debug("Attempting to authenticate username '{}' using Key...", getUsername());
+ KeyPair pair = keyPairProvider.loadKey(getKeyType());
+ authResult = session.authPublicKey(getUsername(), pair);
+ } else {
+ log.debug("Attempting to authenticate username '{}' using Password...", getUsername());
+ authResult = session.authPassword(getUsername(), getPassword());
+ }
+
+ authResult.await(getTimeout());
+
+ if (!authResult.isDone() || authResult.isFailure()) {
+ log.debug("Failed to authenticate");
+ throw new RuntimeCamelException("Failed to authenticate username " + getUsername());
+ }
+
+ channel = session.createChannel(ClientChannel.CHANNEL_EXEC, command);
+
+ ByteArrayInputStream in = new ByteArrayInputStream(new byte[]{0});
+ channel.setIn(in);
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ channel.setOut(out);
+
+ ByteArrayOutputStream err = new ByteArrayOutputStream();
+ channel.setErr(err);
+ OpenFuture openFuture = channel.open();
+ openFuture.await(getTimeout());
+ if (openFuture.isOpened()) {
+ channel.waitFor(ClientChannel.CLOSED, 0);
+ result = new SshResult(command, channel.getExitStatus(),
+ new ByteArrayInputStream(out.toByteArray()),
+ new ByteArrayInputStream(err.toByteArray()));
+
+ }
+ return result;
+ } finally {
+ if (channel != null) {
+ channel.close(true);
+ }
+ // need to make sure the session is closed
+ if (session != null) {
+ session.close(false);
+ }
}
-
- if (keyPairProvider != null) {
- log.debug("Attempting to authenticate username '{}' using Key...", getUsername());
- KeyPair pair = keyPairProvider.loadKey(getKeyType());
- authResult = session.authPublicKey(getUsername(), pair);
- } else {
- log.debug("Attempting to authenticate username '{}' using Password...", getUsername());
- authResult = session.authPassword(getUsername(), getPassword());
- }
-
- authResult.await(getTimeout());
-
- if (!authResult.isDone() || authResult.isFailure()) {
- log.debug("Failed to authenticate");
- throw new RuntimeCamelException("Failed to authenticate username " + getUsername());
- }
-
- ClientChannel channel = session.createChannel(ClientChannel.CHANNEL_EXEC, command);
-
- ByteArrayInputStream in = new ByteArrayInputStream(new byte[]{0});
- channel.setIn(in);
-
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- channel.setOut(out);
-
- ByteArrayOutputStream err = new ByteArrayOutputStream();
- channel.setErr(err);
- OpenFuture openFuture = channel.open();
- openFuture.await(getTimeout());
- if (openFuture.isOpened()) {
- channel.waitFor(ClientChannel.CLOSED, 0);
- result = new SshResult(command, channel.getExitStatus(),
- new ByteArrayInputStream(out.toByteArray()),
- new ByteArrayInputStream(err.toByteArray()));
-
- }
-
- return result;
+
}
@Override