java.util.prefs
Class WindowsPreferences

java.lang.Object
  extended byjava.util.prefs.Preferences
      extended byjava.util.prefs.AbstractPreferences
          extended byjava.util.prefs.WindowsPreferences

class WindowsPreferences
extends AbstractPreferences

Windows registry based implementation of Preferences. Preferences' systemRoot and userRoot are stored in HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs and HKEY_CURRENT_USER\Software\JavaSoft\Prefs correspondingly.

Since:
1.4
Author:
Konstantin Kladko
See Also:
Preferences, PreferencesFactory

Nested Class Summary
 
Nested classes inherited from class java.util.prefs.AbstractPreferences
 
Field Summary
private static int DELETE
           
private static int DISPOSITION
           
private static int ERROR_ACCESS_DENIED
           
private static int ERROR_CODE
           
private static int ERROR_FILE_NOT_FOUND
           
private static int ERROR_SUCCESS
           
private static int HKEY_CURRENT_USER
          Windows handles to HKEY_CURRENT_USER and HKEY_LOCAL_MACHINE hives.
private static int HKEY_LOCAL_MACHINE
           
private static int INIT_SLEEP_TIME
          Initial time between registry access attempts, in ms.
private  boolean isBackingStoreAvailable
          BackingStore availability flag.
private static int KEY_ALL_ACCESS
           
private static int KEY_CREATE_SUB_KEY
           
private static int KEY_ENUMERATE_SUB_KEYS
           
private static int KEY_QUERY_VALUE
           
private static int KEY_READ
           
private static int KEY_SET_VALUE
           
private static int KEY_WRITE
           
private static Logger logger
          Logger for error messages
private static int MAX_ATTEMPTS
          Maximum number of registry access attempts.
private static int MAX_KEY_LENGTH
           
private static int MAX_VALUE_NAME_LENGTH
           
private static int MAX_WINDOWS_PATH_LENGTH
          Maximum byte-encoded path length for Windows native functions, ending null character not included.
private static int NATIVE_HANDLE
           
private static int NULL_NATIVE_HANDLE
           
private static int REG_CREATED_NEW_KEY
           
private static int REG_OPENED_EXISTING_KEY
           
private static int SUBKEYS_NUMBER
           
private static int SYSTEM_ROOT_NATIVE_HANDLE
          Mount point for Preferences' system root.
(package private) static Preferences systemRoot
          System root node.
private static int USER_ROOT_NATIVE_HANDLE
          Mount point for Preferences' user root.
(package private) static Preferences userRoot
          User root node.
private static int VALUES_NUMBER
           
private static byte[] WINDOWS_ROOT_PATH
          Windows registry path to Preferences's root nodes.
 
Fields inherited from class java.util.prefs.AbstractPreferences
lock, newNode, parent
 
Fields inherited from class java.util.prefs.Preferences
MAX_NAME_LENGTH, MAX_VALUE_LENGTH
 
Constructor Summary
private WindowsPreferences(int rootNativeHandle, byte[] rootDirectory)
          Constructs a root node creating the underlying Windows registry node and all of its parents, if they have not yet been created.
private WindowsPreferences(WindowsPreferences parent, String name)
          Constructs a WindowsPreferences node, creating underlying Windows registry node and all its Windows parents, if they are not yet created.
 
Method Summary
private static String byteArrayToString(byte[] array)
          Converts a null-terminated byte array to java string
protected  String[] childrenNamesSpi()
          Implements AbstractPreferences childrenNamesSpi() method.
protected  AbstractPreferences childSpi(String name)
          Implements AbstractPreferences childSpi() method.
private  void closeKey(int nativeHandle)
          Closes Windows registry key.
 void flush()
          Implements Preferences flush() method.
protected  void flushSpi()
          Empty, never used implementation of AbstractPreferences.flushSpi().
protected  String getSpi(String javaName)
          Implements AbstractPreferences getSpi() method.
protected  String[] keysSpi()
          Implements AbstractPreferences keysSpi() method.
private static Logger logger()
           
private  int openKey(byte[] windowsAbsolutePath, int mask1, int mask2)
          Opens Windows registry key at a given absolute path using a given security mask.
private  int openKey(int securityMask)
          Opens current node's underlying Windows registry key using a given security mask.
private  int openKey(int nativeHandle, byte[] windowsRelativePath, int mask1, int mask2)
          Opens Windows registry key at a given relative path with respect to a given Windows registry key.
