[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-1840) Serious nasty problem with ManagedEntityIdentityInterceptor

Daniel Dacila (JIRA) jira-events at lists.jboss.org
Mon Nov 12 08:26:44 EST 2007


    [ http://jira.jboss.com/jira/browse/JBSEAM-1840?page=comments#action_12387051 ] 
            
Daniel Dacila commented on JBSEAM-1840:
---------------------------------------

Simple test case.
I spent 2 nights working on trying different changes thinking that my code is not good.
And I tested it with Ricfaces 3.1.2 and 3.2.0 and simple h:datatable, so it is not faces related.

I have changed the original hotelBooking example like this:

@Name("hotelSearch")
@Scope(ScopeType.CONVERSATION)
public class HotelSearchingAction implements Serializable {
...
@Begin(join = true)
public void find() {
...
}
...
}

and

@Name("hotelBooking")
public class HotelBookingAction
{
...
@Begin(nested = true)
public void selectHotel(Hotel selectedHotel)
{
...
}
...
}


exactly the same.
1st search - everything ok
hit view hotel - ok
hit cancel - the search view presents all the hotels but their attributes are empty.

> 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- at 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: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list