[jsword-devel] [JIRA] Commented: (JS-109) Modules are not read in a thread safe way

Martin Denham (JIRA) jira at crosswire.org
Mon Nov 29 05:43:14 MST 2010


    [ http://www.crosswire.org/bugs/browse/JS-109?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13572#action_13572 ] 

Martin Denham commented on JS-109:
----------------------------------

Are there any highly concurrent systems using JSword e.g. web apps?  If so are they experiencing high error rates?

If no highly concurrent systems use JSword then would it would be good to synchronize the method now and restructure later.  Restructuring would take more time and adding synchronize would be a good fix for all the single user systems.

In And Bible the methods that eventually lead to calls to ZVerseBackend are all sychronised so synchronising ZVerseBackend would be more optimal, easy, and quick.



> Modules are not read in a thread safe way
> -----------------------------------------
>
>                 Key: JS-109
>                 URL: http://www.crosswire.org/bugs/browse/JS-109
>             Project: JSword
>          Issue Type: Bug
>          Components: o.c.jsword.passage
>    Affects Versions: 1.6.1
>            Reporter: Chris Burrell
>            Assignee: DM Smith
>
> I believe the problem is because ZVerseBackend is not thread-safe. Being a singleton, it starts sharing all its arrays declared as member variables. As a result, when two passages from the same "Book" (for e.g. KJV) are used, there is corruption, since the data read for Thread A might also be shared by Thread B! 
> A few solutions I can think of:
> - do they need to be singletons? I guess it makes sense, but what is the cost involved in them being singletons? Don't know the code base well enough yet.
> - do the member variables need to member variables, or can be make them local variables? Do they share state across methods?
> - If the option above doesn't work, then synchronising the method might be worth looking at, however, in a web environment, that would potentially cause serious bottlenecks, especially if there is a default version (and default passage) that is displayed when the user brings the page up.
> Any thoughts?
> Chris
> On 7 November 2010 00:04, Chris Burrell <chris at burrell.me.uk> wrote:
> On this last note, I believe we have concurrency issues. I have a two column page, displaying one passage each. On load of the page they load up a passage each, but then this once, the passage on the right (only verse 1) has gone to the left (which was requesting just one verse but from a different passage:
> left pane: requested Acts 2:10, got Romans 1:1
> right pane: corrupt XML in verse 1, verse 2 seems to be Romans 1:2-following
> Anyone else come across those issues?
> Chris
> On 6 November 2010 20:53, Chris Burrell <chris at burrell.me.uk> wrote:
> Another question too. It seems sometimes, both in bible desktop and my current application, the html rendered is broken?
> Any ideas why that might be?
> For example, I get:
> "<div class="passageText ui-widget"><div><h2 class="heading">Acts 2:10</h2><span class="verse"><span class="w"><sup class="verseNumber">10</sup></span><span class="w"><span class="text">emma="strong:G1909" morph="robinson:PREP" src="4"&gt;upon every soul of man that doeth evil, of the Jew first, and also of the Gentile;</span></span></span> </div></div>"
> The above in bold shows that it didn't get XSLTed properly.
> Instead of "<div class="passageText ui-widget"><div><h2 class="heading">Acts 2:10</h2><span class="verse"><sup class="verseNumber">10</sup><span class="w"><span class="text">&nbsp;</span> </span><span class="w"><span class="text">&nbsp;</span> </span><span class="w"><span class="text">Phrygia</span></span>, <span class="w"><span class="text">&nbsp;</span> </span><span class="w"><span class="text">and</span></span> <span class="w"><span class="text">Pamphylia</span></span>, <span class="w"><span class="text">in Egypt</span></span>, <span class="w"><span class="text">and</span></span> <span class="w"><span class="text">in the parts</span></span> <span class="w"><span class="text">of Libya</span></span> <span class="w"><span class="text">about</span></span> <span class="w"><span class="text">Cyrene</span></span>, <span class="w"><span class="text">and</span></span> <span class="w"><span class="text">strangers</span></span> <span class="w"><span class="text">of Rome</span></span>, <span class="w"><span class="text">Jews</span></span> <span class="w"><span class="text">&nbsp;</span> </span><span class="w"><span class="text">and</span></span> <span class="w"><span class="text">proselytes</span></span>,</span> </div></div>"
> So somehow it lost a whole load on the way out of the XSLT? The only difference is that the first one is on startup of the server, the second is with a refresh in the browser. Perhaps something hasn't loaded up correctly/entirely?
> Chris

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://www.crosswire.org/bugs/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       



More information about the jsword-devel mailing list