java transactions java-ee ejb-3.0

java - Ejemplos o casos de uso para explicar los atributos de transacción de EJB



transactions java-ee (2)

Hay algunas buenas explicaciones de Atributos de Transacción EJB (y anotaciones), por ejemplo, OpenEJB''s .

Pero a veces, cuando trato de cubrir esto con alguien que no ha trabajado con muchos recursos transaccionales, veo que sus ojos comienzan a nublarse.

Entonces mi pregunta: ¿cómo explicarías los atributos de transacción EJB a tu abuela?

  • Necesario
  • RequiereNuevo
  • Obligatorio
  • No soportado
  • Apoyos
  • Nunca

Estoy pensando en un ejemplo artificial, una analogía o un caso de uso conciso del mundo real que sería útil.


Creo que tiene sentido pensar en esto en términos de la interacción del contenedor con una persona que llama al método EJB como un verdadero monitor ... así que me gustaría usar una metáfora de gorila en varios escenarios diferentes.

Consulte esta página para obtener una descripción / descripción general de los atributos de la transacción.

Requerido (REQUERIDO @TransactionAttribute)
Club nocturno

Aparecer en el club, necesita un boleto para ingresar. Si no tiene uno, lo recibirá (¿lo compró?) En la puerta.

La transacción es el TICKET.
El contenedor es el BOUNCER.

Requiere nuevo (REQUIRES_NEW @TransactionAttribute)
Clubes de comedia, 1 bebida mínima, sin reingreso

Preséntese en el club, sin comida / bebida afuera, debe dejarlos en la puerta. Para entrar, debe comprar 1 bebida mínima cada vez que salga y vuelva a ingresar.

La transacción es DRINK.
El contenedor es el BOUNCER.
La suspensión de la transacción es DEJAR EN LA PUERTA.

Admite (SUPPORTS @TransactionAttribute)
Fiesta en la casa

Aparecer en la fiesta, el alcohol está permitido. Te dejaremos entrar si tienes tu propio alcohol, si no lo haces, te dejaremos entrar también.

La transacción es el ALCOHOL.
El contenedor es el HOST.

Obligatorio (OBLIGATORIO @TransactionAttribute)
Fiesta de invitación solamente

Preséntate en la fiesta, necesita una invitación para ingresar: si no tienes una e intentas entrar, el gorila llama a las autoridades.

La transacción es la INVITACIÓN.
El contenedor es el HOST.
Lanzar una excepción es LLAMAR A LAS AUTORIDADES.

No compatible (NOT_SUPPORTED @TransactionAttribute)
Concierto, las cámaras están prohibidas.

Aparecer en el concierto, las cámaras están prohibidas. Puedes dejarlo en la puerta y recogerlo cuando te vayas.

La transacción es la CÁMARA.
El contenedor es el DOORMAN.
La suspensión de la transacción es DEJAR EN LA PUERTA.

Nunca (NUNCA @TransactionAttribute)
Baile de escuela secundaria

Aparecer en el baile, el alcohol está prohibido. Si tratas de conseguirlo y te atrapan, el acompañante llama a las autoridades.

La transacción es el ALCOHOL.
El contenedor es el CHAPERONE. Lanzar una excepción es LLAMAR A LAS AUTORIDADES.


Puedes pensar en ellos en términos de colaboración . Digamos que eres un chef y tienes una docena de hornos para trabajar. Necesitas hornear algunos pasteles. Para este ejemplo, usted es el método llamado, el horno es la transacción y su jefe es el que llama.

  • Requerido : si su jefe le dice que hornee unos pasteles sin decirle qué horno usa, simplemente siga adelante y elija uno. Al final, cierras el horno, asegurándote de que nadie más pueda usarlo.
  • Requiere algo nuevo : siempre hornearás los pasteles en el horno que elijas. Si estás en el medio del proceso de hornear algunos pasteles y tu jefe te dice que hornear otro lote, interrumpes el proceso actual de horneado, vas a hornear algunos pasteles en un horno nuevo, y reanudas la cocción de los viejos.
  • Obligatorio : Eres un cocinero tonto. Tu jefe siempre tiene que decirte qué horno tienes que usar. Si su jefe no le dice qué horno usar, grita "¡estúpido!".
  • NotSupported : Piense en esto como hacer un postre que no necesita el horno. Si está en medio de hornear algunos pasteles en el horno, deténgalo, prepare el postre y reanude la cocción del pastel.
  • Apoyos : Esto es más adecuado para un ayudante de cocina. Tú eres el ayudante. Si el cocinero principal le pide que hornee un pastel con el horno X, simplemente haga eso. Si él te pide que hagas un postre, simplemente haz eso. La principal diferencia con respecto a los otros es que nunca haces preguntas ni eliges hacer nada. Simplemente sigue las ordenes
  • Nunca : este es otro cocinero tonto. Si su jefe le pide que haga un postre mientras está preparando un pastel, usted grita y dice: "¡Renuncio!". No hay pastel horneado alguna vez. Entonces, su jefe debe tener cuidado y solo pedirle que hornee unos pasteles cuando no está horneando pasteles.

Espero que ayude.