[RESOLVIDO] Lock otimista JPA

Você pode usar a estratégia de alocar um lote de IDs , para passar menos vezes pelo método de geração de ID que ficou engargalado após o synchronized. (também vai melhorar o desempenho como um todo, pois serão menos consultas).

Mais ou menos assim:

Você tem isso:

for(... : colecao) {
     ...
     // Para cada item da coleção pega um novo ID "x" . O método getNextID() então atualiza seus controles para que na próxima chamada retorne x+1
     novoApontPK.setIdAcdPlanoaulaApontamento(getTgrSequencialtabelasBean().getNextID(sGuid, "ACD_PLANOAULA_APONTAMENTO"));
}

Dá para fazer:

// O método getNextID() foi modificado para receber a quantidade de elementos que será inserida. Ele reservará uma faixa de IDs,
// de modo que na próxima chamada não será retornado "x+1" e sim "x + quantidade reservada" .
// Assim o método synchronized será chamado apenas uma vez para todos os itens.
int id = getTgrSequencialtabelasBean().getNextID(sGuid, "ACD_PLANOAULA_APONTAMENTO", colecao.size())
for(... : colecao) {
     ...
     // Para cada item da coleção pega um novo ID "x" . O método getNextID() então atualiza seus controles para que na próxima chamada retorne x+1
     novoApontPK.setIdAcdPlanoaulaApontamento(id);
     id++; // Incrementa o ID para o próximo valor
}

[/quote]

Oi gomesrod obrigado pela atenção kra, entendi a sua idéia eu vou passar somente uma vez no “gerador de ids” mas ja carregando todos os Ids que preciso para persistir naquele momento e so acessando novamente o metodo na proxima lista que necessito persistir. acho que vai melhorar o desempenho sim!
Vou implementar isso e posto o resultado
Obrigado

Resolvido kra ótima idéia ficou totalmente funcional e a performance aumento muito!!!
RESOLVIDO

Obrigado a todos!