On 17/06/2011 09:02, Mark Thomas wrote: > On 17/06/2011 00:32, Gary Gregory wrote: >> I think 2.0 is the opportunity to do this right. Almost like we were >> designing this from scratch. >> >> Making the factory an invariant of the pool sounds good. >> >> Otoh If a setFactory method exists it should be implemented fully. The >> throw an exception impl is pretty "smelly". > > I agree that it is smelly. I'm not sure we can change this without a > huge amount of work in DBCP.
I think largely due to the clean-up Phil has already done in DBCP, this is now manageable. I have just done this for GOP and will do the same for GKOP next (exact timing TBD). Mark > > Mark > >> >> Gary >> >> On Jun 16, 2011, at 13:39, Phil Steitz <phil.ste...@gmail.com> wrote: >> >>> On 6/16/11 10:19 AM, Mark Thomas wrote: >>>> On 16/06/2011 17:32, sebb wrote: >>>>> On 16 June 2011 17:25, Phil Steitz <phil.ste...@gmail.com> wrote: >>>>>> Yesterday I fixed some [dbcp] "problems" caused by the new [pool] >>>>>> requirement that setFactory can only be called once. The quotes are >>>>>> because most of the problems were redundant calls to setFactory. >>>>>> The reason that we left setFactory in [pool] is that [dbcp]'s >>>>>> connection factory constructors call setFactory on the pool passed >>>>>> to them. It is an easy "mistake" to create a pool, then create a >>>>>> connection factory and then do pool.setFactory(factory). I >>>>>> eliminated all of these usages from within [dbcp], but I bet a fair >>>>>> amount of user code will similarly blow up when people upgrade. >>>>> AIUI, the upgrade does require code to be changed because of the package >>>>> rename? >>>> It does, but that is just a search and replace and compilation will fail >>>> until it is fixed. >>>>> If so, can we not drop the setFactory method and provide it as a >>>>> constructor parameter? >>>> I don't think so. We have been around this buoy already. >>>> >>>> To quote Phil's summary: >>>> <quote> >>>> I think it is more natural to have >>>> pool = new GKOP(factory,...) have factory.setPool(this) as a side >>>> effect than >>>> factory = new KPOF(...,pool...) have pool.setFactory(this) as a side >>>> effect >>>> </quote> >>>> >>>> I disagree with Phil on this. Since a pool only has one factory whereas >>>> a factory may support multiple pools, >>> >>> I had not thought about it that way before. What is humorous is >>> that that logic makes it questionable to pass the pool to the >>> factory constructor (or at least just one pool). In the case of >>> [dbcp]'s PoolableConnectionFactory, it is hard-wired 1-1 to the >>> pool because it needs to provide the PoolableConnections that it >>> sources a reference to their owning pool. I guess a generalized PCF >>> could source objects for multiple pools, in which case the >>> constructor could take a collection of pools. I now see your >>> point. In any case, from my perspective, the requirement to be able >>> to set the factory is understood and I am fine with keeping the code >>> as it is, possibly with the small patch below. >>> >>> Phil >>> >>> >>>> I think it is wrong for for "new >>>> GKOP(factory,...)" to have "factory.setPool(this)" as a side-effect. I >>>> think "new KPOF(...,pool...)" having "pool.setFactory(this)" as a side >>>> effect is the more natural choice (as per the current code). >>>> >>>>>> I hate to keep backsliding here, but maybe we should to this in GOP >>>>>> setFactory: >>>>>> >>>>>> synchronized (factoryLock) { >>>>>> if (this.factory == null) { >>>>>> this.factory = factory; >>>>>> - } else { >>>>>> + } else if (this.factory != factory) { >>>>>> throw new IllegalStateException("Factory >>>>>> already set"); >>>>>> } >>>>>> } >>>> I'd be OK with that. If we sort out logging we can log it at INFO as >>>> unnecessary. >>>> >>>> Mark >>>> >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>> >>>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>> For additional commands, e-mail: dev-h...@commons.apache.org >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> For additional commands, e-mail: dev-h...@commons.apache.org >> > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org