Contexts question
drapierwim Oct 22, 2005 10:20 AMI'm having some problems with the different contexts that are not clear to me.
First my EntityBean is scoped with 'session' an SFSB scoped also 'session' this SFSB has a method that returns a collection of my entitybeans.
When I write my test I can't find my object in the session context, but instead it's found in the conversation context. This I do not understand.
Below is the code in case...
@Entity
@Name("journal")
@Scope(ScopeType.SESSION)
@Inheritance(discriminatorValue="J")
public class JournalAccount extends DetailAccount {
 private Collection<Transaction> transactions;
 public JournalAccount() { }
 /**
 * @return Returns the posts.
 */
 @OneToMany
 public Collection<Transaction> getTransactions() {
 return transactions;
 }
 /**
 * @param posts The posts to set.
 */
 public void setTransactions(Collection<Transaction> posts) {
 this.transactions = posts;
 }
}
@Stateful
@Name("accountingService")
@Scope(ScopeType.SESSION)
@Interceptor(SeamInterceptor.class)
@LoggedIn
public class AccountingServiceBean implements AccountingService {
 private static final Logger logger = Logger.getLogger(AccountingServiceBean.class);
 @PersistenceContext(type=PersistenceContextType.EXTENDED)
 private EntityManager em;
 @DataModel
 private List<JournalAccount> journals;
 @DataModelSelectionIndex
 private int journalIndex;
 @In(required=false)
 @Out(required=false)
 private JournalAccount journal;
 public String getJournals() {
 journal = null;
 journals = em.createQuery("from JournalAccount")
 .getResultList();
 logger.info(journals.size() + " Journals found");
 return "journals";
 }
 public String selectJournal() {
 if(journals == null) return "main";
 setJournal();
 return "selected";
 }
 @Destroy @Remove
 public void destroy() {
 logger.info("destroyed");
 }
 private void setJournal() {
 journal = journals.get(journalIndex);
 logger.info("Selected journal has tableindex " + journalIndex +
 " -> " + journal.getNumber() +
 "," + journal.getDescription());
 }
}
String id = new Script() {
 AccountingService accountingService;
 @Override
 protected void applyRequestValues() throws Exception {
 Contexts.getSessionContext().set("loggedIn", true);
 Contexts.getSessionContext().set("user", new User("Gavin King", "foobar", "gavin"));
 }
 @Override
 protected void invokeApplication() throws Exception {
 accountingService = (AccountingService) Component.getInstance("accountingService", true);
 String outcome = accountingService.getJournals();
 assert "journals".equals(outcome);
 }
 @Override
 protected void renderResponse() throws Exception {
 DataModel journals = (DataModel) Contexts.getSessionContext().get("journals");
 assert journals.getRowCount() == 4;
 assert ((JournalAccount) journals.getRowData()).getNumber() == 700000;
 assert Manager.instance().isLongRunningConversation();
 }
 }.run(); 
    