Estoy en medio de cambiar mi código JPA para hacer uso de subprocesos. Tengo un administrador de entidades y una transacción por separado para cada hilo.consulta/guardado atómico JPA para la aplicación multiproceso
Lo que solía tener (para el entorno de un solo subproceso) era un código como:
// get object from the entity manager
X x = getObjectX(jpaQuery);
if(x == null)
{
x = new X();
x.setVariable(foo);
entityManager.persist(x);
}
Con ese código en el entorno multihilo que estoy recibiendo claves duplicadas, ya que, supongo, getObjectX devuelve un valor nulo para una hilo, luego ese hilo se intercambia, el siguiente hilo llama a getObjextX, también obtiene nulo, y luego ambos hilos crearán y persistirán una nueva X().
corto de añadir de forma sincronizada, ¿hay una manera de conseguir atómica/save-si-Indiferente-existir con un valor APP o debería reconsiderar mi acercamiento
EDIT:
estoy usando la última EclipseLink y MySql 5.1
EDIT 2:
que añade sincronización ... rendimiento éxito masivo (hasta el punto de que no se puede utilizar). Voy a reunir todos los datos en el hilo principal y luego hago las creaciones en ese hilo.
Tengo que hacerlo en el reverso, lo que crea Foo está fuera de mi control, y está casi garantizado que tiene duplicados. Tendré que reunir todos los datos de los hilos y luego almacenarlos en un solo hilo. – TofuBeer