0

ここでは、「DataSaveService」と呼ばれる 1 つのサービスを使用して、オブジェクトの保存に使用しています..

class DataSaveService {

    static transactional = true

    def saveObject(object)
    {
        if(object != null)
        {
            try
            {
                if(!object.save())
                {
                    println( ' failed to save ! ')
                    System.err.println(object.errors)
                    return false
                }
                else
                {
                    println('saved...')
                    return true
                }
            }
            catch(Exception e)
            {
                System.err.println("Exception :" + e.getMessage())
                return false
            }
        }
        else
        {
            System.err.println("Object " + object + " is null...")
            return false
        }

    }
}

このサービスは一般的であり、保存のために多くのクラスのオブジェクトで使用されます。複数のリクエストがある場合、その時点で保存に非常に時間がかかるか、かさばると言えます。デフォルトのスコープ、つまりシングルトンのため。

そこで、手間を省くために、このサービスをセッションスコープにしようと思います。お気に入り..

静的スコープ = 'セッション'

次に、コントローラーでこのサービスとメソッドにアクセスした後、例外が生成されました..セッションスコープサービスについてどうすればよいですか?、このシナリオを実装するための他のアイデアはありますか?

主なことは、クラウドで最高のパフォーマンスが必要なことです。ええ、クラウドの答えが必要です。

4

1 に答える 1

2

シングルトン ( としてマークされていない場合synchronized) は、異なるスレッドから同時に、並行して、パフォーマンスの低下なしで呼び出すことができます。これはボトルネックではありません。

しかし、スレッドセーフが本当に必要な場合 (つまり、1 つのメソッド呼び出し内で使用するか、1 つの http 要求または同じユーザーからの異なる要求でアプリケーションのさまざまな部分から使用する必要がある共有状態があることを意味し、実行するつもりはありませんクラウド内のアプリなど)、さまざまなスコープ (スコープなど) を使用できsessionますrequest。しかし、それが優れたアーキテクチャであるかどうかはわかりません。

現在の例では、非シングルトン スコープを使用する利点はありません。また、同じサービスのインスタンスが少ないと、追加のメモリと CPU リソースが必要になることも知っておく必要があります。

于 2012-06-19T12:55:57.393 に答える