Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF » [CDO/Databinding] how to dispose observables, to avoid INVALID exception
[CDO/Databinding] how to dispose observables, to avoid INVALID exception [message #693589] Wed, 06 July 2011 19:20 Go to next message
Christophe Bouhier is currently offline Christophe BouhierFriend
Messages: 937
Registered: July 2009
Senior Member
Hi, with this bug in mind:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=303868

I run into something similar. My question is how to to correctly dispose
observables on lists, the code uses an ObservableMap on a list.

So when I dispose the Composite holding this binding, I first close the
CDOSession, and then dispose(), which leads to an INVALID object exception.

It seems the correct, way but Databinding holds on the object, which
becomes in valid. Is there a way to somehow remove the observable map?

setLabelProvider(null) ?

thanks Christophe
------------------

ObservableListContentProvider listContentProvider = new
ObservableListContentProvider();
tableViewer.setContentProvider(listContentProvider);

IObservableMap[] observeMaps = EMFObservables.observeMaps(
listContentProvider.getKnownElements(),
new EStructuralFeature[] {
SchedulingPackage.Literals.JOB__NAME,
SchedulingPackage.Literals.JOB__JOB_STATE,
SchedulingPackage.Literals.JOB__START_TIME,
SchedulingPackage.Literals.JOB__END_TIME,
SchedulingPackage.Literals.JOB__REPEAT,
SchedulingPackage.Literals.JOB__INTERVAL
});
tableViewer.setLabelProvider(new JobsObervableMapLabelProvider(
observeMaps));

IEMFListProperty jobsProperties = EMFProperties.resource();

tableViewer.setInput(jobsProperties.observe(jobsResource));
Re: [CDO/Databinding] how to dispose observables, to avoid INVALID exception [message #693598 is a reply to message #693589] Wed, 06 July 2011 20:27 Go to previous messageGo to next message
Thomas Schindl is currently offline Thomas SchindlFriend
Messages: 6651
Registered: July 2009
Senior Member
You should ALWAYS create observables using ObservableManager which
collects all created observables and disposes them when you tell the
manager to do so.

Tom
Am 06.07.11 21:20, schrieb Christophe Bouhier:
> Hi, with this bug in mind:
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=303868
>
> I run into something similar. My question is how to to correctly dispose
> observables on lists, the code uses an ObservableMap on a list.
>
> So when I dispose the Composite holding this binding, I first close the
> CDOSession, and then dispose(), which leads to an INVALID object exception.
>
> It seems the correct, way but Databinding holds on the object, which
> becomes in valid. Is there a way to somehow remove the observable map?
>
> setLabelProvider(null) ?
>
> thanks Christophe
> ------------------
>
> ObservableListContentProvider listContentProvider = new
> ObservableListContentProvider();
> tableViewer.setContentProvider(listContentProvider);
>
> IObservableMap[] observeMaps = EMFObservables.observeMaps(
> listContentProvider.getKnownElements(),
> new EStructuralFeature[] {
> SchedulingPackage.Literals.JOB__NAME,
> SchedulingPackage.Literals.JOB__JOB_STATE,
> SchedulingPackage.Literals.JOB__START_TIME,
> SchedulingPackage.Literals.JOB__END_TIME,
> SchedulingPackage.Literals.JOB__REPEAT,
> SchedulingPackage.Literals.JOB__INTERVAL
> });
> tableViewer.setLabelProvider(new JobsObervableMapLabelProvider(
> observeMaps));
>
> IEMFListProperty jobsProperties = EMFProperties.resource();
>
> tableViewer.setInput(jobsProperties.observe(jobsResource));
Re: [CDO/Databinding] how to dispose observables, to avoid INVALID exception [message #693768 is a reply to message #693598] Thu, 07 July 2011 07:06 Go to previous messageGo to next message
Christophe Bouhier is currently offline Christophe BouhierFriend
Messages: 937
Registered: July 2009
Senior Member
On 06-07-11 22:27, Tom Schindl wrote:
> You should ALWAYS create observables using ObservableManager which
> collects all created observables and disposes them when you tell the
> manager to do so.
>
Hi Tom, Thanks for this.

What I tried is indeed using an ObservableManager like this:

ObservablesManager obm = new ObservablesManager();

IObservableList jobsList = jobsProperties.observe(jobsResource);
obm.addObservable(jobsList);


And then I perform obm.dispose() in the Composite disposelistener().
I also confirm the obm.dispose() is called, and I actually debugged it
to see my IObservbleList gets disposed.

I however still get this problem. What do you mean exactly with
"create observables using ObservableManager". Is the ObservableManager a
factory for observables? It would great to see some snippet how to do
this properly for a list.

Thanks for your great help.
Christophe
p.s. The exception:


ava.lang.IllegalStateException: Not active: Transaction 8
at
org.eclipse.net4j.util.lifecycle.LifecycleUtil.checkActive(LifecycleUtil.java:72)
at
org.eclipse.net4j.util.lifecycle.Lifecycle.checkActive(Lifecycle.java:190)
at
org.eclipse.emf.internal.cdo.view.AbstractCDOView.getStore(AbstractCDOView.java:176)
at
org.eclipse.emf.internal.cdo.CDOObjectImpl.cdoStore(CDOObjectImpl.java:1022)
at
org.eclipse.emf.internal.cdo.CDOObjectImpl.eStore(CDOObjectImpl.java:570)
at
org.eclipse.emf.internal.cdo.CDOObjectImpl.dynamicGet(CDOObjectImpl.java:492)
at
org.eclipse.emf.ecore.impl.EStructuralFeatureImpl$InternalSettingDelegateSingleData.dynamicGet(EStructuralFeatureImpl.java:1986)
at
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1037)
at
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1021)
at
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1013)
at
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1008)
at
org.eclipse.emf.databinding.EObjectObservableMap.doGet(EObjectObservableMap.java:97)
at
org.eclipse.core.databinding.observable.map.ComputedObservableMap$1.handleSetChange(ComputedObservableMap.java:58)
at
org.eclipse.core.databinding.observable.set.SetChangeEvent.dispatch(SetChangeEvent.java:61)
at
org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
at
org.eclipse.core.databinding.observable.set.DecoratingObservableSet.fireSetChange(DecoratingObservableSet.java:59)
at
org.eclipse.core.databinding.observable.set.DecoratingObservableSet.handleSetChange(DecoratingObservableSet.java:97)
at
org.eclipse.core.databinding.observable.set.DecoratingObservableSet$1.handleSetChange(DecoratingObservableSet.java:71)
at
org.eclipse.core.databinding.observable.set.SetChangeEvent.dispatch(SetChangeEvent.java:61)
at
org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
at
org.eclipse.core.databinding.observable.set.ObservableSet.fireSetChange(ObservableSet.java:67)
at
org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableSet.access$1(DetailObservableSet.java:1)
at
org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableSet$1.handleSetChange(DetailObservableSet.java:46)
at
org.eclipse.core.databinding.observable.set.SetChangeEvent.dispatch(SetChangeEvent.java:61)
at
org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
at
org.eclipse.core.databinding.observable.set.ObservableSet.fireSetChange(ObservableSet.java:67)
at
org.eclipse.core.databinding.observable.set.WritableSet.clear(WritableSet.java:161)
at
org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableSet.clear(DetailObservableSet.java:190)
at
org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider.setInput(ObservableCollectionContentProvider.java:190)
at
org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider.inputChanged(ObservableCollectionContentProvider.java:156)
at
org.eclipse.jface.databinding.viewers.ObservableListContentProvider$Impl.inputChanged(ObservableListContentProvider.java:57)
at
org.eclipse.jface.databinding.viewers.ObservableListContentProvider.inputChanged(ObservableListContentProvider.java:170)
at
org.eclipse.jface.viewers.ContentViewer.handleDispose(ContentViewer.java:171)
at
org.eclipse.jface.viewers.StructuredViewer.handleDispose(StructuredViewer.java:2328)




> Tom
> Am 06.07.11 21:20, schrieb Christophe Bouhier:
>> Hi, with this bug in mind:
>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=303868
>>
>> I run into something similar. My question is how to to correctly dispose
>> observables on lists, the code uses an ObservableMap on a list.
>>
>> So when I dispose the Composite holding this binding, I first close the
>> CDOSession, and then dispose(), which leads to an INVALID object exception.
>>
>> It seems the correct, way but Databinding holds on the object, which
>> becomes in valid. Is there a way to somehow remove the observable map?
>>
>> setLabelProvider(null) ?
>>
>> thanks Christophe
>> ------------------
>>
>> ObservableListContentProvider listContentProvider = new
>> ObservableListContentProvider();
>> tableViewer.setContentProvider(listContentProvider);
>>
>> IObservableMap[] observeMaps = EMFObservables.observeMaps(
>> listContentProvider.getKnownElements(),
>> new EStructuralFeature[] {
>> SchedulingPackage.Literals.JOB__NAME,
>> SchedulingPackage.Literals.JOB__JOB_STATE,
>> SchedulingPackage.Literals.JOB__START_TIME,
>> SchedulingPackage.Literals.JOB__END_TIME,
>> SchedulingPackage.Literals.JOB__REPEAT,
>> SchedulingPackage.Literals.JOB__INTERVAL
>> });
>> tableViewer.setLabelProvider(new JobsObervableMapLabelProvider(
>> observeMaps));
>>
>> IEMFListProperty jobsProperties = EMFProperties.resource();
>>
>> tableViewer.setInput(jobsProperties.observe(jobsResource));
>
Re: [CDO/Databinding] how to dispose observables, to avoid INVALID exception [message #693782 is a reply to message #693768] Thu, 07 July 2011 07:48 Go to previous message
Thomas Schindl is currently offline Thomas SchindlFriend
Messages: 6651
Registered: July 2009
Senior Member
Hi,

First of all you should use ObservableManager using runAndCollect() this
frees you from add observables manually [1] ;-)

Looking at the stack even ObservableManager won't really help you
because the real problem is that the viewer who is trying to update
itself on dispose.

So I think a solution would be that you dispose your Session AFTER the
viewer has been disposed. A simple solution would be that you schedule
do it in an Display#asynExec() or do the clean up in a DisposeListener
which gets attached to the control after the viewer has been created.

Tom

[1]http://tomsondev.bestsolution.at/2009/06/08/galileo-emf-databinding-%E2%80%93-part-3/

Am 07.07.11 09:06, schrieb Christophe Bouhier:
> On 06-07-11 22:27, Tom Schindl wrote:
>> You should ALWAYS create observables using ObservableManager which
>> collects all created observables and disposes them when you tell the
>> manager to do so.
>>
> Hi Tom, Thanks for this.
>
> What I tried is indeed using an ObservableManager like this:
>
> ObservablesManager obm = new ObservablesManager();
>
> IObservableList jobsList = jobsProperties.observe(jobsResource);
> obm.addObservable(jobsList);
>
>
> And then I perform obm.dispose() in the Composite disposelistener().
> I also confirm the obm.dispose() is called, and I actually debugged it
> to see my IObservbleList gets disposed.
>
> I however still get this problem. What do you mean exactly with
> "create observables using ObservableManager". Is the ObservableManager a
> factory for observables? It would great to see some snippet how to do
> this properly for a list.
>
> Thanks for your great help.
> Christophe
> p.s. The exception:
>
>
> ava.lang.IllegalStateException: Not active: Transaction 8
> at
> org.eclipse.net4j.util.lifecycle.LifecycleUtil.checkActive(LifecycleUtil.java:72)
>
> at
> org.eclipse.net4j.util.lifecycle.Lifecycle.checkActive(Lifecycle.java:190)
> at
> org.eclipse.emf.internal.cdo.view.AbstractCDOView.getStore(AbstractCDOView.java:176)
>
> at
> org.eclipse.emf.internal.cdo.CDOObjectImpl.cdoStore(CDOObjectImpl.java:1022)
>
> at
> org.eclipse.emf.internal.cdo.CDOObjectImpl.eStore(CDOObjectImpl.java:570)
> at
> org.eclipse.emf.internal.cdo.CDOObjectImpl.dynamicGet(CDOObjectImpl.java:492)
>
> at
> org.eclipse.emf.ecore.impl.EStructuralFeatureImpl$InternalSettingDelegateSingleData.dynamicGet(EStructuralFeatureImpl.java:1986)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1037)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1021)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1013)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1008)
>
> at
> org.eclipse.emf.databinding.EObjectObservableMap.doGet(EObjectObservableMap.java:97)
>
> at
> org.eclipse.core.databinding.observable.map.ComputedObservableMap$1.handleSetChange(ComputedObservableMap.java:58)
>
> at
> org.eclipse.core.databinding.observable.set.SetChangeEvent.dispatch(SetChangeEvent.java:61)
>
> at
> org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
>
> at
> org.eclipse.core.databinding.observable.set.DecoratingObservableSet.fireSetChange(DecoratingObservableSet.java:59)
>
> at
> org.eclipse.core.databinding.observable.set.DecoratingObservableSet.handleSetChange(DecoratingObservableSet.java:97)
>
> at
> org.eclipse.core.databinding.observable.set.DecoratingObservableSet$1.handleSetChange(DecoratingObservableSet.java:71)
>
> at
> org.eclipse.core.databinding.observable.set.SetChangeEvent.dispatch(SetChangeEvent.java:61)
>
> at
> org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
>
> at
> org.eclipse.core.databinding.observable.set.ObservableSet.fireSetChange(ObservableSet.java:67)
>
> at
> org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableSet.access$1(DetailObservableSet.java:1)
>
> at
> org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableSet$1.handleSetChange(DetailObservableSet.java:46)
>
> at
> org.eclipse.core.databinding.observable.set.SetChangeEvent.dispatch(SetChangeEvent.java:61)
>
> at
> org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
>
> at
> org.eclipse.core.databinding.observable.set.ObservableSet.fireSetChange(ObservableSet.java:67)
>
> at
> org.eclipse.core.databinding.observable.set.WritableSet.clear(WritableSet.java:161)
>
> at
> org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableSet.clear(DetailObservableSet.java:190)
>
> at
> org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider.setInput(ObservableCollectionContentProvider.java:190)
>
> at
> org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider.inputChanged(ObservableCollectionContentProvider.java:156)
>
> at
> org.eclipse.jface.databinding.viewers.ObservableListContentProvider$Impl.inputChanged(ObservableListContentProvider.java:57)
>
> at
> org.eclipse.jface.databinding.viewers.ObservableListContentProvider.inputChanged(ObservableListContentProvider.java:170)
>
> at
> org.eclipse.jface.viewers.ContentViewer.handleDispose(ContentViewer.java:171)
>
> at
> org.eclipse.jface.viewers.StructuredViewer.handleDispose(StructuredViewer.java:2328)
>
>
>
>
>
>> Tom
>> Am 06.07.11 21:20, schrieb Christophe Bouhier:
>>> Hi, with this bug in mind:
>>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=303868
>>>
>>> I run into something similar. My question is how to to correctly dispose
>>> observables on lists, the code uses an ObservableMap on a list.
>>>
>>> So when I dispose the Composite holding this binding, I first close the
>>> CDOSession, and then dispose(), which leads to an INVALID object
>>> exception.
>>>
>>> It seems the correct, way but Databinding holds on the object, which
>>> becomes in valid. Is there a way to somehow remove the observable map?
>>>
>>> setLabelProvider(null) ?
>>>
>>> thanks Christophe
>>> ------------------
>>>
>>> ObservableListContentProvider listContentProvider = new
>>> ObservableListContentProvider();
>>> tableViewer.setContentProvider(listContentProvider);
>>>
>>> IObservableMap[] observeMaps = EMFObservables.observeMaps(
>>> listContentProvider.getKnownElements(),
>>> new EStructuralFeature[] {
>>> SchedulingPackage.Literals.JOB__NAME,
>>> SchedulingPackage.Literals.JOB__JOB_STATE,
>>> SchedulingPackage.Literals.JOB__START_TIME,
>>> SchedulingPackage.Literals.JOB__END_TIME,
>>> SchedulingPackage.Literals.JOB__REPEAT,
>>> SchedulingPackage.Literals.JOB__INTERVAL
>>> });
>>> tableViewer.setLabelProvider(new JobsObervableMapLabelProvider(
>>> observeMaps));
>>>
>>> IEMFListProperty jobsProperties = EMFProperties.resource();
>>>
>>> tableViewer.setInput(jobsProperties.observe(jobsResource));
>>
>
Re: [CDO/Databinding] how to dispose observables, to avoid INVALID exception [message #693783 is a reply to message #693768] Thu, 07 July 2011 07:48 Go to previous message
Thomas Schindl is currently offline Thomas SchindlFriend
Messages: 6651
Registered: July 2009
Senior Member
Hi,

First of all you should use ObservableManager using runAndCollect() this
frees you from add observables manually [1] ;-)

Looking at the stack even ObservableManager won't really help you
because the real problem is that the viewer who is trying to update
itself on dispose.

So I think a solution would be that you dispose your Session AFTER the
viewer has been disposed. A simple solution would be that you schedule
do it in an Display#asynExec() or do the clean up in a DisposeListener
which gets attached to the control after the viewer has been created.

Tom

[1]http://tomsondev.bestsolution.at/2009/06/08/galileo-emf-databinding-%E2%80%93-part-3/

Am 07.07.11 09:06, schrieb Christophe Bouhier:
> On 06-07-11 22:27, Tom Schindl wrote:
>> You should ALWAYS create observables using ObservableManager which
>> collects all created observables and disposes them when you tell the
>> manager to do so.
>>
> Hi Tom, Thanks for this.
>
> What I tried is indeed using an ObservableManager like this:
>
> ObservablesManager obm = new ObservablesManager();
>
> IObservableList jobsList = jobsProperties.observe(jobsResource);
> obm.addObservable(jobsList);
>
>
> And then I perform obm.dispose() in the Composite disposelistener().
> I also confirm the obm.dispose() is called, and I actually debugged it
> to see my IObservbleList gets disposed.
>
> I however still get this problem. What do you mean exactly with
> "create observables using ObservableManager". Is the ObservableManager a
> factory for observables? It would great to see some snippet how to do
> this properly for a list.
>
> Thanks for your great help.
> Christophe
> p.s. The exception:
>
>
> ava.lang.IllegalStateException: Not active: Transaction 8
> at
> org.eclipse.net4j.util.lifecycle.LifecycleUtil.checkActive(LifecycleUtil.java:72)
>
> at
> org.eclipse.net4j.util.lifecycle.Lifecycle.checkActive(Lifecycle.java:190)
> at
> org.eclipse.emf.internal.cdo.view.AbstractCDOView.getStore(AbstractCDOView.java:176)
>
> at
> org.eclipse.emf.internal.cdo.CDOObjectImpl.cdoStore(CDOObjectImpl.java:1022)
>
> at
> org.eclipse.emf.internal.cdo.CDOObjectImpl.eStore(CDOObjectImpl.java:570)
> at
> org.eclipse.emf.internal.cdo.CDOObjectImpl.dynamicGet(CDOObjectImpl.java:492)
>
> at
> org.eclipse.emf.ecore.impl.EStructuralFeatureImpl$InternalSettingDelegateSingleData.dynamicGet(EStructuralFeatureImpl.java:1986)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1037)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1021)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1013)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1008)
>
> at
> org.eclipse.emf.databinding.EObjectObservableMap.doGet(EObjectObservableMap.java:97)
>
> at
> org.eclipse.core.databinding.observable.map.ComputedObservableMap$1.handleSetChange(ComputedObservableMap.java:58)
>
> at
> org.eclipse.core.databinding.observable.set.SetChangeEvent.dispatch(SetChangeEvent.java:61)
>
> at
> org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
>
> at
> org.eclipse.core.databinding.observable.set.DecoratingObservableSet.fireSetChange(DecoratingObservableSet.java:59)
>
> at
> org.eclipse.core.databinding.observable.set.DecoratingObservableSet.handleSetChange(DecoratingObservableSet.java:97)
>
> at
> org.eclipse.core.databinding.observable.set.DecoratingObservableSet$1.handleSetChange(DecoratingObservableSet.java:71)
>
> at
> org.eclipse.core.databinding.observable.set.SetChangeEvent.dispatch(SetChangeEvent.java:61)
>
> at
> org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
>
> at
> org.eclipse.core.databinding.observable.set.ObservableSet.fireSetChange(ObservableSet.java:67)
>
> at
> org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableSet.access$1(DetailObservableSet.java:1)
>
> at
> org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableSet$1.handleSetChange(DetailObservableSet.java:46)
>
> at
> org.eclipse.core.databinding.observable.set.SetChangeEvent.dispatch(SetChangeEvent.java:61)
>
> at
> org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
>
> at
> org.eclipse.core.databinding.observable.set.ObservableSet.fireSetChange(ObservableSet.java:67)
>
> at
> org.eclipse.core.databinding.observable.set.WritableSet.clear(WritableSet.java:161)
>
> at
> org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableSet.clear(DetailObservableSet.java:190)
>
> at
> org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider.setInput(ObservableCollectionContentProvider.java:190)
>
> at
> org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider.inputChanged(ObservableCollectionContentProvider.java:156)
>
> at
> org.eclipse.jface.databinding.viewers.ObservableListContentProvider$Impl.inputChanged(ObservableListContentProvider.java:57)
>
> at
> org.eclipse.jface.databinding.viewers.ObservableListContentProvider.inputChanged(ObservableListContentProvider.java:170)
>
> at
> org.eclipse.jface.viewers.ContentViewer.handleDispose(ContentViewer.java:171)
>
> at
> org.eclipse.jface.viewers.StructuredViewer.handleDispose(StructuredViewer.java:2328)
>
>
>
>
>
>> Tom
>> Am 06.07.11 21:20, schrieb Christophe Bouhier:
>>> Hi, with this bug in mind:
>>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=303868
>>>
>>> I run into something similar. My question is how to to correctly dispose
>>> observables on lists, the code uses an ObservableMap on a list.
>>>
>>> So when I dispose the Composite holding this binding, I first close the
>>> CDOSession, and then dispose(), which leads to an INVALID object
>>> exception.
>>>
>>> It seems the correct, way but Databinding holds on the object, which
>>> becomes in valid. Is there a way to somehow remove the observable map?
>>>
>>> setLabelProvider(null) ?
>>>
>>> thanks Christophe
>>> ------------------
>>>
>>> ObservableListContentProvider listContentProvider = new
>>> ObservableListContentProvider();
>>> tableViewer.setContentProvider(listContentProvider);
>>>
>>> IObservableMap[] observeMaps = EMFObservables.observeMaps(
>>> listContentProvider.getKnownElements(),
>>> new EStructuralFeature[] {
>>> SchedulingPackage.Literals.JOB__NAME,
>>> SchedulingPackage.Literals.JOB__JOB_STATE,
>>> SchedulingPackage.Literals.JOB__START_TIME,
>>> SchedulingPackage.Literals.JOB__END_TIME,
>>> SchedulingPackage.Literals.JOB__REPEAT,
>>> SchedulingPackage.Literals.JOB__INTERVAL
>>> });
>>> tableViewer.setLabelProvider(new JobsObervableMapLabelProvider(
>>> observeMaps));
>>>
>>> IEMFListProperty jobsProperties = EMFProperties.resource();
>>>
>>> tableViewer.setInput(jobsProperties.observe(jobsResource));
>>
>
Previous Topic:Genmodel Operation Reflection Operation IDs
Next Topic:[CDO] DBException with a long URI in legacy mode
Goto Forum:
  


Current Time: Thu Sep 26 20:27:21 GMT 2024

Powered by FUDForum. Page generated in 0.04267 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top