2

SVNKitを使用して、さまざまなスレッドを使用して、多数のSVNリポジトリに並列に接続しようとしています。

オンラインでいくつかのコード例を見ると、SVNKitを使用する前に、静的メソッドを使用して初期化する必要があるようです。

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

明らかに静的メソッドは、マルチスレッド環境に関心を持っています。私の質問は:

  1. このようにSVNKitを並行して使用することは可能ですか?
  2. これらのセットアップメソッドをいつ呼び出す必要がありますか?ソフトウェアの最初で、スレッドごとに1回だけ、何ですか?

また、これらのメソッドを呼び出さなければならない理由を誰かが説明してくれたら嬉しいです。

4

1 に答える 1

2

異なるスレッドでリポジトリインスタンスを作成する前に、このメソッドを1回呼び出すだけで済みます。

SVNRepositoryFactoryImpl javadocから:

ライブラリを使用する前に、アプリケーションで1回実行すると、svn-protocol(svnおよびsvn + sshを介して)を介してリポジトリを操作できるようになります。

これは2つのリポジトリ(モノスレッド)を持つサンプルコードです:

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

マルチスレッド環境では、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
    }
}

そして、次のように使用します。

SVNRepositoryFactoryImpl.setup(); // STILL ONCE!

(new Thread(new ProcessSVN("http://svnurl1"))).start();
(new Thread(new ProcessSVN("http://svnurl2"))).start();
于 2010-09-16T22:06:36.757 に答える