2009-05-21 18 views
6

Son beans de sesión (beans de sesión sin estado, beans de sesión con estado) ¿Sincronizados?EJB y sincronización

+1

¿sincronizado con qué? –

+1

Alguien me hizo esta pregunta, ¿cuál debería ser la respuesta correcta? No vi ningún método sincronizado dentro de EJB, diría que EJB no está sincronizado. Al igual que la gente solía preguntar "¿Hashtable está sincronizado?" –

+0

Técnicamente su pregunta no está clara. ¿Quiere decir: ¿Necesita que los beans de sesión se vuelvan seguros? o ¿Los beans de sesión son seguros para subprocesos? –

Respuesta

6

Solo un hilo a la vez accederá a sus granos. Depende del servidor de aplicaciones gestionar esto. Por lo tanto, no debería usar sincronizados desde sus beans. Esta es la razón por la que un EntityManager que no es seguro para la enhebrado puede ser un valor de instancia y no tener problemas de sincronización.

+0

Sí, eso está bien, pero alguien hizo esta pregunta en una entrevista y yo respondí de la misma manera, pero él no estaba satisfecho con mi respuesta. –

+3

Siempre es posible que no tengan ni idea. –

+1

Exactamente. Además, la nueva anotación @AccessTimeout le permite configurar, de manera portátil, exactamente cuánto tiempo quiere que un hilo de llamada espere a que una instancia esté disponible. También tenga en cuenta que el nuevo @Singleton bean se puede configurar para permitir el acceso multiproceso, pero no es así por defecto. Esa decisión se tomó en un esfuerzo por mantener la coherencia detrás de las reglas predeterminadas para todos los beans de sesión (@Stateless, @Stateful, @Singleton) –

-1

Lo cierto acerca de los beans EJB es que una vez que ha creado los beans EJB 3.0, los métodos del EJB se sincronizan por defecto.

p. Ej.

@Statelss Clase EJBclass {

vacío algunMetodo() {}

}

ahora si se quiere hacer este algunMetodo Sincronizar se mostrará como un error que no se puede sincronizar a este nivel ya que está sincronizado.

EJB 3.0 Los frijoles son inteligentes y el rendimiento es bueno.

-1

Enterprise Java beans no están sincronizados. Como los beans de sesión son mantenidos por el contenedor ejb, por lo que debe implementar la lógica de sincronización en el nivel de la aplicación.

+0

¿Estás seguro de esto? Creo que el estándar JEE es muy claro y solo los beans de entidad permiten la configuración del acceso actual a sus métodos. Por favor corrígeme si estoy equivocado. – icordoba

1

Session bean significa que hay un usuario registrado. Si el usuario hace doble clic accidentalmente en la acción de UI, se crean dos solicitudes http en dos subprocesos independientes.

  • Los beans sin estado son SINCRONIZADOS. Cada hilo tendrá una instancia diferente y ambos ejecutarán la lógica paralelamente. ¡Ambos pueden acceder a los mismos recursos!
  • Los beans Statefull se sincronizan por contenedor. Ambos hilos obtendrán la misma instancia ejb. El segundo hilo está esperando para terminar el primero. No hay problema.
1

Los beans de sesión Stateless/Stateful son seguros para la ejecución de subprocesos. Debido a que cada solicitud obtendrá una instancia dedicada del bean y por lo tanto no necesita ser sincronizada.

Los beans de sesión Singleton se comparten y deben sincronizarse ya sea por el contenedor (Concurrency Managed Concurry - CMC) o por el usuario (Bead Concurrency administrado - BMC).