Clase java.util.Properties antes, API Preferences despues ¿Si utilizan o utilizaron alguna vez esto?

Hola JavaMexico.

Sigo repasando y aprendiendo sobre Java SE básico y me encontré con la clase Preferences.

De la descripción de la clase que aparece en un libro de deitel dice: "Un uso común de los objetos Properties en versiones anteriores de Java era para mantener los datos de configuración de las aplicaciones o las preferencias de los usuarios para las aplicaciones. Una nueva característica de la plafatorma Java versión 1.4 es la * API Preferences * que está diseñada para reemplazar el uso de la clase Properties con un mecanismo más robusto para mantener los datos de configuración y preferencia."

Estuve haciendo una busqueda sobre la clase Properties y encuentro algunos resultados en español... PERO al buscar sobre la nombrada API Preferences no encuentro demasiadas respuestas en spanish ¿será que no se utilizó esta api o solo por un breve tiempo y apareció alguna otra clase en la versión 5 o 6 de Java que la reemplazara?

Queria preguntarles además si habitualmente en sus desarrollos utilizan las funcionalidades de la API Preferences... o si utilizan otra API para que provea las mismas funcionalidades... o implementaron su propio codigo para estas funcionalidades... ó utilizar la clase java.util.Properties es valido aun todavia para esas funciones... ustedes me dirán.

Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

API

Nunca he utilizado esa API para preferencias; generalmente los parámetros que quiero modificar en una aplicación los pongo en archivo que leo con Properties. Pero suena bien esa API, siempre y cuando la ventaja sea que utilice el mecanismo de preferencias del sistema operativo (en caso que haya uno).

Revisando el API parece ser una abstracción que bien podría implementarse en Mac y Windows al menos, de manera estándar. Hay preferencias a nivel sistema y a nivel usuario. Más sofisticado que un vil archivo de Properties...

Imagen de benek

Properties

Yo he utilizado la clase Properties para leer de los clásicos y famosos archivos .properties, de la API Preferences no había leído ni escuchado.

Leyendo un poco parece que está especialmente diseñada para simplificar el paso entre ambientes.

Supongo que la clase Properties se ha mantenido porque ha imperado la simplicidad de su uso, eso a veces hace que los desarrolladores no piensen en otras opciones porque están a gusto con la solución que se tiene. La API se ve bastante bien, intentaré ocuparla en mi próximo proyecto.

Saludos.

Javier Ramírez Jr.

Imagen de luxspes

Archivos de configuracion?: Usa Spring

En mi caso, cualquier cosa que quiero poner configurable, la configuro con Spring.

Imagen de ezamudio

Spring != preferences

Pero Spring es muy util para configurar cosas a nivel aplicacion; esta API es mas para usuario final, para guardar su preferencia de si quieren ver el icono en azul o verde, si quieren usar fuente de sistema o una mas grande, ese tipo de cosas, que no van en la aplicacion sino que cada usuario dice como quiere verlo.

Me pregunto si hay una implementacion de esta API para aplicaciones web, o si solamente fue pensada para aplicaciones de escritorio.

Imagen de samz550a

Saludos a todos.

Gracias por las respuestas para todos.

Queria comentar algo: En el código que vi del uso de java.util.Properties guardaba las preferencias en un archivo llamado "nombre.dat"... yo me dije que bueno, seria simplemente un archivo de datos cualquiera (---.dat ).
Pero
Benek comenta que la ha utilizado para leer los nombre.properties ... yo creí que las api (o clases) para trabajar con los .properties era otra.

Yo conozco los [.]properties de Spring framework para la internacionalización de los mensajes... pero bueno, ahora mismo no me acuerdo bien como era que se invocaban... solo que se configuraban los datos en pares
valor=mensaje
otroClave=mensaje
... y así sucesivamente.

Bueno, creo recordar que Spring ofrece diferentes clases que extraen los datos de los .properties según convenga... como cuando se configura en el context.xml los parametros para un datasource cuya configuración está en un jdbc.properties.

Como les digo, he utilizado los .properties con la ayuda de las clases de Spring, pero fuera de Spring no se como llama benek los datos de los archivos .properties ....... solo suponia que no estaba relacionado con la clase java.util.Properties

Imagen de samz550a

Saludos a todos.

Ahora que lo pienso...

