¿Por qué las clases en las propiedades del sistema de tienda javax.mail en los campos estáticos?

Thorsten Schoening:

He encontré con un manejo de nombres de archivo problema en javax.maily algunos de esos aspectos deben ser configurados por propiedades de la sesión y un poco por las propiedades del sistema. Muchas clases de javax.mailparecen almacenar las propiedades que trabajan en los campos estáticos, como en el siguiente ejemplo para MimeBodyPart:

private static final boolean encodeFileName =
PropUtil.getBooleanSystemProperty("mail.mime.encodefilename", false);

A mi entender, esta se une el valor concreto de la propiedad del sistema para la vida de la clase de alguna cargador de clases concreta. Quien cargas que de primera clase, es el único ser capaz de influir en el valor. Eso era exactamente lo que me pasó:

Yo sabía que tenía que establecer alguna propiedad particular sistema de manejo de los nombres de archivos influencia y también lo hizo en el que manipula el nombre del archivo, para mantener las cosas lo más cerca posible entre sí para fines de documentación, etc. Pero por alguna razón, el antiguo código cargado la clase de interés antes, vinculante el valor incorrecto al campo estático. La única manera de cambiar esto era mover entorno mi valor a un lugar más temprano en la jerarquía de llamada, pero me tomó un tiempo hasta que me di cuenta de la cosa-campo estático.

Que se parece a una mala estrategia para mí, porque no se puede saber fácilmente qué código con el que comparto el mismo cargador de clases utiliza las mismas clases que hago. En teoría esto me obligaría a establecer mis propiedades del sistema al iniciar la JVM ya, haciendo un detalle de implementación de mi código de un administrador-detalle en varias circunstancias diferentes. Si las propiedades del sistema se utilizan en absoluto en lugar de sesión de una vez, lo que habría esperado los que se consultan en vivo, así como la sesión de una vez. Por lo demás es innecesario difícil cambiar los ajustes correspondientes en ciertas circunstancias y casos de uso.

Otoh, el enfoque actual podría simplemente tener algunos beneficios que no estoy al tanto de, al igual que la consulta de las propiedades del sistema es caro como el infierno o igual.

Así que, ¿cuáles son las razones buenas para hacer lo que MimeBodyParthace arriba?

Bill Shannon:

Tienes razón, @ maio290, fue deliberadamente mal diseñado. :-)

En una aplicación multihebras, consultar la propiedad dinámica no ayuda.

En la mayoría de los casos, estas propiedades estáticas no se esperaba que cambiar durante la vida de una aplicación.

En algunos casos, el uso de estática fue un desafortunado compromiso, porque el código que necesitaba no tenía acceso a la sesión. Cambio de todas las API para pasar la sesión a través explícitamente lo hubiera hecho el código más complejo.

Almacenamiento local de subprocesos se consideró, pero eso depende también en gran medida del modelo de hilos que utiliza la aplicación.

Siempre que sea posible, se utilizaron Propiedades de la sesión, pero en algunos casos no había una buena manera de hacer eso por lo que se utilizaron las propiedades del sistema.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=394539&siteId=1
Recomendado
Clasificación