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();