openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "roger.keays" <roger.ke...@ninthavenue.com.au>
Subject Re: concurrent access to LRS
Date Wed, 13 Dec 2006 03:44:25 GMT

Hi Marc,


Marc Prud wrote:
> 
> Was a transaction committed or rolled back between the two requests?  
> Many databases and/or JDBC drivers do not allow a result set cursor  
> to span multiple transactions, which might be the cause of this error  
> (which, admittedly, we are not handling as gracefully as we could be).
> 

No, there is no SQL activity between the requests except for that produced
by the LRS. I suspected it could be a JDBC driver issue which is why I tried
MySQL also. I see pretty well the exact same behaviour on MySQL though.

It seems that the result list is closing because of an exception caused by
two threads both trying to use the database connection at the same time. The
first exception is usually a nonsensical one from the JDBC driver -
NullPointerException, stuff about BigDecimals (of which I use none), SQL
errors - "portal c_8 does not exist' (?).

The only constant I can find is that it works fine if I load the frames one
by one, so my best guess is it is a concurrency issue.

Thanks,

Roger


> On Dec 12, 2006, at 6:26 PM, roger.keays wrote:
> 
>>
>> Now that I have an em which lives for longer than one request (as  
>> per my
>> previous thread) I have noticed some concurrency issues accessing  
>> the large
>> result set. Since my app uses frames, there are occasions when two  
>> frames
>> will be refreshed at the same time. When this occurs, and the both  
>> try to
>> iterate the LRS I will frequently get either a NullPointerException or
>> NoSuchElementException (result list is closed). Loading the frames  
>> one by
>> one works fine.
>>
>> I've tried to the following with no avail:
>>     * Adding openjpa.Multithreaded=true
>>     * Synchronizing the LRS' getter method
>>     * Removing connection pooling (i.e. use openjpa's datasource)
>>     * Using mysql instead of postgresql
>>     * Disabling the query cache
>>     * Disabling the data cache
>>
>> As you can see, I'm a bit stuck. Any suggestions welcome.
>>
>> The NullPointerException stacktrace is:
>>
>> java.lang.NullPointerException
>>
>> org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.next 
>> (SelectResultObjectProvider.java:96)
>>
>> org.apache.openjpa.lib.rop.WindowResultList.getInternal 
>> (WindowResultList.java:126)
>>
>> org.apache.openjpa.lib.rop.AbstractNonSequentialResultList.get 
>> (AbstractNonSequentialResultList.java:69)
>>
>> org.apache.openjpa.kernel.DelegatingResultList.get 
>> (DelegatingResultList.java:241)
>>  javax.faces.model.ListDataModel.getRowData(ListDataModel.java:141)
>>  javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:175)
>>  javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java: 
>> 209)
>>  javax.faces.model.ListDataModel.<init>(ListDataModel.java:68)
>>
>> org.apache.myfaces.component.html.ext.HtmlDataTableHack.createDataMode 
>> l(HtmlDataTableHack.java:448)
>>
>> org.apache.myfaces.component.html.ext.HtmlDataTable.createDataModel 
>> (HtmlDataTable.java:847)
>>
>> org.apache.myfaces.component.html.ext.HtmlDataTableHack.getDataModel 
>> (HtmlDataTableHack.java:414)
>>
>> org.apache.myfaces.component.html.ext.HtmlDataTable.getDataModel 
>> (HtmlDataTable.java:839)
>>
>> org.apache.myfaces.component.html.ext.HtmlDataTableHack.getRowCount 
>> (HtmlDataTableHack.java:87)
>>
>> org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBas 
>> e.encodeInnerHtml(HtmlTableRendererBase.java:226)
>>
>> org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBas 
>> e.encodeChildren(HtmlTableRendererBase.java:134)
>>
>> org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer.encodeChildren 
>> (HtmlTableRenderer.java:187)
>>
>> javax.faces.component.UIComponentBase.encodeChildren 
>> (UIComponentBase.java:828)
>>  javax.faces.component.UIComponent.encodeAll(UIComponent.java:883)
>>  javax.faces.component.UIComponent.encodeAll(UIComponent.java:889)
>>  com.sun.facelets.FaceletViewHandler.renderView 
>> (FaceletViewHandler.java:578)
>>
>> and the NoSuchElementException:
>>
>> java.util.NoSuchElementException: The result list has been closed.
>>
>> org.apache.openjpa.lib.rop.AbstractResultList.assertOpen 
>> (AbstractResultList.java:91)
>>  org.apache.openjpa.lib.rop.WindowResultList.size 
>> (WindowResultList.java:81)
>>
>> org.apache.openjpa.kernel.DelegatingResultList.size 
>> (DelegatingResultList.java:133)
>>  javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:99)
>>  javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:174)
>>
>> org.apache.myfaces.component.html.ext.HtmlDataTableHack.setRowIndex 
>> (HtmlDataTableHack.java:243)
>>
>> org.apache.myfaces.component.html.ext.HtmlDataTable.setRowIndex 
>> (HtmlDataTable.java:263)
>>
>> org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBas 
>> e.encodeInnerHtml(HtmlTableRendererBase.java:257)
>>
>> org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBas 
>> e.encodeChildren(HtmlTableRendererBase.java:134)
>>
>> org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer.encodeChildren 
>> (HtmlTableRenderer.java:187)
>>
>> javax.faces.component.UIComponentBase.encodeChildren 
>> (UIComponentBase.java:828)
>>  javax.faces.component.UIComponent.encodeAll(UIComponent.java:883)
>>  javax.faces.component.UIComponent.encodeAll(UIComponent.java:889)
>>  com.sun.facelets.FaceletViewHandler.renderView 
>> (FaceletViewHandler.java:578)
>>
>> Cheers,
>>
>> Roger
>> -- 
>> View this message in context: http://www.nabble.com/concurrent- 
>> access-to-LRS-tf2811717.html#a7846241
>> Sent from the open-jpa-dev mailing list archive at Nabble.com.
>>
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/concurrent-access-to-LRS-tf2811717.html#a7846763
Sent from the open-jpa-dev mailing list archive at Nabble.com.


Mime
View raw message