3

CDIのリポジトリクラスの(必要なリソースの観点から)最も効率的なスコープは何でしょうか。次のシナリオを想像してみてください。

@RequestScoped
//OR @ApplicationScoped OR @SessionScoped OR @ConversationScoped?
public class SomeRepository{
  @Inject 
  private EntityManager em;

  public SomeClass getSomeClassById(int id){
    return em.createNamedQuery("getSomeClassById",SomeClass.class).
             setParameter("id",id).getSingleResult();
   }
}

この例のEntityManagerは、@RequestScopedスコープを使用して生成されます。

4

1 に答える 1

1

面白い質問だと思います。意外と、これらのクラスを特別なものにするものは何も考えられません。したがって@ApplicationScoped、新しいインスタンスが破棄したものとまったく同じように機能するように、それらを作成します。ヒープに目立った影響があるかどうかはわかりませんが、おそらくそうではありませんが、大量に再作成する必要がある場合はどうでしょうか。

概念的にあなたにとってより適切であると感じるものと一緒に行くのは良いことだと思います。

于 2013-03-24T00:43:19.153 に答える