As Ralph has said shared access - Database.Shared.

----- Original Message -----
From: Mike Wannamaker <[EMAIL PROTECTED]>
Date: Thursday, April 28, 2005 5:49 am
Subject: Re: [castor-user] Transaction locks and muti threaded access

> What is the default access mode for both query and load?
> 
> Ralf Joachim wrote:
> 
> > Hi Mike,
> >
> > for queries:
> >
> > String oql = "select o from FooBar o";
> > Query query = db.getOQLQuery(oql);
> > QueryResults results = query.execute(Database.ReadOnly);
> >
> > to load an object by its identity:
> >
> > Integer id = new Integer(7);
> > Foo foo = (Foo) db.load(Foo.class, id, Database.ReadOnly);
> >
> > Ralf
> >
> >
> > Mike Wannamaker schrieb:
> >
> >> Ralf,  How do I do this?  Make a query read only that is?
> >>
> >> 6. Query or load your objects read only whenever possible. Even 
> if 
> >> castor creates a lock on them this does not prevent other 
> threads 
> >> from reading or writing them. Read only queries are also about 
> 7 
> >> times faster compared with default shared mode.
> >>
> >> --ekiM
> >>
> >> Ralf Joachim wrote:
> >>
> >>> Hi Vijay,
> >>>
> >>> I know that Gregory Block (another castor commiter) is using 
> castor 
> >>> in a high-volume application. Even if I would call my 
> appliaction a 
> >>> low-volume one, I also had to resolve some locking problems 
> that I 
> >>> could track down to negligences at backgroud threads of my 
> >>> application. There are also some performance bottlenecks we 
> are 
> >>> aware of and are working to solve them at our next refactoring 
> steps 
> >>> at castor. For some of them we have working patches or 
> workarounds 
> >>> available (will come to them later).
> >>>
> >>> I'll start with some general suggestions that you should have 
> a look 
> >>> at. Please don't feel upset if some are really primitive but 
> there 
> >>> may be users listening that are not aware of them.
> >>>
> >>>
> >>> 1. Switch to version 0.9.6 of castor as we have fixed some 
> bugs that 
> >>> may cause some of your problems.
> >>>
> >>> 2. Initialize your JDO or JDO2 (will be renamed to JDOManager 
> at 
> >>> next release) instance once and reuse it all over your 
> application. 
> >>> Don't reuse the Database instances.
> >>>
> >>> 3. Use a Datasource instead of a Driver configuration as they 
> enable 
> >>> connection pooling which gives you a great performance 
> improvement.>>>
> >>> 4. Always commit or rollback your transactions and close your 
> >>> Database instances properly also in fail situations as 
> suggested by 
> >>> Nick previously.
> >>>
> >>> 5. Keep your transactions as short as possible. If you have an 
> open 
> >>> transaction that holds a write lock on an object no other 
> >>> transaction can get a write lock on the same object which will 
> lead 
> >>> to a LockNotGrantedException.
> >>>
> >>> 6. Query or load your objects read only whenever possible. 
> Even if 
> >>> castor creates a lock on them this does not prevent other 
> threads 
> >>> from reading or writing them. Read only queries are also about 
> 7 
> >>> times faster compared with default shared mode.
> >>>
> >>> 7. If there is a possibility you should prefer db.load(Class, 
> >>> object) over db.execute(String). I suggest that as db.load() 
> first 
> >>> tries to load the requested object from cache and only 
> retrieves it 
> >>> from database when it is not availble there. When executing 
> queries 
> >>> with db.execute() the object will always be loaded from 
> database 
> >>> without looking at the cache. You may gain a improvement by a 
> factor 
> >>> of 10 and more when changing from db.execute() to db.load().
> >>>
> >>>
> >>> I hope above suggestions help you to resolve the problems you 
> have. 
> >>> If you still need more performance there are 2 areas of 
> improvement 
> >>> that are more difficult to resolve.
> >>>
> >>> a. If you have a look at 
> http://jira.codehaus.org/browse/CASTOR-1085 
> >>> where a patch to TransactionContext is attached that improves 
> >>> read/write performance with a factor of 3. Even if the patch 
> passes 
> >>> all tests of castor test framework it requires more testing 
> before 
> >>> we will integrate it in our next major release. As stated in 
> the 
> >>> comment Gregory will use the patch in his production 
> environment sooon.
> >>>
> >>> b. I will attache a test that shows how read only performance 
> can be 
> >>> improved to http://jira.codehaus.org/browse/CASTOR-732 this 
> evening.>>>
> >>> Hope I could help you with that information.
> >>>
> >>> Regards
> >>> Ralf
> >>>
> >>>
> >>>
> >>> Vijayanand Sukumar schrieb:
> >>>
> >>>> All,
> >>>>
> >>>> Nick, Thanks for your explanation.  We are using 0.9.5.3 .
> >>>> I will do a rollback on all the transactions when a 
> >>>> PersistenceException is
> >>>> thrown.
> >>>>
> >>>> I am really interested to know if anyone is using castor in a 
> high 
> >>>> volume ,
> >>>> mission critical application and the problems they faced if 
> any and 
> >>>> how
> >>>> solved it.
> >>>> Thanks
> >>>>
> >>>> Vijay
> >>>>
> >>>>
> >>>>
> >>>> -----Original Message-----
> >>>> From: Nick Stuart [EMAIL PROTECTED] Sent: Tuesday, April 
> >>>> 26, 2005 4:32 PM
> >>>> To: [email protected]
> >>>> Subject: Re: [castor-user] Transaction locks and muti 
> threaded access
> >>>>
> >>>> Will try my best to explain some of these issues in line.
> >>>> On 4/26/05, Vijayanand Sukumar <[EMAIL PROTECTED]> wrote:
> >>>>
> >>>>>
> >>>>> We have been using castor-struts for about 2 years now and 
> we are 
> >>>>> having some issues related to the castor. we are at a stage 
> where 
> >>>>> due to performance issues we are thinking of moving away 
> from castor.
> >>>>>  
> >>>>> Any explanations/solutions for the given problems will be 
> greatly 
> >>>>> appreciated.
> >>>>>  
> >>>>> 1. When more than 1 thread access the same object, is 
> multiple 
> >>>>> copies of the same object is created or is the same instance 
> of 
> >>>>> the object is used across multiple
> >>>>>    transactions.    If it the same object then wouldn't it 
> affect 
> >>>>> performance as in our case we have about a hundred users 
> using the 
> >>>>> same record.
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> Yes its the same object. But no you shouldn't see a 
> performance hit 
> >>>> because
> >>>> its serving it out of the Cache. In fact, if the object is 
> used 
> >>>> enough, and
> >>>> is always in the cache you would see a performance gain. This 
> >>>> assumes most
> >>>> of your actions are read only, as several threads acting on 
> the 
> >>>> same object
> >>>> and trying to do changes will cause problems.
> >>>>
> >>>>
> >>>>>  
> >>>>> 2. when a transaction fails , the locks on all the objects 
> related 
> >>>>> to that transaction are not released.
> >>>>>    we have had instances where a    LockNotGrantedException: 
> >>>>> WriteTimeOut    occurs on a JDO object and the lock on the 
> object 
> >>>>> is not released until the server is re-started.
> >>>>>    How can I release a lock on that object ?     This 
> problem 
> >>>>> kills all the mission critical applications where the 
> application 
> >>>>> cannot be restarted. Can this be overcome if an explicit 
> rollback 
> >>>>> is called ?
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> If you have a PersistenceExcpetion during a transaction 
> (between 
> >>>> db.begin
> >>>> and db.commit) you should always do a rollback. This will 
> release the
> >>>> objects and locks. If you dont do this my best guess as to 
> what 
> >>>> could happen
> >>>> to your data is as good as yours.
> >>>>
> >>>>
> >>>>
> >>>>> 3. when a commit fails and rollback is not explicitly called 
> are 
> >>>>> all locks on the objects in that transaction released ?
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> They should be yes. If they are not my guess is that its a 
> bug. You 
> >>>> never
> >>>> mentioned what version of castor you are using.
> >>>>
> >>>>
> >>>>>  
> >>>>> 4. A lock is obtained on an object even if it stated in the 
> >>>>> mapping as read-only. This slows down all the queries even 
> if they 
> >>>>> are read-only , how can I overcome this ?
> >>>>>  
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> Not sure about this one myself....never ran into any problems 
> with it.
> >>>>
> >>>>
> >>>>> Based on my experience so far, I have a feeling that castor 
> is not 
> >>>>> suited for high-volume, mission critical applications.
> >>>>>  
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> All my apps are well used, but not considered high volume so 
> my 
> >>>> experince in
> >>>> that area is limited. Although I'm pretty sure other people 
> on the 
> >>>> list will
> >>>> share their experinces about this.
> >>>>
> >>>>
> >>>>> Has anyone used castor in a high-volume, mission critical 
> >>>>> application and have success story?
> >>>>>  
> >>>>>  
> >>>>> ANY HELP WOULD BE GREATLY APPRECIATED.  Thanks
> >>>>>  
> >>>>> Vijay
> >>>>>
> >>>>
> >>>>
> >>>> Hope this helps some. Anyone else want to throw something 
> this way?
> >>>> -Nick
> >>>
> >>>
> >>>
> >>>
> >
> 
> 


Reply via email to