openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marc Prud'hommeaux <mprud...@apache.org>
Subject Re: concurrent access to LRS
Date Wed, 13 Dec 2006 07:19:27 GMT
Roger-

JDBC drivers are supposed to be thread-safe, but I wouldn't be  
surprised of some of them had problems.

What happens if you synchronized on the result collection when  
iterating through them?



On Dec 12, 2006, at 7:44 PM, roger.keays wrote:

>
> 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.createDataMo 
>>> de
>>> 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.HtmlTableRendererB 
>>> as
>>> e.encodeInnerHtml(HtmlTableRendererBase.java:226)
>>>
>>> org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererB 
>>> as
>>> e.encodeChildren(HtmlTableRendererBase.java:134)
>>>
>>> org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer.encodeChildr 
>>> en
>>> (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.HtmlTableRendererB 
>>> as
>>> e.encodeInnerHtml(HtmlTableRendererBase.java:257)
>>>
>>> org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererB 
>>> as
>>> e.encodeChildren(HtmlTableRendererBase.java:134)
>>>
>>> org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer.encodeChildr 
>>> en
>>> (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