private  int openKey(int mask1, int mask2)
          Opens current node's underlying Windows registry key using a given security mask.
protected  void putSpi(String javaName, String value)
          Implements AbstractPreferences putSpi() method.
 void removeNodeSpi()
          Implements AbstractPreferences removeNodeSpi() method.
protected  void removeSpi(String key)
          Implements AbstractPreferences removeSpi() method.
private  int rootNativeHandle()
          Returns native handle for the top Windows node for this node.
private static byte[] stringToByteArray(String str)
          Returns this java string as a null-terminated byte array
 void sync()
          Implements Preferences sync() method.
protected  void syncSpi()
          Empty, never used implementation of AbstractPreferences.flushSpi().
private static String toJavaAlt64Name(String windowsName)
          Converts value's or node's name from its Windows representation to java string, using altBase64 encoding.
private static String toJavaName(byte[] windowsNameArray)
          Converts value's or node's name from its byte array representation to java string.
private static String toJavaValueString(byte[] windowsNameArray)
          Converts value string from its Windows representation to java string.
private static byte[] toWindowsAlt64Name(String javaName)
          Converts value's or node's name to its Windows representation as a byte-encoded string, using altBase64 encoding.
private static byte[] toWindowsName(String javaName)
          Converts value's or node's name to its Windows representation as a byte-encoded string.
private static byte[] toWindowsValueString(String javaName)
          Converts value string to it Windows representation.
private  byte[] windowsAbsolutePath()
          Returns Windows absolute path of the current node as a byte array.
private static int WindowsRegCloseKey(int hKey)
          Java wrapper for Windows registry API RegCloseKey()
private static int[] WindowsRegCreateKeyEx(int hKey, byte[] subKey)
          Java wrapper for Windows registry API RegCreateKeyEx()
private static int[] WindowsRegCreateKeyEx1(int hKey, byte[] subKey)
          Retries RegCreateKeyEx() MAX_ATTEMPTS times before giving up.
private static int WindowsRegDeleteKey(int hKey, byte[] subKey)
          Java wrapper for Windows registry API RegDeleteKey()
private static int WindowsRegDeleteValue(int hKey, byte[] valueName)
          Java wrapper for Windows registry API RegDeleteValue()
private static byte[] WindowsRegEnumKeyEx(int hKey, int subKeyIndex, int maxKeyLength)
          Java wrapper for Windows registry API RegEnumKeyEx()
private static byte[] WindowsRegEnumKeyEx1(int hKey, int subKeyIndex, int maxKeyLength)
          Retries RegEnumKeyEx() MAX_ATTEMPTS times before giving up.
private static byte[] WindowsRegEnumValue(int hKey, int valueIndex, int maxValueNameLength)
          Java wrapper for Windows registry API RegEnumValue()
private static byte[] WindowsRegEnumValue1(int hKey, int valueIndex, int maxValueNameLength)
          Retries RegEnumValueEx() MAX_ATTEMPTS times before giving up.
private static int WindowsRegFlushKey(int hKey)
          Java wrapper for Windows registry API RegFlushKey()
private static int WindowsRegFlushKey1(int hKey)
          Retries RegFlushKey() MAX_ATTEMPTS times before giving up.
private static int[] WindowsRegOpenKey(int hKey, byte[] subKey, int securityMask)
          Java wrapper for Windows registry API RegOpenKey()
private static int[] WindowsRegOpenKey1(int hKey, byte[] subKey, int securityMask)
          Retries RegOpenKey() MAX_ATTEMPTS times before giving up.
private static int[] WindowsRegQueryInfoKey(int hKey)
          Java wrapper for Windows registry API RegQueryInfoKey()
private static int[] WindowsRegQueryInfoKey1(int hKey)
          Retries RegQueryInfoKey() MAX_ATTEMPTS times before giving up.
private static byte[] WindowsRegQueryValueEx(int hKey, byte[] valueName)
          Java wrapper for Windows registry API RegQueryValueEx()
private static int WindowsRegSetValueEx(int hKey, byte[] valueName, byte[] value)
          Java wrapper for Windows registry API RegSetValueEx()
private static int WindowsRegSetValueEx1(int hKey, byte[] valueName, byte[] value)
          Retries RegSetValueEx() MAX_ATTEMPTS times before giving up.
 
