commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oliver Zeigermann <oliver.zeigerm...@gmail.com>
Subject Re: Transaction API, ReadWriteLock
Date Wed, 06 Jul 2005 14:13:15 GMT
You are right, but only for the lock manager. The lock manager takes
care of uniquely mapping a resource id to a lock, but when you work on
a lock *directly* it must - of course - be the same object.

Oliver

On 7/6/05, Aaron Hamid <arh14@cornell.edu> wrote:
> Is this true?  It was my impression, have first written such a class, and then finding
and skimming the javadoc for [ReadWrite]LockManager, and particularly 'getLock' and 'createLock',
that lock singletons would be automatically created and managed.  Otherwise the developer
must write a lot of boilerplate code for keeping a singleton map of locks.  Surely only the
'resourceId' must be the same, and not the actual ReadWriteLock reference?
> 
> LockManager: "Encapsulates creation, removal, and retrieval of locks. Each resource can
have at most a single lock."
> 
> Aaron
> 
> Oliver Zeigermann wrote:
> > Ooops, sorry, you are right. Not only the resource Id, but the lock
> > *itself* must be the same in both threads.
> >
> > Doing it this way:
> >
> >               final ReadWriteLock fileLock = new ReadWriteLock("Huhu", loggerFacade);
> >               Runnable run = new Runnable() {
> >
> >                       public void run() {
> >
> >                               try {
> >                                       System.out.println("before acquiring a lock
"
> >                                                       + Thread.currentThread());
> >                                       boolean result = fileLock.acquireWrite(Thread
> >                                                       .currentThread(), Long.MAX_VALUE);
> >                                       System.out.println("lock result: " + result
+ " "
> >                                                       + Thread.currentThread());
> >                                       Thread.sleep(20000);
> >                                       System.out.println("after sleeping "
> >                                                       + Thread.currentThread());
> >                               } catch (InterruptedException e) {
> >                                       e.printStackTrace(System.err);
> >
> >                               } finally {
> >                                       fileLock.release(Thread.currentThread());
> >                               }
> >                       }
> >
> >               };
> >
> >               Thread t1 = new Thread(run, "Thread1");
> >               Thread t2 = new Thread(run, "Thread2");
> >               t1.start();
> >               try {
> >                       Thread.sleep(1000);
> >               } catch (InterruptedException e) {
> >               }
> >               t2.start();
> >
> >
> > works fine for me.
> >
> > HTH
> >
> > Oliver
> >
> > On 7/6/05, LeRoy.Yanta@securian.com <LeRoy.Yanta@securian.com> wrote:
> >
> >>
> >>
> >>
> >>
> >>Oliver,
> >>
> >>I tried your suggestion by changing my ReadWriteLock statement to
> >>
> >>ReadWriteLock fileLock = new ReadWriteLock("c:/logRec.txt",loggerFacade);
> >>
> >>However, I received the same results as when I used new File(..).
> >>
> >>LeRoy
> >>
> >>
> >>
> >>
> >>
> >>
> >>             Oliver Zeigermann
> >>             <oliver.zeigerman
> >>             n@gmail.com>                                               To
> >>                                       Jakarta Commons Users List
> >>             07/06/2005 01:44          <commons-user@jakarta.apache.org>
> >>             AM                                                         cc
> >>
> >>                                                                   Subject
> >>             Please respond to         Re: Transaction API, ReadWriteLock
> >>             "Jakarta Commons
> >>                Users List"
> >>             <commons-user@jak
> >>             arta.apache.org>
> >>
> >>
> >>
> >>
> >>
> >>
> >>Most likely your problem ist that new File(..) creates different
> >>objects in each thread. I would try using something like the path to
> >>the file as String.
> >>
> >>Oliver
> >>
> >>On 7/5/05, LeRoy.Yanta@securian.com <LeRoy.Yanta@securian.com> wrote:
> >>
> >>>
> >>>
> >>>
> >>>I'm trying to use the ReadWriteLock class to acquire a write lock on a
> >>
> >>file
> >>
> >>>in a servlet.  When I generate multiple threads of the servlet using a
> >>
> >>WTE
> >>
> >>>5.1 server in the WSAD 5.1 IDE, I'm not able to get ReadWriteLock to
> >>
> >>block
> >>
> >>>other servlet threads after the first servlet thread obtains the lock.
> >>
> >>I'm
> >>
> >>>using two IE browser windows to generate the two servlet threads.  Below
> >>
> >>is
> >>
> >>>ReadWriteLock code I have in the servlet followed by the
> >>
> >>System.out.println
> >>
> >>>statements that are generated in the server log file during my test.
> >>>
> >>>ReadWriteLock fileLock = new ReadWriteLock(new File(c:/logRec.txt,
> >>>loggerFacade);
> >>>try {
> >>>      System.out.println("before acquiring a lock " +
> >>>Thread.currentThread());
> >>>      boolean result =
> >>>fileLock.acquireWrite(Thread.currentThread(),Long.MAX_VALUE);
> >>>      System.out.println("lock result: " + result + " " +
> >>>Thread.currentThread());
> >>>      Thread.sleep(20000);
> >>>      System.out.println("after sleeping " + Thread.currentThread());
> >>>      FileWriter recFile = new FileWriter(c:/logRec.txt, true);
> >>>      recFile.write("text from testFileTran");
> >>>      recFile.close();
> >>>} catch (InterruptedException e) {
> >>>      e.printStackTrace(System.err);
> >>>
> >>>} catch (IOException e) {
> >>>      e.printStackTrace(System.err);
> >>>
> >>>} finally {
> >>>      fileLock.release(Thread.currentThread());
> >>>}
> >>>
> >>>[7/5/05 8:26:03:326 CDT]  7c1477e SystemOut     O before acquiring a lock
> >>>Thread[Servlet.Engine.Transports : 0,5,main]
> >>>[7/5/05 8:26:03:326 CDT]  7c1477e SystemOut     O lock result: true
> >>>Thread[Servlet.Engine.Transports : 0,5,main]
> >>>[7/5/05 8:26:08:384 CDT] 24c3477d SystemOut     O before acquiring a lock
> >>>Thread[Servlet.Engine.Transports : 1,5,main]
> >>>[7/5/05 8:26:08:384 CDT] 24c3477d SystemOut     O lock result: true
> >>>Thread[Servlet.Engine.Transports : 1,5,main]
> >>>[7/5/05 8:26:23:335 CDT]  7c1477e SystemOut     O after sleeping
> >>>Thread[Servlet.Engine.Transports : 0,5,main]
> >>>[7/5/05 8:26:28:382 CDT] 24c3477d SystemOut     O after sleeping
> >>>Thread[Servlet.Engine.Transports : 1,5,main]
> >>>
> >>>
> >>>From reviewing the Transaction documentation and mailing list archives,
> >>
> >>I'm
> >>
> >>>not able to determine what I'm doing wrong.
> >>>
> >>>
> >>>---------------------------------------------------------------------
> >>>To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> >>>For additional commands, e-mail: commons-user-help@jakarta.apache.org
> >>>
> >>>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> >>For additional commands, e-mail: commons-user-help@jakarta.apache.org
> >>
> >>
> >>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> >>For additional commands, e-mail: commons-user-help@jakarta.apache.org
> >>
> >>
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: commons-user-help@jakarta.apache.org
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-user-help@jakarta.apache.org
> 
>

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


Mime
View raw message