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 <marcospera...@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 <marcospera...@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 <marcospera...@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-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