[ http://issues.apache.org/jira/browse/JS2-501?page=all ] Ate Douma resolved JS2-501: ---------------------------
Resolution: Fixed Fix committed > Pluto ObjectID implementation produces invalid map key values > ------------------------------------------------------------- > > Key: JS2-501 > URL: http://issues.apache.org/jira/browse/JS2-501 > Project: Jetspeed 2 > Type: Bug > Components: Container > Versions: 2.1, 2.0-FINAL > Reporter: Ate Douma > Assignee: Ate Douma > Priority: Blocker > Fix For: 2.1 > > The JetspeedObjectID implementation for the Pluto ObjectID interface contains > a weird and not reliable algorithm for generating distinct > long values for String based id's. > Until now, I never encountered problems with this because in most cases the > provided String id value was long enough to produce > reliable "enough" long keys. > But, when changing from Castor/file based psml to Database stored psml, the > problem with this code suddenly popped up. > As the DatabasePageManager uses generated (long!) id's which are used as > String based id's for seeding the JetspeedObjectID, > duplicate long values began to pop up. This resulted in very "weird" behaving > pages, in which content from one portlet was displayed > in the portlet window of another. The JetspeedObjectID.equals(Object) method > which only compared the generated and not distinct > long values turned out to be cause behind that. > Now, the whole idea of providing some kind of "dual" behavior of the > JetspeedObjectID: representing both a String and a long value > as well as being able to convert from the one to the other, seems to come > from Pluto itself... > The Pluto Portal Driver uses an ObjectID implementation with the exact same > algorithm in it. More specific, this code has > already been provided during the first initial code "drop" of Pluto. Jetspeed > simply copied this "feature"... > The whole idea behind an artificial ObjectID interface (adding *nothing*) for > representing *some* id is beyond me: > why not just use *Object* for that? > Anyway, after evaluating the usage of the ObjectID interface as well as the > Portal Driver implementation within Pluto, > I've come to the conclusion that this "dual" behavior really isn't nor > shouldn't be needed. > There is one Pluto container interface, PortletDefinitionCtrl, which defines > a setId(String oid) method. > Now, that method really should take an ObjectID in my book, not a String! > But, nowhere within Pluto (1.0.1) itself this method is invoked, and neither > is it within Jetspeed. > Usage within Jetspeed clearly is divided between a "String" based usage, like > for PortletEntity/PortletWindow id's, and "Long" > based usage like for PortletDefinition or LocalizedField. > So, I've decided to fix this problem by splitting the two behaviors: > JetspeedObjectID is going to provide only the "String" based > behavior, and a new JetspeedLongObjectID the "Long" based behavior. > That way, these objects now can reliably be used for Map keys. > I also had to "fix" a few OJB mappings (and internal conversions) for this, > but nothing that impacted database definitions itself. > So, AFAIK, this fix should be without side-effects. > Note: > I've removed a few setId(String oid) jetspeed-api interface methods which > were I think accidentally copied over from likewise Pluto interfaces. > But none of those were actually used, nor should they. > I couldn't remove the Jetspeed implementation for the Pluto > PortletDefinitionCtrl.setId(String oid) interface method in > org.apache.jetspeed.om.portlet.impl.PortletDefinitionImpl of course, but now > it will throw a NotSupportedOperationException if invoked. > Finally, I've decided (for now) to only provide this fix for Jetspeed 2.1, > not the 2.0.1 branch as there are a few interface changes which > normally we shouldn't have in a fix release only. If anyone has a good case > for back porting this to the 2.0.1 branch though, do speak > up (before 2.0.1 is released). -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]