Methods inherited from class java.util.prefs.AbstractPreferences
absolutePath, addNodeChangeListener, addPreferenceChangeListener, cachedChildren, childrenNames, clear, exportNode, exportSubtree, get, getBoolean, getByteArray, getChild, getDouble, getFloat, getInt, getLong, isRemoved, isUserNode, keys, name, node, nodeExists, nodeListeners, parent, prefListeners, put, putBoolean, putByteArray, putDouble, putFloat, putInt, putLong, remove, removeNode, removeNodeChangeListener, removePreferenceChangeListener, toString
 
Methods inherited from class java.util.prefs.Preferences
importPreferences, systemNodeForPackage, systemRoot, userNodeForPackage, userRoot
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

logger

private static Logger logger
Logger for error messages


WINDOWS_ROOT_PATH

private static final byte[] WINDOWS_ROOT_PATH
Windows registry path to Preferences's root nodes.


HKEY_CURRENT_USER

private static final int HKEY_CURRENT_USER
Windows handles to HKEY_CURRENT_USER and HKEY_LOCAL_MACHINE hives.

See Also:
Constant Field Values

HKEY_LOCAL_MACHINE

private static final int HKEY_LOCAL_MACHINE
See Also:
Constant Field Values

USER_ROOT_NATIVE_HANDLE

private static final int USER_ROOT_NATIVE_HANDLE
Mount point for Preferences' user root.

See Also:
Constant Field Values

SYSTEM_ROOT_NATIVE_HANDLE

private static final int SYSTEM_ROOT_NATIVE_HANDLE
Mount point for Preferences' system root.

See Also:
Constant Field Values

MAX_WINDOWS_PATH_LENGTH

private static final int MAX_WINDOWS_PATH_LENGTH
Maximum byte-encoded path length for Windows native functions, ending null character not included.

See Also:
Constant Field Values

userRoot

static final Preferences userRoot
User root node.


systemRoot

static final Preferences systemRoot
System root node.


ERROR_SUCCESS

private static final int ERROR_SUCCESS
See Also:
Constant Field Values

ERROR_FILE_NOT_FOUND

private static final int ERROR_FILE_NOT_FOUND
See Also:
Constant Field Values

ERROR_ACCESS_DENIED

private static final int ERROR_ACCESS_DENIED
See Also:
Constant Field Values

NATIVE_HANDLE

private static final int NATIVE_HANDLE
See Also:
Constant Field Values

ERROR_CODE

private static final int ERROR_CODE
See Also:
Constant Field Values

SUBKEYS_NUMBER

private static final int SUBKEYS_NUMBER
See Also:
Constant Field Values

VALUES_NUMBER

private static final int VALUES_NUMBER
See Also:
Constant Field Values

MAX_KEY_LENGTH

private static final int MAX_KEY_LENGTH
See Also:
Constant Field Values

MAX_VALUE_NAME_LENGTH

private static final int MAX_VALUE_NAME_LENGTH
See Also:
Constant Field Values

DISPOSITION

private static final int DISPOSITION
See Also:
Constant Field Values

REG_CREATED_NEW_KEY

private static final int REG_CREATED_NEW_KEY
See Also:
Constant Field Values

REG_OPENED_EXISTING_KEY

private static final int REG_OPENED_EXISTING_KEY
See Also:
Constant Field Values

NULL_NATIVE_HANDLE

private static final int NULL_NATIVE_HANDLE
See Also:
Constant Field Values

DELETE

private static final int DELETE
See Also:
Constant Field Values

KEY_QUERY_VALUE

private static final int KEY_QUERY_VALUE
See Also:
Constant Field Values

KEY_SET_VALUE

private static final int KEY_SET_VALUE
See Also:
Constant Field Values

KEY_CREATE_SUB_KEY

private static final int KEY_CREATE_SUB_KEY
See Also:
Constant Field Values

KEY_ENUMERATE_SUB_KEYS

private static final int KEY_ENUMERATE_SUB_KEYS
See Also:
Constant Field Values

KEY_READ

private static final int KEY_READ
See Also:
Constant Field Values

KEY_WRITE

private static final int KEY_WRITE
See Also:
Constant Field Values

KEY_ALL_ACCESS

private static final int KEY_ALL_ACCESS
See Also:
Constant Field Values

INIT_SLEEP_TIME

