Je travaille sur une logique d'accès aux données avec Spring, ma question concerne les transactions. La documentation de transaction http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html montre que vous pouvez implémenter des transactions déclaratives ou programmatiques. J'ai choisi d'utiliser l'approche programmatique pour avoir un meilleur contrôle sur ce qui est traité.Transaction programmée de printemps avec le paramètre
Le modèle de base ressemble à ceci:
Product product = new Product();
// load properties
// how do I pass my product object instance to my anonymous method?
transactionTemplate.execute(
new TransactionCallbackWithoutResult()
{
protected void doInTransactionWithoutResult (TransactionStatus status)
{
// transaction update logic here
return;
}});
Peut-être que je vais sur ce mal, mais, ma question est de savoir comment puis-je passer des arguments dans la méthode anonyme interne? La raison pour laquelle je veux faire ceci est que je puisse construire mon graphe d'objet avant de commencer la transaction (parce que les transactions devraient être aussi courtes que possible?) Je veux seulement qu'une fraction de la logique s'exécute dans la transaction mise à jour de la logique).
[modifier]
Jusqu'à présent, il semble que mon seul choix est d'utiliser une variable constante, ou tout simplement mettre toute logique à l'intérieur du délégué anonyme. Cela semble être un problème très commun ... comment avez-vous géré des situations comme celle-ci dans votre propre code?
Je ne peux pas, le produit est un type d'instance et il doit être chargé dans la méthode contenant et je ne veux pas en faire un membre de la classe variable soit. La méthode contenant sera appelée à plusieurs reprises, donc je ne pense pas que le rendre statique fonctionnerait à moins que je manque quelque chose. – James
@James: Je veux dire une variable locale finale – axtavt
Cette méthode sera appelée par différents threads, elle est utilisée dans une application web. Si je fais la variable locale finale qui ne serait pas sûre de thread serait-elle? – James