On Jan 25, 2009, at 9:28 PM, Mck wrote:

>
>> Can anyone figure out what might go wrong in the original version of
>> the class?
>
> I have no idea how something here can result in a 404.
> Do multiple instances create cause the 404?
>

I can see no other explanation. But I fail to see why.

> As far as the locking i wonder if because INSTANCES in a HashMap and  
> not
> meant to be used concurrently that this introduces the need to have  
> the
> second check. But replacing the HashMap with a ConcurrentHashMap is  
> only
> useful when having multiples instances isn't a problem.
>
>
> On a separate note would the following work as an base implementation
> that all our SiteKeyedFactories could use:
>
>

Yes. Looks good!

>    static <T> T instanceOf(
>            final Site site,
>            final Map<Site,T> instances,
>            final ReentrantReadWriteLock instancesLock,
>            final FactoryConstructor<T> constructor){
>
>        try {
>            instancesLock.readLock().lock();
>            if (!instances.containsKey(site)) {
>                // It is not possible to upgrade a read lock...
>                instancesLock.readLock().unlock();
>                instancesLock.writeLock().lock();
>                try {
>                    // ...so check the condition again.
>                    if (!instances.containsKey(site)) {
>                        instances.put(site, constructor.construct());
>                    }
>                } catch (SiteKeyedFactoryInstantiationException e) {
>                    LOG.error(ERR_DOC_BUILDER_CREATION, e);
>                } finally {
>                    // Downgrade to a read lock.
>                    instancesLock.readLock().lock();
>                    instancesLock.writeLock().unlock();
>                }
>            }
>            return instances.get(site);
>        } finally {
>            // Finally release the read lock.
>            instancesLock.readLock().unlock();
>        }
>    }
>
>    interface FactoryConstructor<T>{
>        T construct() throws SiteKeyedFactoryInstantiationException;
>    }
>
>
> ~mck
>
> -- 
> "Physics is to math what sex is to masturbation." Richard Feynman
> | semb.wever.org | sesat.no | sesam.no |
> _______________________________________________
> Kernel-development mailing list
> [email protected]
> http://sesat.no/mailman/listinfo/kernel-development

_______________________________________________
Kernel-development mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-development

Reply via email to