Quantcast

Bug in XObjects, or am I using them incorrectly?

classic Classic list List threaded Threaded
2 messages Options
ktc
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Bug in XObjects, or am I using them incorrectly?

ktc
I'm running into what appears to be a bug in how XObjects are removed and added, and wanted to ask if I am perhaps using them incorrectly.

Basically I am performing the following sequence of steps:

1. Insert some XObjects to an XWikiDocument using document.newXObject(). Save the document and reload.
2. Delete one of the XObjects in the middle of the list of XObjects, using document.removeXObject(). Save the document and reload.
3. Add another XObject using document.newXObject(). Save.

Here is that the document's xObjects data looks like after each step (simplified for demonstration purposes):

AFTER STEP 1:
index=0 object="<?xml...>...<number>0</number>...</xml>"
index=1 object="<?xml...>...<number>1</number>...</xml>"
index=2 object="<?xml...>...<number>2</number>...</xml>"

AFTER STEP 2 (assume I delete the xObject with index=1):
index=0 object="<?xml...>...<number>0</number>...</xml>"
index=1 object=null
index=2 object="<?xml...>...<number>2</number>...</xml>"

AFTER STEP 3:
index=0 object="<?xml...>...<number>0</number>...</xml>"
index=1 object=null
index=2 object="<?xml...>...<number>2</number>...</xml>"
index=3 object="<?xml...>...<number>2</number>...</xml>"


As you can see there are two related problems here:

1. A null object is being preserved in the list of XObjects, even after being rehydrated from Hibernate following a server restart.
2. The index=3 object has been given a 'number' of '2' -- but that number is already in use by index=2 object.

Because of this, saving the document actually fails: I am receiving a NonUniqueObjectException as follows:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.xpn.xwiki.objects.BaseObject#-1957000305211198111]

Looking in the XWiki code it looks like this is essentially happening because the value of 'number' is computed as 'list size - 1'. So that 'null' that gets preserved in the list seems to be throwing off the logic.

Am I using newXObject()/removeXObject() improperly?

Please advise.

Thanks!
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Bug in XObjects, or am I using them incorrectly?

Thomas Mortagne
Administrator
On Fri, Apr 14, 2017 at 12:01 AM, ktc <[hidden email]> wrote:

> I'm running into what appears to be a bug in how XObjects are removed and
> added, and wanted to ask if I am perhaps using them incorrectly.
>
> Basically I am performing the following sequence of steps:
>
> 1. Insert some XObjects to an XWikiDocument using document.newXObject().
> Save the document and reload.
> 2. Delete one of the XObjects in the middle of the list of XObjects, using
> document.removeXObject(). Save the document and reload.
> 3. Add another XObject using document.newXObject(). Save.
>
> Here is that the document's xObjects data looks like after each step
> (simplified for demonstration purposes):
>
> AFTER STEP 1:
> index=0 object="<?xml...>...<number>0</number>...</xml>"
> index=1 object="<?xml...>...<number>1</number>...</xml>"
> index=2 object="<?xml...>...<number>2</number>...</xml>"
>
> AFTER STEP 2 (assume I delete the xObject with index=1):
> index=0 object="<?xml...>...<number>0</number>...</xml>"
> index=1 object=null
> index=2 object="<?xml...>...<number>2</number>...</xml>"
>
> AFTER STEP 3:
> index=0 object="<?xml...>...<number>0</number>...</xml>"
> index=1 object=null
> index=2 object="<?xml...>...<number>2</number>...</xml>"
> index=3 object="<?xml...>...<number>2</number>...</xml>"
>
>
> As you can see there are two related problems here:
>
> 1. A null object is being preserved in the list of XObjects, even after
> being rehydrated from Hibernate following a server restart.

This is done on purpose so that xobjects keep the same index in the list.

> 2. The index=3 object has been given a 'number' of '2' -- but that number is
> already in use by index=2 object.

This is not expected. Since as you said the assigned number is based
on list size - 1 it should be 3.

Would be great if you could create an issue on http://jira.xwiki.org
for it with the steps to reproduce it.

>
> Because of this, saving the document actually fails: I am receiving a
> NonUniqueObjectException as follows:
>
> org.hibernate.NonUniqueObjectException: a different object with the same
> identifier value was already associated with the session:
> [com.xpn.xwiki.objects.BaseObject#-1957000305211198111]
>
> Looking in the XWiki code it looks like this is essentially happening
> because the value of 'number' is computed as 'list size - 1'. So that 'null'
> that gets preserved in the list seems to be throwing off the logic.
>
> Am I using newXObject()/removeXObject() improperly?
>
> Please advise.
>
> Thanks!
>
>
>
>
> --
> View this message in context: http://xwiki.475771.n2.nabble.com/Bug-in-XObjects-or-am-I-using-them-incorrectly-tp7603477.html
> Sent from the XWiki- Dev mailing list archive at Nabble.com.



--
Thomas Mortagne
Loading...