[CDO] Question about CDO notification and RevisionManage [message #430918] |
Wed, 17 June 2009 16:51 |
Eclipse User |
|
|
|
Originally posted by: adomas.greicius.nomagic.com
Hello,
I would like to ask same questions about RevisionManager. Is there any
documentation of RevisionManager?
While handling remove object notification, I do not get old object. If I
try to get Object from revisionManager using version from notification,
got null. . If I decrease version by one and then try to get revision it is
ok. Is it a bug?
public void notifyChanged(Notification msg) {
if (msg instanceof CDODeltaNotification) {
CDODeltaNotification cdoDeltaNotification = (CDODeltaNotification) msg;
int version = cdoDeltaNotification.getRevisionDelta().getOriginVersion();
CDORevision revision =
cTransaction.getSession().getRevisionManager().getRevisionBy Version(
locksContainer.cdoID(), 0, version - 1);
Object o = revision.data().get(XXXX.Literals.XXXX, msg.getPosition());
}
}
Same times I get exception IndexOutOfBoundsException, when I try to get
data from revision. Should I decrease position?
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
revision.data().get(XXXX.Literals.XXXX, msg.getPosition());
If I handle removed object notification in remote client, I do not get
oldObject (It is null). What is the best way to get OldObject?
|
|
|
Re: [CDO] Question about CDO notification and RevisionManage [message #430929 is a reply to message #430918] |
Thu, 18 June 2009 01:06 |
Simon Mc Duff Messages: 596 Registered: July 2009 |
Senior Member |
|
|
Hi Adomas,
Adomas Greicius wrote:
> Hello,
>
> I would like to ask same questions about RevisionManager. Is there any
> documentation of RevisionManager?
>
> While handling remove object notification, I do not get old object. If I
> try to get Object from revisionManager using version from notification,
> got null. . If I decrease version by one and then try to get revision it is
> ok. Is it a bug?
>
Don't know yet! :-)
> public void notifyChanged(Notification msg) {
>
>
> if (msg instanceof CDODeltaNotification) {
>
> CDODeltaNotification cdoDeltaNotification = (CDODeltaNotification) msg;
>
> int version = cdoDeltaNotification.getRevisionDelta().getOriginVersion();
>
> CDORevision revision =
> cTransaction.getSession().getRevisionManager().getRevisionBy Version(
> locksContainer.cdoID(), 0, version - 1);
>
Why you take locksCOntainer.cdoID ? Why not
cdoDeltaNotification.getRevisionDelta().getID() ? (Since I don't know
whichs objects it is... I'm not sure where locksCOntainer came from).
> Object o = revision.data().get(XXXX.Literals.XXXX, msg.getPosition());
Is it a one-to-many relationship ? or one to one ? (Not related to the
problem... just a question)
Why you don't use EStructuralFeature feature =
(EStructuralFeature)cdoDeltaNotification .getFeature();
Since you don't know which feature changed... how can you use the
msg.getPosition ?
Be careful when you play with position... you can use it in the old
revision only if it is not a ADD (Like in Standard EMF).
Ex:
object.getElements().size(); // size == 4
object.getElements().add(newObject); //
The notification received would be :
msg.getPosition() == 4
It will not make sense for ADD notification to go to the previous
version and do the following:
object.getElements().get(4); // INDEX OUT OF BOUND
But if you are saying it was a Remove... then you can do it. It really
depends of the kind of notification.. and you should add a test in your
adapter.
>
> }
>
> }
>
> Same times I get exception IndexOutOfBoundsException, when I try to get
> data from revision. Should I decrease position?
>
> java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
>
> revision.data().get(XXXX.Literals.XXXX, msg.getPosition());
>
> If I handle removed object notification in remote client, I do not get
> oldObject (It is null). What is the best way to get OldObject?
>
>
I did a small case
- I used .getOriginVersion() and notification.getFeature().
if (notification instanceof CDODeltaNotification)
{
CDODeltaNotification cdoDeltaNotification =
(CDODeltaNotification)notification;
int version =
cdoDeltaNotification.getRevisionDelta().getOriginVersion();
CDORevision revision =
tx2.getSession().getRevisionManager().getRevisionByVersion(
cdoDeltaNotification.getRevisionDelta().getID(), 0, version);
EStructuralFeature feature =
(EStructuralFeature)notification.getFeature();
Object o = revision.data().get(feature,
notification.getPosition());
System.out.println(o);
}
All worked very nicely.
By the way which Back-end are you using? (Mysql? MEM ? Others? )
Simon
>
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
Re: [CDO] Question about CDO notification and RevisionManage [message #430952 is a reply to message #430929] |
Fri, 19 June 2009 14:24 |
Eclipse User |
|
|
|
Originally posted by: adomas.greicius.nomagic.com
Thanks Simon for your example. It helped a lot.
We are using DBStore. Same times we use with MySQL and same time with Derby.
"Simon McDuff" <smcduff@hotmail.com> wrote in message
news:h1c3qq$iig$1@build.eclipse.org...
> Hi Adomas,
>
> Adomas Greicius wrote:
>> Hello,
>>
>> I would like to ask same questions about RevisionManager. Is there any
>> documentation of RevisionManager?
>>
>> While handling remove object notification, I do not get old object. If I
>> try to get Object from revisionManager using version from notification,
>> got null. . If I decrease version by one and then try to get revision it
>> is ok. Is it a bug?
>>
> Don't know yet! :-)
>
>> public void notifyChanged(Notification msg) {
>>
>>
>> if (msg instanceof CDODeltaNotification) {
>>
>> CDODeltaNotification cdoDeltaNotification = (CDODeltaNotification) msg;
>>
>> int version = cdoDeltaNotification.getRevisionDelta().getOriginVersion();
>>
>> CDORevision revision =
>> cTransaction.getSession().getRevisionManager().getRevisionBy Version(
>> locksContainer.cdoID(), 0, version - 1);
>>
> Why you take locksCOntainer.cdoID ? Why not
> cdoDeltaNotification.getRevisionDelta().getID() ? (Since I don't know
> whichs objects it is... I'm not sure where locksCOntainer came from).
>
>> Object o = revision.data().get(XXXX.Literals.XXXX, msg.getPosition());
> Is it a one-to-many relationship ? or one to one ? (Not related to the
> problem... just a question)
> Why you don't use EStructuralFeature feature =
> (EStructuralFeature)cdoDeltaNotification .getFeature();
> Since you don't know which feature changed... how can you use the
> msg.getPosition ?
>
> Be careful when you play with position... you can use it in the old
> revision only if it is not a ADD (Like in Standard EMF).
>
> Ex:
> object.getElements().size(); // size == 4
> object.getElements().add(newObject); //
>
> The notification received would be :
> msg.getPosition() == 4
> It will not make sense for ADD notification to go to the previous version
> and do the following:
> object.getElements().get(4); // INDEX OUT OF BOUND
>
> But if you are saying it was a Remove... then you can do it. It really
> depends of the kind of notification.. and you should add a test in your
> adapter.
>
>>
>> }
>>
>> }
>>
>> Same times I get exception IndexOutOfBoundsException, when I try to get
>> data from revision. Should I decrease position?
>>
>> java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
>>
>> revision.data().get(XXXX.Literals.XXXX, msg.getPosition());
>>
>> If I handle removed object notification in remote client, I do not get
>> oldObject (It is null). What is the best way to get OldObject?
>>
>>
> I did a small case
> - I used .getOriginVersion() and notification.getFeature().
>
>
> if (notification instanceof CDODeltaNotification)
> {
>
> CDODeltaNotification cdoDeltaNotification =
> (CDODeltaNotification)notification;
>
> int version =
> cdoDeltaNotification.getRevisionDelta().getOriginVersion();
>
> CDORevision revision =
> tx2.getSession().getRevisionManager().getRevisionByVersion(
> cdoDeltaNotification.getRevisionDelta().getID(), 0,
> version);
> EStructuralFeature feature =
> (EStructuralFeature)notification.getFeature();
> Object o = revision.data().get(feature,
> notification.getPosition());
> System.out.println(o);
> }
>
> All worked very nicely.
>
> By the way which Back-end are you using? (Mysql? MEM ? Others? )
>
>
> Simon
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
|
|
|
|
Powered by
FUDForum. Page generated in 0.04379 seconds