]
Przemyslaw Jaskierski updated JBSEAM-1840:
------------------------------------------
Fix Version/s: 2.0.0.CR1
Affects Version/s: 2.0.0.BETA1
Serious nasty problem with ManagedEntityIdentityInterceptor
-----------------------------------------------------------
Key: JBSEAM-1840
URL:
http://jira.jboss.com/jira/browse/JBSEAM-1840
Project: JBoss Seam
Issue Type: Bug
Components: Core
Affects Versions: 2.0.0.BETA1
Environment: pure Tomcat 6.0.13 + Hibernate 3.2.4, Seam-managed non-JTA Hibernate
transactions, Seam.2.CVS.20.08.2007
Reporter: Przemyslaw Jaskierski
Priority: Critical
Fix For: 2.0.0.CR1
First of all, please do not underestimate problem in this report. It's a tough one,
and definitely not a malfunction on my side. This disclaimer is because as a developer I
know what a PR without a testcase is - but please bear with me. I've already spent
ssooo much time on this issue that my co-workers will shoot my head off :(:(:(. I've
tried to modify Seam examples to demonstrate it to you, but gave up due to problems with
hibernate2 (not working Tomcat deployment), Booking (cannot log into it on AS) (BTW I
understand that it's a BETA, just reporting)... It's 100% reproducible in my
application, but I'm not allowed to share it :(:(:(.
I have a wizard-like, long-running conversation driven by a jpdl pageflow
(flushMode=MANUAL). There is a couple of Conversation-scoped Seam components that backs
this wizard. I have some @Entity and List<@Entity> fields (pure Hibernate
Annotations, no JPA etc.) in some of them.
Problem is that ManagedEntityIdentityInterceptor overwrites valid values of these fields
with NULL or ArrayList<NULL> values from time to time. It's quite discrete, and
I manged to discover this behavior after a huge amount of time only because I've found
this:
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=112335
and
http://jira.jboss.com/jira/browse/JBSEAM-1814.
Note that in my situation there is no DataModel-related stuff involved, access to these
fields is driven by simple get/setters.
There is another strange thing. On Seam debug page I enter my conversation scope and list
all pojos. There is, for example, "pojoName" and "pojoName.listName"
components listed (I have only pojoName component registered with @Name, but looks like
it's some kind of Seam optimization). As long as I enter/exit inspection of pojoName
component, it's listName preserves its content as expected. But after clicking
"pojoName.listName": 1st time it shows it's content, but after entering
pojoName and pojoName.listName after this, this list is replaced by [null, null, null
etc.] values. No, I don't do anything unusual there, it's a simple plain getter.
I think it's not only limited to view-accessed EL-resolved entities, because even my
@In components get nullyfied fields (even during the same unit of work, when doing some
complex cross-component processing in a single http request). Non-@Entity fields are left
untouched.
After looking into ManagedEntityIdentityInterceptor code, I changed my fields to
TRANSIENT (to be skipped by ignore(Field) method) and this made everything working OK,
like expected. Of course having transient fields is not necessary what you want from you
pojos, besides I think that it's a serious problem in ManagedEntityIdentityInterceptor
that will ruin some nights of other developer if left unresolved.
I will gladly test eventual fixes against my codebase.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: