Details
-
Type: Bug
-
Status: Closed (View Workflow)
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 1.6.1
-
Fix Version/s: 1.7
-
Component/s: o.c.jsword.passage
-
Labels:None
Description
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@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@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">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"> </span> </span><span class="w"><span class="text"> </span> </span><span class="w"><span class="text">Phrygia</span></span>, <span class="w"><span class="text"> </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"> </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