これはかなり初心者の質問です-私はそれを知っていることを知っておいてください.
一部のデータを一度ロードし、その Bean のすべてのインスタンスで使用するために静的変数にローカルにキャッシュする必要があるステートレス セッション Bean があります。データには、エンティティ Bean を介してアクセスできます。エンティティ インスタンスをキャッシュしても安全かどうか、またはクローンを作成する必要があるかどうか疑問に思っています。また、このエンティティにはサブエンティティもあります。
エンティティ Foo を呼び出します。Foo には Bar があります。私のセッション Bean では、次のようなことをしたいと思います。
private static final FOO_ID = 123L;
private static Foo foo;
private static Foo getFoo(EntityManager em) {
if (foo != null)
return foo;
return foo = (Foo) em.find(Foo.class, FOO_ID);
}
public void someBusinessMethod() {
EntityManager em = Container.getInstance().getEntityManager();
Foo foo = getFoo(em);
Bar bar = foo.getBar();
// do some stuff with foo and bar
}
私の質問:
これは悪い考えですか?それは機能しますか?
おそらくその getFoo() メソッドを必要とせずに、Foo データを一度ロードするより良い方法はありますか? Session クラスがロードされたときに静的に実行するのが理想的です。
コメントごとの新しい (正確な) サンプル コード:
public class Foo { // entity
private Long id;
private String name;
// getters and setters
}
public class Bar { // entity
private Long id;
private String name;
// getters and setters
}
public class FooHelper implements Helper {
private static final long FOO_ID = 123L;
private Foo foo;
public FooHelper() {
// use FOO_ID to look up a Foo & cache it locally
}
@Override
public void addBar(EntityManager em) {
Bar bar = new Bar();
bar.setName(foo.getName());
em.persist(bar);
}
public class StatelesSessionBean {
private static final Helper helper = new FooHelper();
public void someBusinessMethod() {
@PersistenceContext
EntityManager em;
helper.addBar(em);
}
}