2012-02-04 9 views

Respuesta

12

Como se indica en la FAQ on EJB restrictions, una de las restricciones para el uso de EJB es:

beans de empresa no deben leer o escribir en los campos estáticos no final

más expandidas en el discussion on static fields:

Los campos de clases estáticas no finales no se permiten en los EJB porque dichos campos crean un enterprise bean diff icult o imposible de distribuir. Los campos de clase estáticos se comparten entre todas las instancias de una clase en particular, pero solo dentro de una única máquina virtual Java (JVM). La actualización de un campo de clase estático implica la intención de compartir el valor del campo entre todas las instancias de la clase. Pero si una clase se ejecuta simultáneamente en varias JVM, solo aquellas instancias que se ejecutan en la misma JVM que la instancia de actualización tendrán acceso al nuevo valor. En otras palabras, un campo de clase estática no final se comportará de manera diferente si se ejecuta en una sola JVM, de lo que se ejecutará en varias JVM. El contenedor EJB se reserva la opción de distribuir enterprise beans en varias JVM (que se ejecutan en el mismo servidor o en cualquier clúster de servidores). Los campos de clases estáticas no finales no se permiten porque las instancias de bean enterprise se comportarán de manera diferente dependiendo de si están distribuidas o no.

Es práctica aceptable utilizar campos de clase estáticos si esos campos están marcados como finales. Como los campos finales no pueden actualizarse, el contenedor puede distribuir las instancias del enterprise bean sin preocuparse de que los valores de esos campos se desincronicen.

+0

Buena respuesta. Lamentablemente, los enlaces están rotos. – Algiz

+1

@Algiz está arreglado ahora, ¡gracias por señalarlo! –

+0

¿Y qué hay de la Colección definitiva estática? ¿Están también permitidos? – botchniaque

1

static medio único para una clase o para todos sus objetos.

Ahora, javabeans se supone que tienen datos específicos del usuario, static campos no tienen ningún sentido para estos.

Un usuario edita una variable, y se actualizará también para todos los demás usuarios. (en forma gratuita :-)).

Sin embargo, si desea un comportamiento estático de estos (es decir, utilizando los mismos datos para todos los usuarios), tiene application para tal fin.

5

Es fundamental. Según este sun documenation,

Los campos de clase estática no finales no se permiten en los EJB porque estos campos hacen que un enterprise bean sea difícil o imposible de distribuir. Los campos de clase estáticos se comparten entre todas las instancias de una clase en particular, pero solo dentro de una única máquina virtual Java (JVM). *

+0

En un bean de sesión sin estado, si mi código llama Resources.getSingleton(), y que devuelve un objeto de recursos estáticos, es que también es un no-no? – djb