Comencé a leer sobre el bean de sesión singleton y las anotaciones utilizadas para utilizar la concurrencia administrada por contenedor. No veo la ventaja de esto en comparación con simplemente usar la palabra clave 'sincronizada', así que sospecho que hay algo importante que me falta. Considere este ejemplo del libro "Enterprise JavaBeans 3.1" por Rubinger & Burke, O'Reilly:EJB 3.1 concurrencia administrada por contenedor vs. sincronizada
@javax.ejb.Lock(javax.ejb.LockType.READ)
public String concurrentReadOnlyMethod(){...}
@javax.ejb.Lock(javax.ejb.LockType.WRITE)
public void allowOnlyOneWriteAtATimeMethod(String stringToSet){...}
¿Cómo es esto mejor que la omisión de la anotación todas Juntos en la lectura de los casos y el uso de la palabra clave synchronized
en la escritura de los casos , como este:
public String concurrentReadOnlyMethod(){...}
public synchronized void allowOnlyOneWriteAtATimeMethod(String stringToSet){...}
Si lo entiendo correctamente, puedo expresarlo informalmente así: dada una clase que contiene ambos métodos anteriores, con concurrencia administrada por contenedor, la semántica es "se permiten lecturas concurrentes siempre que no se esté escribiendo". La semántica del ejemplo de contraste será "se permiten lecturas concurrentes, también mientras la escritura continúa, pero solo un hilo estará escribiendo a la vez". –
Sí, eso lo resume bastante bien. –
¿Puede darme una referencia de esta semántica del bloqueo de LECTURA/ESCRITURA en EJB 3.1? No pude encontrarlo ni siquiera en la especificación. – illEatYourPuppies