commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simone Tripodi <>
Subject Re: [Graph] Test problems after last commit
Date Sun, 04 Mar 2012 17:08:15 GMT
Hi Marco!

> just for summarize a little our discussion: currently the implementation committed works
exactly as  Collections.syncronized* methodos.

si señor!

> The workaround to export the lock outside is this:
> ===
> GraphInvocationHandler<T> handler =   new GraphInvocationHandler<T>( synchronizedMethods,
checkedToBeSynchronized );
> Object proxy = newProxyInstance( type.getClassLoader(), new Class<?>[] { type },
handler );
> handler.lock = proxy;
> return type.cast( proxy );
> ===
> First of all we create the handler that utilize 'lock' variable to open the synchronized
blocks and after the lock has been set whit the same proxy instance that will be returned.

I still haven't got where the workaround is and why the handler itself
cannot be used as lock object - given the fact the newProxyInstance()
creates an object != Handler is true, the only member of the proxy is
the handler itself.
A proxy class extends java.lang.reflect.Proxy and has an associated
invocation handler object to dispatch methods invocation. Under this
conditions, the only way to get the lock object from outside, is
accessing to the created handler.

So please point me to some doc I maybe don't know or overlooked - TIA

>> I though once again on this and maybe having a synchronized Graph
>> would be different than having a ConcurrentGraph, like
>> Collections.synchronizedMap() and ConcurrentHashMap,
> why [graph] is different from a Map or List data structure? Graph it self is a data structure,
isn't it?

:| who said the opposite?!? read my tense as:

    CommonsGraph#synchronize() : ConcurrentGraph (TBD) =
Collections.synchronizedMap() : ConcurrentHashMap

>> so my suggestion
>> is keeping the synchronized proxy as they are AND provide Concurrent*
>> version of actual graphs. I would implement these adapters in a proper
>> `concurrent` package. Does it make sense to you?
> Is sounds good, but I didn't understand very well your idea. What does it means implement
an adapter?

implementing the object adapter pattern for a façade; for a first
spike, I wouldn't re-implement ConcurrentGraph from scratch but rather
adapting an existing one (it could maybe useful to make Concurrent
graphs provided by vendors)


To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message