2016-05-22 5 views
2

Lagom Frameworkを使用することを学んでおり、永続側の仕組みを理解できません。Lagom Frameworkで永続化せずに状態を取得する方法

私の例はシンプルです。商品を作成、購入、注文して株価を変動させる商品在庫といくつかのサービスがあります。現時点では、在庫の量と各在庫の移動量を加えた商品を追加/削除しています。私が達成したいのは、すべての株式移動を維持し、それらから製品を作り出すことだけです。

ラゴムフレームワークについて私が理解することは、製品を永続させるべきではなく、株式移動のイベントであるということです。このようにして、製品の在庫を知りたい場合、イベントは何とか処理されて現在の状態を取得します。ここ

私のサービスの実装では

は、私は今のところ、製品の状態を取得する方法である:

@Override 
public ServiceCall<String, NotUsed, Source<Product, ?>> getProduct() { 
    return (id, req) -> { 
     Source<Product, ?> result = session.select("SELECT * FROM products WHERE id = ?", id) 
       .map(row -> new Product(row.getString("id"), row.getString("ean"), row.getLong("quantity"))); 
     return CompletableFuture.completedFuture(result); 
    }; 
} 

、ここでは、私が株式を追加する方法です:

@Override 
public ServiceCall<String, Stock, NotUsed> add() { 
    return (id, request) -> { 
     log.info("EAN: {}. Supply order received.", id); 
     PersistentEntityRef<StockCommand> ref = persistentEntityRegistry.refFor(StockEntity.class, id); 
     return ref.ask(new StockCommand.AddStock(request.amount)).thenApply(r -> NotUsed.getInstance()); 
    }; 
} 

Lagomへと方法はあります永続化されたイベントでのみ製品の状態を再構築しますか?私のニーズにどのように達成することができますか?

答えて

2

私の謝罪、私はあなたの例が非常に混乱していることを発見しました。つまり、複数の商品を持つ在庫があります。各製品には、使用可能なアイテムの数を表すカウントがあります。注文プロセスは、製品が購入されるとカウントを減少させ、倉庫配送プロセスは在庫を増加させる(したがってカウント)。

コマンドにstate()関数を使用して状態を取得できます。

同様の使用例の詳細については、https://github.com/orefalo/lagom-sample-bankを参照してください。

希望します。

+0

この質問を確認することをお忘れして申し訳ありません。これはプロジェクトを完全にリファクタリングすることで解決され、私の質問は無関係になりました。しかし、助けてくれてありがとう。 –

関連する問題