2012-05-02 16 views
3

私は分散ロック実装をテストしようとしていますが、まだ動作させる方法が見つかりませんでした。Hazelcastを使用した分散ロックが動作していません

@GET 
@Path("/lock") 
@Produces("text/*") 
public String lock() throws InterruptedException { 
    Lock lock = distributedService.getDistributedLock("test"); 
    boolean result = lock.tryLock(5, TimeUnit.SECONDS); 
    return result ? "locked" : "timeout"; 
} 

@GET 
@Path("/unlock") 
@Produces("text/*") 
public String unlock() { 
    Lock lock = distributedService.getDistributedLock("test"); 
    lock.unlock(); 
    return "unlocked"; 
} 

distributedServiceオブジェクトがgetDistributedLock()メソッドを実装: は、私はこのように、2つの簡単な方法でRESTサービスを展開しhazelcast.xmlファイルで

@Override 
public Lock getDistributedLock(String lockName) { 
    return Hazelcast.getDefaultInstance().getLock(lockName); 
} 

を、私はTCPを有効に - IP接続と他の無効のすべて:

<network> 
<port auto-increment="true">5701</port> 
<join> 
    <multicast enabled="false" /> 
    <tcp-ip enabled="true"> 
    <interface>192.168.0.01</interface> 
    <interface>192.168.0.02</interface> 
    </tcp-ip> 
</join> 
<interfaces enabled="false" /> 
<symmetric-encryption enabled="false" /> 
<asymmetric-encryption enabled="false" /> 

.xmlファイル(192.168.0.01と192.168.0.02)に対応するIPアドレスを持つ2つのマシンにアプリケーションをデプロイし、ブラウザからサービスを呼び出すと、初めて動作します私はlock()メソッドを呼び出すたびに、私はタイムアウトを取得します。 unlock()メソッドがロックを解除しているようには見えません。

ハローキャストで分散ロックを使用する正しい方法を教えてもらえますか?

答えて

7

ロックされたスレッドのみがロックを解除できます。ロックとロック解除のためにRESTを実装したとします。そして私は、ロックとロック解除のスレッドが異なると推測します。だからこそ、それは働いていないのです。スレッド名を印刷してみてください。

+0

はい、正しいです。私はテストメソッドを改善し、スレッドは異なっていました。ありがとう。 –

+0

おそらくforceUnlockも使用できます... – heaphach

関連する問題