私は原型org.jboss.weld.archetypes:jboss-javaee6-webapp:1.0.1.CR2
を持っていると私はクラスMemberListProducer
を理解しよう:たJavaEEとCDI:理解@Observes
@RequestScoped
public class MemberListProducer
{
@Inject @MemberRepository private EntityManager em;
private List<Member> members;
@Produces @Named public List<Member> getMembers() {return members;}
public void onMemberListChanged(@Observes(notifyObserver = Reception.IF_EXISTS)
final Member member){
retrieveAllMembersOrderedByName();
}
@PostConstruct
public void retrieveAllMembersOrderedByName()
{
//Criteria Query to fetch all members
members = em.createQuery(criteria).getResultList();
}
}
オブザーバがmemberEventSrc.fire(newMember);
で別のクラスから呼び出され、これは明確なようだ:一度解雇、MemberListProducer
メンバーのリストを更新します。
しかし、これがなぜ@RequestScoped
Beanで行われたのか分かりません。私の理解では、方法ごとにretrieveAllMembersOrderedByName
が呼び出されます。この@Observes
は@ViewScoped
または@SessionScoped
Beanに配置しないとよいでしょうか?この場合でも効果はありますか?
私はこの例は理論的であり、最適化できると言ったように心に留めておく。あなたは通常、すべてのメンバーをメモリに保持しません。そうすれば、おそらく@applicationscopedまたはSingletonなどです。私はあなたがすでにそのheheを知っていると確信しています。 – arg20