private static int INIT_SLEEP_TIME
Initial time between registry access attempts, in ms. The time is doubled after each failing attempt (except the first).


MAX_ATTEMPTS

private static int MAX_ATTEMPTS
Maximum number of registry access attempts.


isBackingStoreAvailable

private boolean isBackingStoreAvailable
BackingStore availability flag.

Constructor Detail

WindowsPreferences

private WindowsPreferences(WindowsPreferences parent,
                           String name)
Constructs a WindowsPreferences node, creating underlying Windows registry node and all its Windows parents, if they are not yet created. Logs a warning message, if Windows Registry is unavailable.


WindowsPreferences

private WindowsPreferences(int rootNativeHandle,
                           byte[] rootDirectory)
Constructs a root node creating the underlying Windows registry node and all of its parents, if they have not yet been created. Logs a warning message, if Windows Registry is unavailable.

Parameters:
rootNativeHandle - Native handle to one of Windows top level keys.
rootDirectory - Path to root directory, as a byte-encoded string.
Method Detail

WindowsRegOpenKey

private static int[] WindowsRegOpenKey(int hKey,
                                       byte[] subKey,
                                       int securityMask)
Java wrapper for Windows registry API RegOpenKey()


WindowsRegOpenKey1

private static int[] WindowsRegOpenKey1(int hKey,
                                        byte[] subKey,
                                        int securityMask)
Retries RegOpenKey() MAX_ATTEMPTS times before giving up.


WindowsRegCloseKey

private static int WindowsRegCloseKey(int hKey)
Java wrapper for Windows registry API RegCloseKey()


WindowsRegCreateKeyEx

private static int[] WindowsRegCreateKeyEx(int hKey,
                                           byte[] subKey)
Java wrapper for Windows registry API RegCreateKeyEx()


WindowsRegCreateKeyEx1

private static int[] WindowsRegCreateKeyEx1(int hKey,
                                            byte[] subKey)
Retries RegCreateKeyEx() MAX_ATTEMPTS times before giving up.


WindowsRegDeleteKey

private static int WindowsRegDeleteKey(int hKey,
                                       byte[] subKey)
Java wrapper for Windows registry API RegDeleteKey()


WindowsRegFlushKey

private static int WindowsRegFlushKey(int hKey)
Java wrapper for Windows registry API RegFlushKey()


WindowsRegFlushKey1

private static int WindowsRegFlushKey1(int hKey)
Retries RegFlushKey() MAX_ATTEMPTS times before giving up.


WindowsRegQueryValueEx

private static byte[] WindowsRegQueryValueEx(int hKey,
                                             byte[] valueName)
Java wrapper for Windows registry API RegQueryValueEx()


WindowsRegSetValueEx

private static int WindowsRegSetValueEx(int hKey,
                                        byte[] valueName,
                                        byte[] value)
Java wrapper for Windows registry API RegSetValueEx()


WindowsRegSetValueEx1

private static int WindowsRegSetValueEx1(int hKey,
                                         byte[] valueName,
                                         byte[] value)
Retries RegSetValueEx() MAX_ATTEMPTS times before giving up.


WindowsRegDeleteValue

private static int WindowsRegDeleteValue(int hKey,
                                         byte[] valueName)
Java wrapper for Windows registry API RegDeleteValue()


WindowsRegQueryInfoKey

private static int[] WindowsRegQueryInfoKey(int hKey)
Java wrapper for Windows registry API RegQueryInfoKey()


WindowsRegQueryInfoKey1

private static int[] WindowsRegQueryInfoKey1(int hKey)
Retries RegQueryInfoKey() MAX_ATTEMPTS times before giving up.


WindowsRegEnumKeyEx

private static byte[] WindowsRegEnumKeyEx(int hKey,
                                          int subKeyIndex,
                                          int maxKeyLength)
Java wrapper for Windows registry API RegEnumKeyEx()


WindowsRegEnumKeyEx1

private static byte[] WindowsRegEnumKeyEx1(int hKey,
                                           int subKeyIndex,
                                           int maxKeyLength)
Retries RegEnumKeyEx() MAX_ATTEMPTS times before giving up.


WindowsRegEnumValue

private static byte[] WindowsRegEnumValue(int hKey,
                                          int valueIndex,
                                          int maxValueNameLength)
Java wrapper for Windows registry API RegEnumValue()


WindowsRegEnumValue1

