First, thanks for the pointers. I'll look up the "after transaction" event in
the CVS. It must have been a freshly added one, as it's not listed in the Seam
2B docs... yet.
Now, in regards to anonymous wrote : How about using your debugger to find out
why ? Sheesh! where did I say that I didn't use one? Just tried to spare
everyone the gory details, as my concern was mainly whether I use the
components in a correct way - but since you asked, here goes...
To trace the problem, I used a modified EntityQuery class, with some logging
added to the methods that manipulate resultList. Only modified methods are
shown for brewity.
package org.jboss.seam.framework;
| public class EntityQuery extends Query<EntityManager> {
| private static final Log log = LogFactory.getLog(EntityQuery.class);
| private List resultList;
|
| private void initResultList() {
| log.warn("Entered initResultList(), ejbql " + getEjbql()
| + ", hashcode " + this.hashCode() + ", list
size "
| + (resultList == null ? "null" :
resultList.size()));
| if (resultList == null) {
| javax.persistence.Query query = createQuery();
| resultList = query == null ? null :
query.getResultList();
| }
| log.warn("Exited initResultList(), ejbql " + getEjbql() + ",
hashcode "
| + this.hashCode() + ", list size "
| + (resultList == null ? "null" :
resultList.size()));
| }
| @Transactional
| @Override
| public List getResultList() {
| log.warn("Entered getResultList(), ejbql " + getEjbql() + ",
hashcode "
| + this.hashCode() + ", list size "
| + (resultList == null ? "null" :
resultList.size()));
| if (isAnyParameterDirty()) {
| refresh();
| }
| initResultList();
| try {
| return truncResultList(resultList);
| } finally {
| log.warn("Exited getResultList(), ejbql " + getEjbql()
| + ", hashcode " + this.hashCode() + ",
list size "
| + (resultList == null ? "null" :
resultList.size()));
| }
| }
| @Override
| @Transactional
| public boolean isNextExists() {
| log.warn("Entered isNextExists(), ejbql " + getEjbql() + ",
hashcode "
| + this.hashCode() + ", list size "
| + (resultList == null ? "null" :
resultList.size()));
| return resultList != null && resultList.size() >
getMaxResults();
| }
| @Override
| public void refresh() {
| log.warn("Entered refresh(), ejbql " + getEjbql() + ", hashcode
"
| + this.hashCode() + ", list size "
| + (resultList == null ? "null" :
resultList.size()));
| super.refresh();
| resultCount = null;
| resultList = null;
| singleResult = null;
| log.warn("Exited refresh(), ejbql " + getEjbql() + ", hashcode "
| + this.hashCode() + ", list size "
| + (resultList == null ? "null" :
resultList.size()));
| }
| }
And here's the log output during the execution of controller's save() method
for a new record:
WARN [org.jboss.seam.framework.EntityQuery] - Entered refresh(), ejbql FROM
Account WHERE closed = false AND familyExemption = false AND user =
#{principal}, hashcode 10610605, list size 5
| WARN [org.jboss.seam.framework.EntityQuery] - Exited refresh(), ejbql FROM
Account WHERE closed = false AND familyExemption = false AND user =
#{principal}, hashcode 10610605, list size null
| WARN [org.jboss.seam.framework.EntityQuery] - Entered getResultList(),
ejbql FROM Account WHERE closed = false AND familyExemption = false AND user =
#{principal}, hashcode 10610605, list size 5
| WARN [org.jboss.seam.framework.EntityQuery] - Entered initResultList(),
ejbql FROM Account WHERE closed = false AND familyExemption = false AND user =
#{principal}, hashcode 10610605, list size 5
ejbql and hashcode output is mainly to make sure we're dealing with the right
query, and that it stays the same object during execution (i.e., not dropped
and re-created).
As you can see, refresh() resets the resultList to null all right, yet the next
time query gets accessed, it still contains the same old result list (refreshed
one would contain 6 items, as one was added)! There are no modifications to
resultList in between these calls, as evident from both the logs, and from the
breakpoints I've been placing. My suspicions were at the javassist, that with
the bytecode enhancement on EntityQuery not all modifications to resultList
would be caught by debugger, but since I don't know jack about javassist and
bytecode, I didn't investigate those.
Now, I hope I explained that it's not because I'm lazy to use a debugger, that
I'm running out of ideas on why is this problem happening?
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4065867#4065867
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4065867
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user