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!