Browse Source

Use ServiceLoader to define the default SSH session factory.

Use ServiceLoader and define
org.eclipse.jgit.transport.DefaultSshSessionFactory in
META-INF/services/org.eclipse.jgit.transport.SshSessionFactory so that
the legacy behavior is still the same.

Bug: 553625
Change-Id: Id1a65506140d921ed76d83699e3817f0d2ca08ed
Signed-off-by: Emmanuel Hugonnet <ehugonne@redhat.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
stable-5.8
Emmanuel Hugonnet 5 years ago committed by Matthias Sohn
parent
commit
54b1c7cc6a
  1. 1
      org.eclipse.jgit/resources/META-INF/services/org.eclipse.jgit.transport.SshSessionFactory
  2. 4
      org.eclipse.jgit/src/org/eclipse/jgit/transport/DefaultSshSessionFactory.java
  3. 12
      org.eclipse.jgit/src/org/eclipse/jgit/transport/SshSessionFactory.java

1
org.eclipse.jgit/resources/META-INF/services/org.eclipse.jgit.transport.SshSessionFactory

@ -0,0 +1 @@
org.eclipse.jgit.transport.DefaultSshSessionFactory

4
org.eclipse.jgit/src/org/eclipse/jgit/transport/DefaultSshSessionFactory.java

@ -24,8 +24,10 @@ import com.jcraft.jsch.Session;
* <p>
* If user interactivity is required by SSH (e.g. to obtain a password), the
* connection will immediately fail.
*
* @since 5.7
*/
class DefaultSshSessionFactory extends JschConfigSessionFactory {
public class DefaultSshSessionFactory extends JschConfigSessionFactory {
/** {@inheritDoc} */
@Override
protected void configure(OpenSshConfig.Host hc, Session session) {

12
org.eclipse.jgit/src/org/eclipse/jgit/transport/SshSessionFactory.java

@ -13,6 +13,8 @@ package org.eclipse.jgit.transport;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Iterator;
import java.util.ServiceLoader;
import org.eclipse.jgit.errors.TransportException;
import org.eclipse.jgit.lib.Constants;
@ -31,8 +33,16 @@ import org.eclipse.jgit.util.SystemReader;
* SshSessionFactory for the duration of the period they are using the Session.
*/
public abstract class SshSessionFactory {
private static SshSessionFactory INSTANCE = new DefaultSshSessionFactory();
private static SshSessionFactory INSTANCE = loadSshSessionFactory();
private static SshSessionFactory loadSshSessionFactory() {
ServiceLoader<SshSessionFactory> loader = ServiceLoader.load(SshSessionFactory.class);
Iterator<SshSessionFactory> iter = loader.iterator();
if(iter.hasNext()) {
return iter.next();
}
return null;
}
/**
* Get the currently configured JVM-wide factory.
* <p>

Loading…
Cancel
Save