最近、ソフトウェアで Akka を使い始めましたが、コードのほとんどはまだ「従来の」Java コードです。私は現在、既存のクラスで Akka を使用したい立場にありますが、これらのクラスも使用する既存のコードをすべて書き直すことはできません。
特に、データ オブジェクトのマップを管理するクラスがあります。マップはすでに異なるスレッドによって同時に使用されているため、マネージャー クラスはマップへのすべてのアクセスが同期されていることを確認します。不要になったオブジェクトをマップから削除するクリーンアップ ジョブを作成する必要があります。このジョブはバックグラウンドで非同期に実行されることになっているため、Akka エージェントを使用します。つまり、多かれ少なかれ次のようなコードがあります。
Agent< ObjectManager > myObjectManagerAgent = new Agent< ObjectManager >( myObjectManager, myActorSystem );
...
myObjectManagerAgent.sendOff(
new Function< ObjectManager, ObjectManager >()
{
@Override
public ObjectManager apply( final ObjectManager objectManager )
{
...
objectManager.erase( irrelevantObjectIds );
return objectManager;
}
}
);
ただし、同じオブジェクト マネージャは、ソフトウェア内の他のいくつかの場所からエージェントなしで直接書き込まれます。前述のように、このアクセスはスレッドセーフですが、Akka、アクター、またはエージェントについては何も知りません。
ここで私の質問は次のとおりです。それとも、ここで自分の足を撃っていますか?一般的に機能する場合でも、知っておくべき潜在的なトラップや安全対策はありますか?