Luxspes... ¿spring define algún modulo o clases específicas para ayudarnos con las partes configurables de cualquier aplicación? pues he visto en Spring que lo hace pero muy ligado a lo que se está haciendo en el momento como una aplicación con el módulo Spring MVC

Mi pregunta es que si hay algo en Spring framework específico para las labores de Configurar cualquier cosa, en cualquier contexto de una aplicación

Imagen de luxspes

Tienes razon "Spring != preferences"

Spring != preferences

Tienes razón, yo entendí mal. Pensé que se refería a configuraciones de la aplicación, no configuraciones del usuario.

Me pregunto si hay una implementacion de esta API para aplicaciones web, o si solamente fue pensada para aplicaciones de escritorio.

Sospecho que es mas bien para aplicaciones de escritorio... en una aplicación web puedes potencialmente tener miles de usuarios... y te pueden llegar a interesar cosas como hacer consultas para detectar tendencias en las preferencias que puedes usar para analizar los gustos de tus usuarios como un grupo (y ajustar tu aplicación web en consecuencia)... en mi opinión, para casos así, es mejor usar una base de datos...

Imagen de luxspes

Preferencias y Configuraciones con la misma API: Suena dificil

Luxspes... ¿spring define algún modulo o clases específicas para ayudarnos con las partes configurables de cualquier aplicación? pues he visto en Spring que lo hace pero muy ligado a lo que se está haciendo en el momento como una aplicación con el módulo Spring MVC

Si es para configuración netamente de la aplicación (y no de preferencias particulares del usuario), los archivos de configuracion de Beans de Spring son adecuados... si por otro lado estas buscando que cada usuario pueda configurar su entorno particular, entonces en mi opinion la base de datos es el lugar adecuado para guardar esa configuracion.

Mi pregunta es que si hay algo en Spring framework específico para las labores de Configurar cualquier cosa, en cualquier contexto de una aplicación

Seria interesante algo asi... pero que yo sepa no existe... y quien sabe si seria posible hacerlo... en mi opinion, las preferencias de cada usuario irian en la base de datos... mientras que la configuracion de la aplicacion en general iria en los archivos de beans de spring... entre los elementos de esa configuracion podria estar precisamente la conexion con la base de datos... lo que haria basicamente imposible (o muy dificil quiza) utilizar el mismo mecanismo para configuraciones generales de la aplicacion y las preferencias individuales de los usuarios

Imagen de ezamudio

DB Backend

y por eso se podria tener una implementación que almacene todo en base de datos, no?

Imagen de luxspes

depende de tu definicion de "todo"

y por eso se podria tener una implementación que almacene todo en base de datos, no?

Depende de tu definición de todo... todas las preferencias del usuario, si, todas preferencias del usuario y todas las configuraciones de la aplicación.... pues ya esta mas difícil (imposible?): por que si guardas en la base de datos la configuración de conexión a la base de datos... entonces como la lees para conectarte? ;-)

Imagen de ezamudio

Todo lo del usuario

*suspiro estilo Napoleon Dynamite*... Estamos hablando de preferencias del usuario, porque este foro es del API de preferencias del usuario. Ya pasamos el punto en que discutimos acerca de Spring que si se puede usar para lo mismo o no, y quedamos en que Spring es útil para configurar una aplicación, a nivel aplicación, es decir conectar los componentes que se necesitan etc pero aún si usas Spring en aplicaciones de escritorio, sólo va a ser para la config de la aplicación como tal, no las preferencias del usuario.

Los datos de conexión a base de datos deben ser parte de la configuración a nivel aplicación, no preferencias del usuario; el usuario no puede decidir arbitrariamente a qué base de datos se va a conectar, a menos que sea una app para manejo de bases de datos en general, pero cualquier app que necesite conectarse a una base de datos (especialmente una app en web, que es a lo que me refería yo en el post anterior), la app estará incluso conectada probablemente por medio de un datasource definido en el contenedor, ni siquiera en el WAR o EAR; pero en fin tal vez no fui claro y voy a refrasear mi post anterior:

Sería interesante ver una implementación del API de preferencias, para el caso de aplicaciones web, que almacene todas las preferencias de los usuarios en una base de datos, no? De ese modo se puede usar ese mismo API en escritorio, con el almacenamiento que depende del sistema operativo, o en web, con almacenamiento en base de datos (que puede ser la misma base de datos que usa la aplicación, o una distinta que se usa exclusivamente para las preferencias de los usuarios).