private static byte[] WindowsRegEnumValue1(int hKey,
                                           int valueIndex,
                                           int maxValueNameLength)
Retries RegEnumValueEx() MAX_ATTEMPTS times before giving up.


windowsAbsolutePath

private byte[] windowsAbsolutePath()
Returns Windows absolute path of the current node as a byte array. Java "/" separator is transformed into Windows "\".

See Also:
Preferences.absolutePath()

openKey

private int openKey(int securityMask)
Opens current node's underlying Windows registry key using a given security mask.

Parameters:
securityMask - Windows security mask.
Returns:
Windows registry key's handle.
See Also:
#openKey(byte[], int), #openKey(int, byte[], int), closeKey(int)

openKey

private int openKey(int mask1,
                    int mask2)
Opens current node's underlying Windows registry key using a given security mask.

Parameters:
mask1 - Preferred Windows security mask.
mask2 - Alternate Windows security mask.
Returns:
Windows registry key's handle.
See Also:
#openKey(byte[], int), #openKey(int, byte[], int), closeKey(int)

openKey

private int openKey(byte[] windowsAbsolutePath,
                    int mask1,
                    int mask2)
Opens Windows registry key at a given absolute path using a given security mask.

Parameters:
windowsAbsolutePath - Windows absolute path of the key as a byte-encoded string.
mask1 - Preferred Windows security mask.
mask2 - Alternate Windows security mask.
Returns:
Windows registry key's handle.
See Also:
openKey(int), #openKey(int, byte[],int), closeKey(int)

openKey

private int openKey(int nativeHandle,
                    byte[] windowsRelativePath,
                    int mask1,
                    int mask2)
Opens Windows registry key at a given relative path with respect to a given Windows registry key.

Parameters:
nativeHandle - handle to the base Windows key.
mask1 - Preferred Windows security mask.
mask2 - Alternate Windows security mask.
Returns:
Windows registry key's handle.
See Also:
openKey(int), #openKey(byte[],int), closeKey(int)

closeKey

private void closeKey(int nativeHandle)
Closes Windows registry key. Logs a warning if Windows registry is unavailable.

See Also:
openKey(int), #openKey(byte[],int), #openKey(int, byte[],int)

putSpi

protected void putSpi(String javaName,
                      String value)
Implements AbstractPreferences putSpi() method. Puts name-value pair into the underlying Windows registry node. Logs a warning, if Windows registry is unavailable.

Specified by:
putSpi in class AbstractPreferences
See Also:
getSpi(String)

getSpi

protected String getSpi(String javaName)
Implements AbstractPreferences getSpi() method. Gets a string value from the underlying Windows registry node. Logs a warning, if Windows registry is unavailable.

Specified by:
getSpi in class AbstractPreferences
Returns:
the value associated with the specified key at this preference node, or null if there is no association for this key, or the association cannot be determined at this time.
See Also:
putSpi(String, String)

removeSpi

protected void removeSpi(String key)
Implements AbstractPreferences removeSpi() method. Deletes a string name-value pair from the underlying Windows registry node, if this value still exists. Logs a warning, if Windows registry is unavailable or key has already been deleted.

Specified by:
removeSpi in class AbstractPreferences

keysSpi

protected String[] keysSpi()
                    throws BackingStoreException
Implements AbstractPreferences keysSpi() method. Gets value names from the underlying Windows registry node. Throws a BackingStoreException and logs a warning, if Windows registry is unavailable.

Specified by:
keysSpi in class AbstractPreferences
Returns:
an array of the keys that have an associated value in this preference node.
Throws:
BackingStoreException - if this operation cannot be completed due to a failure in the backing store, or inability to communicate with it.

childrenNamesSpi

protected String[] childrenNamesSpi()
                             throws BackingStoreException
Implements AbstractPreferences childrenNamesSpi() method. Calls Windows registry to retrive children of this node. Throws a BackingStoreException and logs a warning message, if Windows registry is not available.

Specified by:
childrenNamesSpi in class AbstractPreferences
Returns:
an array containing the names of the children of this preference node.
Throws:
BackingStoreException - if this operation cannot be completed due to a failure in the backing store, or inability to communicate with it.

flush

public void flush()
           throws BackingStoreException
Implements Preferences flush() method. Flushes Windows registry changes to disk. Throws a BackingStoreException and logs a warning message if Windows registry is not available.

