Question

Je suis en train de se connecter à de nombreux dépôts SVN en parallèle, en utilisant des fils différents, avec SVNKit.

En regardant quelques exemples en ligne, il semble que le code avant d'utiliser SVNKit je dois l'initialiser en utilisant les méthodes statiques

DAVRepositoryFactory.setup();
SVNRepositoryFactoryImpl.setup();
FSRepositoryFactory.setup();

méthodes statiques me font toute évidence concernée dans un environnement multithread. Ma question est:

  1. Est-il possible d'utiliser SVNKit cette façon, en parallèle?
  2. Quand dois-je appeler ces méthodes de configuration? Seulement au début du logiciel, une fois pour chaque fil, quoi?

Je serais également heureux si quelqu'un pourrait expliquer la raison pour laquelle je dois appeler ces méthodes.

Était-ce utile?

La solution

Vous avez seulement d'appeler cette méthode une fois, avant de créer des instances de référentiel dans vos différents threads.

De SVNRepositoryFactoryImpl javadoc:

  

faire une fois dans votre application avant d'utiliser la bibliothèque permet de travailler avec un référentiel via le protocole svn (sur svn et svn + ssh)

Voici un exemple de code avec 2 référentiels (monofil):

SVNRepositoryFactoryImpl.setup(); // ONCE!

String url1 = "svn://host1/path1";
SVNRepository repository1 = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url1));
String url2 = "svn://host2/path2";
SVNRepository repository2 = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url2));

Dans un environnement multithread, vous pouvez créer une classe qui implémente Runnable:

public class ProcessSVN implements Runnable {

    private String url;

    public ProcessSVN(String url) {
        this.url = url;
    }

    public void run() {
        SVNRepository repository = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url));
        // do stuff with repository
    }
}

Et l'utiliser comme ceci:

SVNRepositoryFactoryImpl.setup(); // STILL ONCE!

(new Thread(new ProcessSVN("http://svnurl1"))).start();
(new Thread(new ProcessSVN("http://svnurl2"))).start();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top