| Summary: | SessionBroker's member sessions get postLogin event before descriptors initialized | ||||||
|---|---|---|---|---|---|---|---|
| Product: | z_Archived | Reporter: | Andrei Ilitchev <andrei.ilitchev> | ||||
| Component: | Eclipselink | Assignee: | Nobody - feel free to take it <nobody> | ||||
| Status: | CLOSED FIXED | QA Contact: | |||||
| Severity: | normal | ||||||
| Priority: | P3 | ||||||
| Version: | unspecified | ||||||
| Target Milestone: | --- | ||||||
| Hardware: | PC | ||||||
| OS: | Windows XP | ||||||
| Whiteboard: | |||||||
| Attachments: |
|
||||||
|
Description
Andrei Ilitchev
Correction to the workaround. All event listeners added to the SessionBroker are also added to all its member sessions. Therefore each listener added to SessionBroker will receive postLogin event for each member session and for the broker. The listener should ignore postLogin event risen by member sessions, process the event risen by SessionBroker (event.getSession().isSessionBroker()). Created attachment 199623 [details]
Suggested patch.
The patch makes sure that postLogin event is risen after descriptors have been
initialized. In SessionBroker case it happens after all the member sessions are
logged in and SessionBroker has initialized all descriptors.
preLogin event for member sessions used to be risen twice - that's fixed, too.
Here's the order in which events are risen:
brokerListener(preLogin(broker))
for each member session:
memberListener(preLogin(member))
brokerListener(preLogin(broker))
for each member session:
memberListener(postLogin(member))
brokerListener(postLogin(broker))
brokerListener(postLogin(broker))
The patch is tested in composite.advanced.EntityManagerJUnitTestSuite.testSetup
by verifyPrePostLoginEvents method.
The patch checked into both trunk (2.4) and 2.3.1 Correction to the previous comment:
Here's the order in which events are risen:
brokerListener(preLogin(broker))
for each member session:
memberListener(preLogin(member))
brokerListener(preLogin(member))
for each member session:
memberListener(postLogin(member))
brokerListener(postLogin(member))
brokerListener(postLogin(broker))
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink |