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 |
Christophe Bouhier 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 |
Thomas Schindl 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 |
Christophe Bouhier 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 |
Thomas Schindl 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 |
Thomas Schindl 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));
>>
>
|
|
|
Goto Forum:
Current Time: Thu Sep 26 20:27:21 GMT 2024
Powered by FUDForum. Page generated in 0.04267 seconds
|