commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marco Speranza <marcospera...@apache.org>
Subject Re: [Graph] Test problems after last commit
Date Sat, 03 Mar 2012 00:40:16 GMT
Hi I fixed the problem using proxy/handler.

I put also a couple of tests. For do that I insert a test scoped dependency to a library net.sourceforge.groboutils.groboutils-core

Ciao

--
Marco Speranza <marcosperanza@apache.org>
Google Code: http://code.google.com/u/marco.speranza79/

Il giorno 03/mar/2012, alle ore 01:29, Simone Tripodi ha scritto:

> yes, what I didn't understand is how you would like to manage the
> iterators issue
> 
> sorry for the brevity but tonight I am getting crazy with at least 3
> other projects :D
> 
> -Simo
> 
> http://people.apache.org/~simonetripodi/
> http://simonetripodi.livejournal.com/
> http://twitter.com/simonetripodi
> http://www.99soft.org/
> 
> 
> 
> On Sat, Mar 3, 2012 at 1:16 AM, Marco Speranza <marcosperanza@apache.org> wrote:
>> I think that we have to use the same patter of java Collections: a wrapper of Graph/MutableGraph
that use a synchronize block.
>> 
>> WDYT?
>> 
>> --
>> Marco Speranza <marcosperanza@apache.org>
>> Google Code: http://code.google.com/u/marco.speranza79/
>> 
>> Il giorno 03/mar/2012, alle ore 01:10, Simone Tripodi ha scritto:
>> 
>>> OK now sounds better, thanks - how would you intend to fix it?
>>> TIA,
>>> -Simo
>>> 
>>> http://people.apache.org/~simonetripodi/
>>> http://simonetripodi.livejournal.com/
>>> http://twitter.com/simonetripodi
>>> http://www.99soft.org/
>>> 
>>> 
>>> 
>>> On Sat, Mar 3, 2012 at 1:01 AM, Marco Speranza <marcosperanza@apache.org>
wrote:
>>>>>> 
>>>>>> furthermore there is another problem: with handler is not possible
to use correctly synchronization block like this
>>>>>> 
>>>>>> ====
>>>>>> Graph g = CommonsGraph.synchronize(g_);
>>>>>>     ...
>>>>>>  synchronized(g) {
>>>>>>       for ( BaseLabeledVertex v2 : g.getVertices() )
>>>>>>       {
>>>>>>           // do somethings
>>>>>>       }
>>>>>>  }
>>>>>> ====
>>>>> 
>>>>> sorry I don't understand what you meant/intend to do
>>>> 
>>>> I'm trying to explain better. the method getVertices return an Iterator.
In a multi-thread environment you have to ensure that during the 'for' execution the [graph]
data structure remains  consistent.
>>>> Also for java collection is the same [http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#synchronizedCollection(java.util.Collection)]
>>>> 
>>>> So if we use a proxy/handler there is no way to "export" the mutex/lock variable
used into handler class.
>>>> 
>>>> In  our CommonsGraph the variable this.lock is private and is non possible
to export out of the method, so the user can not utilize the lock to synchronize his block.
>>>> 
>>>> ===
>>>>        public Object invoke( Object proxy, Method method, Object[] args )
>>>>            throws Throwable
>>>>        {
>>>>            if ( synchronizedMethods.contains( method ) )
>>>>            {
>>>>                try
>>>>                {
>>>>                    synchronized ( this.lock )
>>>>                    {
>>>>                        return method.invoke( synchronizedMethods, args );
>>>>                    }
>>>>                }
>>>>                catch ( InvocationTargetException e )
>>>>                {
>>>>                    throw e.getTargetException();
>>>>                }
>>>>            }
>>>>            return method.invoke( synchronizedMethods, args );
>>>>        }
>>>> ===
>>>> 
>>>> ciao
>>>> 
>>>> --
>>>> Marco Speranza <marcosperanza@apache.org>
>>>> Google Code: http://code.google.com/u/marco.speranza79/
>>>> 
>>>> Il giorno 03/mar/2012, alle ore 00:45, Simone Tripodi ha scritto:
>>>> 
>>>>>> furthermore there is another problem: with handler is not possible
to use correctly synchronization block like this
>>>>>> 
>>>>>> ====
>>>>>> Graph g = CommonsGraph.synchronize(g_);
>>>>>>     ...
>>>>>>  synchronized(g) {
>>>>>>       for ( BaseLabeledVertex v2 : g.getVertices() )
>>>>>>       {
>>>>>>           // do somethings
>>>>>>       }
>>>>>>  }
>>>>>> ====
>>>>> 
>>>>> sorry I don't understand what you meant/intend to do
>>>>> 
>>>>>> I really think that a synchronized wrapper it's the best solution.
>>>>>> 
>>>>>> WDYT?
>>>>> 
>>>>> they sucks because we have to keep them updated while , but if there
>>>>> are not alternatives...
>>>>> -Simo
>>>>> 
>>>>> http://people.apache.org/~simonetripodi/
>>>>> http://simonetripodi.livejournal.com/
>>>>> http://twitter.com/simonetripodi
>>>>> http://www.99soft.org/
>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>>>>> For additional commands, e-mail: dev-help@commons.apache.org
>>>>> 
>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>>>> For additional commands, e-mail: dev-help@commons.apache.org
>>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>>> For additional commands, e-mail: dev-help@commons.apache.org
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message