Overrides:
flush in class AbstractPreferences
Throws:
BackingStoreException - if this operation cannot be completed due to a failure in the backing store, or inability to communicate with it.
See Also:
AbstractPreferences.flush()

sync

public void sync()
          throws BackingStoreException
Implements Preferences sync() method. Flushes Windows registry changes to disk. Equivalent to flush().

Overrides:
sync in class AbstractPreferences
Throws:
BackingStoreException - if this operation cannot be completed due to a failure in the backing store, or inability to communicate with it.
See Also:
flush()

childSpi

protected AbstractPreferences childSpi(String name)
Implements AbstractPreferences childSpi() method. Constructs a child node with a given name and creates its underlying Windows registry node, if it does not exist. Logs a warning message, if Windows Registry is unavailable.

Specified by:
childSpi in class AbstractPreferences
Parameters:
name - The name of the child node to return, relative to this preference node.
Returns:
The named child node.

removeNodeSpi

public void removeNodeSpi()
                   throws BackingStoreException
Implements AbstractPreferences removeNodeSpi() method. Deletes underlying Windows registry node. Throws a BackingStoreException and logs a warning, if Windows registry is not available.

Specified by:
removeNodeSpi in class AbstractPreferences
Throws:
BackingStoreException - if this operation cannot be completed due to a failure in the backing store, or inability to communicate with it.

toJavaName

private static String toJavaName(byte[] windowsNameArray)
Converts value's or node's name from its byte array representation to java string. Two encodings, simple and altBase64 are used. See toWindowsName() for a detailed description of encoding conventions.

Parameters:
windowsNameArray - Null-terminated byte array.

toJavaAlt64Name

private static String toJavaAlt64Name(String windowsName)
Converts value's or node's name from its Windows representation to java string, using altBase64 encoding. See toWindowsName() for a detailed description of encoding conventions.


toWindowsName

private static byte[] toWindowsName(String javaName)
Converts value's or node's name to its Windows representation as a byte-encoded string. Two encodings, simple and altBase64 are used.

Simple encoding is used, if java string does not contain any characters less, than 0x0020, or greater, than 0x007f. Simple encoding adds "/" character to capital letters, i.e. "A" is encoded as "/A". Character '\' is encoded as '//', '/' is encoded as '\'. The constructed string is converted to byte array by truncating the highest byte and adding the terminating null character.

altBase64 encoding is used, if java string does contain at least one character less, than 0x0020, or greater, than 0x007f. This encoding is marked by setting first two bytes of the Windows string to '/!'. The java name is then encoded using byteArrayToAltBase64() method from Base64 class.


toWindowsAlt64Name

private static byte[] toWindowsAlt64Name(String javaName)
Converts value's or node's name to its Windows representation as a byte-encoded string, using altBase64 encoding. See toWindowsName() for a detailed description of encoding conventions.


toJavaValueString

private static String toJavaValueString(byte[] windowsNameArray)
Converts value string from its Windows representation to java string. See toWindowsValueString() for the description of the encoding algorithm.


toWindowsValueString

private static byte[] toWindowsValueString(String javaName)
Converts value string to it Windows representation. as a byte-encoded string. Encoding algorithm adds "/" character to capital letters, i.e. "A" is encoded as "/A". Character '\' is encoded as '//', '/' is encoded as '\'. Then encoding scheme similar to jdk's native2ascii converter is used to convert java string to a byte array of ASCII characters.


rootNativeHandle

private int rootNativeHandle()
Returns native handle for the top Windows node for this node.


stringToByteArray

private static byte[] stringToByteArray(String str)
Returns this java string as a null-terminated byte array


byteArrayToString

private static String byteArrayToString(byte[] array)
Converts a null-terminated byte array to java string


flushSpi

protected void flushSpi()
                 throws BackingStoreException
Empty, never used implementation of AbstractPreferences.flushSpi().

Specified by:
flushSpi in class AbstractPreferences
Throws:
BackingStoreException - if this operation cannot be completed due to a failure in the backing store, or inability to communicate with it.

syncSpi

protected void syncSpi()
                throws BackingStoreException
Empty, never used implementation of AbstractPreferences.flushSpi().

Specified by:
syncSpi in class AbstractPreferences
Throws:
BackingStoreException - if this operation cannot be completed due to a failure in the backing store, or inability to communicate with it.

logger

private static Logger logger()