2010-09-13 3 views
2

J'essaie de me connecter à plusieurs référentiels SVN en parallèle, en utilisant différents threads, avec SVNKit.Configuration de SVNKit en multithreading

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

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

Il est évident que les méthodes statiques me font concernés dans un environnement multithread. Ma question est:

  1. Est-il possible d'utiliser SVNKit de 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 pouvait expliquer la raison pour laquelle je dois appeler ces méthodes.

Répondre

2

Vous ne devez appeler cette méthode qu'une seule fois avant de créer des instances de référentiel dans vos différents threads.

De SVNRepositoryFactoryImpl javadoc:

faire une seule 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)

ici est 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)); 

en environnement multithread, vous pouvez créer une classe implémentant 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();