significado - ¿Hay alguna forma de usar java.util.Preferences en Windows sin usar el Registro como back-end?
programador backend (2)
Deseo utilizar la API java.util.Preferences, pero no quiero que mi programa intente leer o escribir en el registro de Windows. ¿Cómo voy a hacer esto?
Siempre es posible extender java.util.prefs.AbstractPreferences.
Una alternativa podría ser utilizar El paquete de configuración de Apache Commons le permite leer y escribir datos de configuración desde / hacia diferentes fuentes.
Confío en que ha leído el registro de lectura / escritura en Windows usando Java y luego desea tener otro back-end que el registro cuando usa la API java.util.Preferences
Puede ampliar la API de Preference
, como hicieron Bernhard o Croft , como se describe en este artículo :
Debido a que la API de Preferencias es neutral para servicios de fondo, no es necesario que se preocupe si los datos se almacenan en archivos, tablas de bases de datos o en un almacenamiento específico de la plataforma, como el Registro de Windows.
Ejemplos de extensiones a través de nuevas Preferences
se pueden ver aquí .
Eso es mejor, IMO, que usar otra API.
Por ejemplo, buscando clases que java.util.prefs.AbstractPreferences
:
- Puede usar un almacén de preferencias respaldado por un archivo XML:
de.unika.ipd.grgen.util.MyPreferences
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.prefs.AbstractPreferences;
import java.util.prefs.BackingStoreException;
/**
* Own implementation of the Java preferences API, that does not use
* a "OS backing store" but relies on importing and exporting the
* preferences via xml files.
* Also, If a preference is got, but was not in the tree, it is entered.
*/
public class MyPreferences extends AbstractPreferences {
private Map<String, String> prefs = new HashMap<String, String>();
private Map<String, AbstractPreferences> children = new HashMap<String, AbstractPreferences>();
public MyPreferences(MyPreferences parent, String name) {
super(parent, name);
}
/**
* @see java.util.prefs.AbstractPreferences#putSpi(java.lang.String, java.lang.String)
*/
protected void putSpi(String key, String value) {
prefs.put(key, value);
}
- O puede almacenar esas preferencias en un LDAP:
de.tarent.ldap.prefs.LDAPSystemPreferences
import java.util.prefs.AbstractPreferences;
import java.util.prefs.BackingStoreException;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import de.tarent.ldap.LDAPException;
import de.tarent.ldap.LDAPManager;
/**
* @author kirchner
*
* Preferences im LDAP
*/
public class LDAPSystemPreferences extends AbstractPreferences {
LDAPManager ldm = null;
Properties properties = new Properties();
//Map für key/value der Preferences
Map cache = new HashMap();
//Map für timestamp der Preferences
Map timestamp = new HashMap();
private Boolean deleted = Boolean.FALSE;
- O puede usar un archivo de propiedad simple:
com.adito.boot.PropertyPreferences
:
import java.util.prefs.AbstractPreferences;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* A simple implementation for the preferences API. That stores preferences
* in propery files. We do not have to worry about sharing the preferencese
* with other JVM instance so there is no need for any kind of synchronising
* or locking.
*/
public class PropertyPreferences extends AbstractPreferences {