You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Mark Hindess (JIRA)" <ji...@apache.org> on 2009/06/18 12:03:07 UTC
[jira] Closed: (HARMONY-420) [classlib][beans]improper listener
notification in java.beans.VetoableChangeSupport
[ https://issues.apache.org/jira/browse/HARMONY-420?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mark Hindess closed HARMONY-420.
--------------------------------
Assignee: Mark Hindess (was: Paulex Yang)
The original test code works for me so I'm closing this one.
> [classlib][beans]improper listener notification in java.beans.VetoableChangeSupport
> -----------------------------------------------------------------------------------
>
> Key: HARMONY-420
> URL: https://issues.apache.org/jira/browse/HARMONY-420
> Project: Harmony
> Issue Type: Bug
> Components: Classlib
> Environment: Harmony Class Library, J9
> Reporter: Maxim Berkultsev
> Assignee: Mark Hindess
> Priority: Minor
> Attachments: diff
>
>
> VetoableChangeSupport functionality is not covered completely
> Following test code is under examination
> ----------------------------------------------
> import java.beans.*;
> public class VetoableChangeSupportTest {
>
> private VetoableChangeSupport support = new VetoableChangeSupport(this);
>
> private PropertyChangeEvent event;
>
> private String vetoedPropertyName = "property1";
>
> private Integer basicOldValue = new Integer(1);
> private Integer basicNewValue = new Integer(2);
>
> public static void main(String[] args) {
> new VetoableChangeSupportTest().run();
> }
> void run(){
> support.addVetoableChangeListener(new VetoableChangeListener() {
> public void vetoableChange(PropertyChangeEvent e) throws PropertyVetoException {
> event = e;
> String propertyName = e.getPropertyName();
>
> Integer oldValue = (Integer) e.getOldValue();
> Integer newValue = (Integer) e.getNewValue();
>
> System.out.println("in the first listener with property named = "
> + propertyName
> + " and old value = "
> + oldValue
> + " and new value = "
> + newValue
> );
>
>
> if(propertyName.equals(vetoedPropertyName) && newValue.equals(basicNewValue)) {
> System.out.println("in the first listener with property named = "
> + propertyName
> + " and old value = "
> + oldValue
> + " and new value = "
> + newValue
> + " exception is thrown"
> );
> throw new PropertyVetoException(propertyName + " change is vetoed.", e);
> }
> }
> });
>
> support.addVetoableChangeListener(new VetoableChangeListener() {
> public void vetoableChange(PropertyChangeEvent e) throws PropertyVetoException {
> event = e;
> String propertyName = e.getPropertyName();
>
> Integer oldValue = (Integer) e.getOldValue();
> Integer newValue = (Integer) e.getNewValue();
>
> System.out.println("in the second listener with property named = "
> + propertyName
> + " and old value = "
> + oldValue
> + " and new value = "
> + newValue
> );
>
> if(propertyName.equals(vetoedPropertyName) && newValue.equals(basicOldValue)) {
> System.out.println("in the second listener with property named = "
> + propertyName
> + " and old value = "
> + oldValue
> + " and new value = "
> + newValue
> + " exception is thrown"
> );
> throw new PropertyVetoException(propertyName + " change is vetoed.", e);
> }
> }
> });
>
> try {
> support.fireVetoableChange(vetoedPropertyName, basicNewValue, basicOldValue);
> } catch(PropertyVetoException pve) {
> System.out.println("PropertyVetoException is finally thrown.");
> }
> }
>
> }
> ----------------------------------------------
> For j9 + ClassLib the output of the test is
> in the first listener with property named = property1 and old value = 2 and new value = 1
> in the second listener with property named = property1 and old value = 2 and new value = 1
> in the second listener with property named = property1 and old value = 2 and new value = 1 exception is thrown
> in the first listener with property named = property1 and old value = 1 and new value = 2
> in the first listener with property named = property1 and old value = 1 and new value = 2 exception is thrown
> PropertyVetoException is finally thrown.
> For RI
> in the first listener with property named = property1 and old value = 2 and new value = 1
> in the second listener with property named = property1 and old value = 2 and new value = 1
> in the second listener with property named = property1 and old value = 2 and new value = 1 exception is thrown
> in the first listener with property named = property1 and old value = 1 and new value = 2
> in the first listener with property named = property1 and old value = 1 and new value = 2 exception is thrown
> in the second listener with property named = property1 and old value = 1 and new value = 2
> PropertyVetoException is finally thrown.
> Looks like the second listener is not notified after the PropertyVetoException is thrown for the second time
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.