Preferences :PreferenceChangeListener behaviour differnet on solaris/windows
Test Program passes on solairs and fails on windows.
If Thread.sleep(1000) line is uncommented in the test program then
test program passes on solaris and windows.
-----------------------------Test.java-------------------------
import java.util.prefs.*;
import java.util.*;
public class Test{
public static void main(String[] args) throws Exception {
try {
Preferences userRoot = Preferences.userRoot();
System.out.println("Thread.activeCount() = " + Thread.activeCount());
Preferences prefChangeListenerUserRootTest = userRoot.node("prefChangeListenerUserRootTest");
prefChangeListenerUserRootTest.clear();
PreferenceChangeListenerTestClass prefChangeListener = new PreferenceChangeListenerTestClass();
prefChangeListenerUserRootTest.addPreferenceChangeListener(prefChangeListener);
Preferences preferencesGot = null;
prefChangeListenerUserRootTest.put("k1","v1");
//Thread.sleep(1000);
int preferenceTotalCount = prefChangeListener.getTotalPreferenceCount();
System.out.println("preferenceTotalCount expected 1= "+preferenceTotalCount);
if (preferenceTotalCount != 1) {
System.out.println(" preferenceTotalCount = " + preferenceTotalCount);
throw new Exception("preferenceTotalCount != 1 not ok in PreferenceChangeListenerTestTest01()");
}
System.out.println("PreferenceChangeListenerTestTest01() Pass");
} catch(BackingStoreException bse) {
System.out.println("BackingStoreException thrown = " + bse);
System.out.println("PreferenceChangeListenerTestTest01() Fail");
bse.printStackTrace();
} catch (Exception e) {
System.out.println("Exception thrown = " + e);
System.out.println("PreferenceChangeListenerTestTest01() Fail");
e.printStackTrace();
}
}
}
class PreferenceChangeListenerTestClass implements PreferenceChangeListener {
private int totalPreferenceCount = 0;
String keyGot = null;
String valueGot = null;
Preferences preferenceGot = null;
public void preferenceChange(PreferenceChangeEvent evt) {
totalPreferenceCount++;
keyGot = evt.getKey();
valueGot = evt.getNewValue();
preferenceGot = evt.getNode();
System.out.println("from PreferenceChangeListener: totalPreferenceCount= "+totalPreferenceCount);
}
public int getTotalPreferenceCount() {
return totalPreferenceCount;
}
public String getKey(){
return keyGot;
}
public String getValue(){
return valueGot;
}
public Preferences getPreference() {
return preferenceGot;
}
}
----------------------------------Test result on windows---------------
H:\merlin\bugs\prefs\PreferenceChangeListenerTest>java -version
java version "1.4.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta-b48)
Java HotSpot(TM) Client VM (build B48, mixed mode)
H:\merlin\bugs\prefs\PreferenceChangeListenerTest>java Test
Thread.activeCount() = 2
preferenceTotalCount expected 1= 0
preferenceTotalCount = 0
Exception thrown = java.lang.Exception: preferenceTotalCount != 1 not ok in PreferenceChangeListenerTestTest01()
PreferenceChangeListenerTestTest01() Fail
java.lang.Exception: preferenceTotalCount != 1 not ok in PreferenceChangeListenerTestTest01()
at Test.main(Test.java:27)
from PreferenceChangeListener: totalPreferenceCount= 1
--------------------------------test result on solaris-----------------
javapro:/home/pande/merlin/bugs/prefs/PreferenceChangeListenerTest 17 % java -version
java version "1.4.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta-b48)
Java HotSpot(TM) Client VM (build 1.4beta-B48, mixed mode)
javapro:/home/pande/merlin/bugs/prefs/PreferenceChangeListenerTest 18 % java Test
Thread.activeCount() = 3
from PreferenceChangeListener: totalPreferenceCount= 1
preferenceTotalCount expected 1= 1
PreferenceChangeListenerTestTest01() Pass
Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock.
javapro:/home/pande/merlin/bugs/prefs/PreferenceChangeListenerTest 19 %
----------
Test Program passes on solairs and fails on windows.
If Thread.sleep(1000) line is uncommented in the test program then
test program passes on solaris and windows.
-----------------------------Test.java-------------------------
import java.util.prefs.*;
import java.util.*;
public class Test{
public static void main(String[] args) throws Exception {
try {
Preferences userRoot = Preferences.userRoot();
System.out.println("Thread.activeCount() = " + Thread.activeCount());
Preferences prefChangeListenerUserRootTest = userRoot.node("prefChangeListenerUserRootTest");
prefChangeListenerUserRootTest.clear();
PreferenceChangeListenerTestClass prefChangeListener = new PreferenceChangeListenerTestClass();
prefChangeListenerUserRootTest.addPreferenceChangeListener(prefChangeListener);
Preferences preferencesGot = null;
prefChangeListenerUserRootTest.put("k1","v1");
//Thread.sleep(1000);
int preferenceTotalCount = prefChangeListener.getTotalPreferenceCount();
System.out.println("preferenceTotalCount expected 1= "+preferenceTotalCount);
if (preferenceTotalCount != 1) {
System.out.println(" preferenceTotalCount = " + preferenceTotalCount);
throw new Exception("preferenceTotalCount != 1 not ok in PreferenceChangeListenerTestTest01()");
}
System.out.println("PreferenceChangeListenerTestTest01() Pass");
} catch(BackingStoreException bse) {
System.out.println("BackingStoreException thrown = " + bse);
System.out.println("PreferenceChangeListenerTestTest01() Fail");
bse.printStackTrace();
} catch (Exception e) {
System.out.println("Exception thrown = " + e);
System.out.println("PreferenceChangeListenerTestTest01() Fail");
e.printStackTrace();
}
}
}
class PreferenceChangeListenerTestClass implements PreferenceChangeListener {
private int totalPreferenceCount = 0;
String keyGot = null;
String valueGot = null;
Preferences preferenceGot = null;
public void preferenceChange(PreferenceChangeEvent evt) {
totalPreferenceCount++;
keyGot = evt.getKey();
valueGot = evt.getNewValue();
preferenceGot = evt.getNode();
System.out.println("from PreferenceChangeListener: totalPreferenceCount= "+totalPreferenceCount);
}
public int getTotalPreferenceCount() {
return totalPreferenceCount;
}
public String getKey(){
return keyGot;
}
public String getValue(){
return valueGot;
}
public Preferences getPreference() {
return preferenceGot;
}
}
----------------------------------Test result on windows---------------
H:\merlin\bugs\prefs\PreferenceChangeListenerTest>java -version
java version "1.4.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta-b48)
Java HotSpot(TM) Client VM (build B48, mixed mode)
H:\merlin\bugs\prefs\PreferenceChangeListenerTest>java Test
Thread.activeCount() = 2
preferenceTotalCount expected 1= 0
preferenceTotalCount = 0
Exception thrown = java.lang.Exception: preferenceTotalCount != 1 not ok in PreferenceChangeListenerTestTest01()
PreferenceChangeListenerTestTest01() Fail
java.lang.Exception: preferenceTotalCount != 1 not ok in PreferenceChangeListenerTestTest01()
at Test.main(Test.java:27)
from PreferenceChangeListener: totalPreferenceCount= 1
--------------------------------test result on solaris-----------------
javapro:/home/pande/merlin/bugs/prefs/PreferenceChangeListenerTest 17 % java -version
java version "1.4.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta-b48)
Java HotSpot(TM) Client VM (build 1.4beta-B48, mixed mode)
javapro:/home/pande/merlin/bugs/prefs/PreferenceChangeListenerTest 18 % java Test
Thread.activeCount() = 3
from PreferenceChangeListener: totalPreferenceCount= 1
preferenceTotalCount expected 1= 1
PreferenceChangeListenerTestTest01() Pass
Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock.
javapro:/home/pande/merlin/bugs/prefs/PreferenceChangeListenerTest 19 %
----------
- duplicates
-
JDK-4408039 Preferences : AddNodeChangeListener fails on win jdk1.4 build48
-
- Closed
-