Hi,

I am also not happy with the way Repositories are opened, I think it
would be better to have a Factory class and a method to open a
repository with an URL. I hope this will be solved in the next JCR
API.

I also run into similar unpredictable cases where you have to re-try
because the resource is sometimes still in use, however this is not
repository related but 'delete a file':

   public static void delete(String fileName) throws Exception {
       File file = new File(fileName);
       if(file.exists()) {
           for(int i=0; i<16; i++) {
               boolean ok = file.delete();
               if(ok) {
                   return;
               }
               System.gc();
               try {
                   // sleep at most 256 ms
                   Thread.sleep(i * i);
               } catch (InterruptedException e) {
                   // ignore
               }
           }
           throw new Exception("Can't delete file");
       }
   }

Maybe you can re-use part of this code (you should not try to delete
the lock file, but try to open the repository in the loop).

Thomas



On 1/4/07, anton_slutsky <[EMAIL PROTECTED]> wrote:

I see your reasoning.  However, if you look at the unit test I pasted in the
earlier message, you'll see that the approach will not only prevent another
process from creating a new repository, but will also stop this very same
process from getting a new instance.  Please forgive me for being picky, but
if you let people do "new", you really should make sure it works.  Or dont
let people create new instances and make the thing a singleton.

My biggest issue is very simple.  For some reason, my unit tests keep
crashing. I fork the VM on every unit test and do a shutdown() in every
tearDown(), for some reason, the .lock file lingers on sometimes and breaks
the next test.  This happens every time I run my test suite, but never in
the same place.  I dont know what it is.  Maybe its Windows taking too long
to clean up.  But my application is untestable.  I can try running all tests
in the same VM, but then my test state will become unpredictable as I cache
things quite a bit.



Tobias Bocanegra wrote:
>
> hmmm...view me previous answer (it somehow got lost):
>
> hi anton,
> we received many errors that were caused by multiple instances running
> on the same repository data that's why the .lock file is there to
> prevent 2 jackrabbit instances accessing the same physical data.
> actually, it should not cause any trouble, even if the jvm is killed
> or the repository is not shut down correctly.
> the mechanism works as follows: if the .lock file is present, the
> repository tries to acquire a java.nio.lock, and if this succeeds,
> only a warning is issued. if not, another process has locked the file
> and the repository startup is aborted. if the jvm is killed, it
> releases also the lock of on the .lock file.
>
> so i'm wondering what exact problems you see?
> regards, toby
>
> On 1/4/07, anton_slutsky <[EMAIL PROTECTED]> wrote:
>>
>> Please look at the unit test below.  This is basic usability.  It's not
>> working.  Oddly enough, noone's even responding to the discussion.  If
>> there
>> are issues with multi-repository usage, then let's address the issues and
>> not hack a workaround.  If you guys don't have time to work on this one,
>> let's discuss the architecture of what needs to be done, and I'll be more
>> then happy to help you out as we are in a bit of a bind with this one.
>>
>>
>> import junit.framework.TestCase;
>>
>> import javax.jcr.*;
>> import org.apache.jackrabbit.core.*;
>>
>> /**
>>  * @author aslutsky
>>  */
>> public class TestJackrabbit extends TestCase{
>>
>>         public void testMultipleLogins()
>>         throws Exception
>>         {
>>                 Repository repo = new TransientRepository();
>>                 repo.login();
>>
>>                 repo = new TransientRepository();
>>
>>                 // this call will break.  It'll complain of a .lock file
>> locking the repository
>>                 // from another process.  As you can see, this is the
>> only
>> process that's using the repository
>>                 // since the above call succeeded.
>>                 repo.login();
>>
>>         }
>>
>> }
>>
>>
>>
>> anton_slutsky wrote:
>> >
>> > Hello,
>> >
>> > First of all, kudos on the great product.  We are using it and love it
>> > something awful.  Having said that, one little "feature" that's there
>> is
>> > extremely annoying.  When a repo is instantiated, it creates a .lock
>> file
>> > at root (which you probably know all too well).  I'm sure there is a
>> > reason for it to be there, and in prod it might even be a good idea to
>> > make certain only one process access a given repository, but in
>> > development, this .lock file causes a world of grief.  I'm using
>> > jackrabbit as a library for a web project running on jboss in dev and
>> > websphere in prod.  I constantly run into two major problems.  First,
>> > sometimes, I need to kill jboss, which negates any attempts at
>> finalize()
>> > logic I have implemented.  Second, when redeploying, jboss seems to
>> ignore
>> > finalize() altogether when hot redeploying.  Obviously, this is not
>> your
>> > issue, but it is a huge inconvenience for me and my team.
>> >
>> > I'm wondering if I were to submit a patch making this .lock logic
>> > configurable, how would it go with the team?  Or are there underlying
>> > architectural concerns that necessitate such an approach?
>> >
>> > Thanks!
>> > Anton
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Jackrabbit-repo-locking-tf2590610.html#a8160196
>> Sent from the Jackrabbit - Users mailing list archive at Nabble.com.
>>
>>
>
>
> --
> -----------------------------------------< [EMAIL PROTECTED] >---
> Tobias Bocanegra, Day Management AG, Barfuesserplatz 6, CH - 4001 Basel
> T +41 61 226 98 98, F +41 61 226 98 97
> -----------------------------------------------< http://www.day.com >---
>
>

--
View this message in context: 
http://www.nabble.com/Jackrabbit-repo-locking-tf2590610.html#a8160735
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.


Reply via email to