Chtěl jsem se zeptat na váš názor nebo zkušenost s prací ve vláknech J2EE
aplikací?
Četl jsem doporučení, že by se vlákna neměla v J2EE vytvářet resp., že jsou
doporučené metody jak to bezpečně dělat (pomocí různých implementací timerů
atd.).

Řeším problém, kdy vlákno (request) potřebuje udělat tři dotazy do třech
různých databází a ty sloučit do jednoho výsledku. Je velmi pomalé čekat na
doběh jednotlivých dotazů, které jsou na sobě nezávislé.
Navrhl jsem pro začátek něco takového viz. níže, ale nejsem si jist jestli
tam není nějaká záludnost:

/** definice pracovní třídy pro práci s DB (obsahuje vše potřebné k načtení
dat) */
public class DbWorker implements Callable<Result> {
  ...
}

/** voláno z requestu */
ExecutorService executor = Executors.newFixedThreadPool(MAX_THREADS);
List<Future<Result>> res = new ArrayList<Future<Integer>>();

for (DbTask task : tasks) {
  // načtení dat
  res.add(executor.submit(new DbWorker(task, ...)));
}

// čekej na dokončení vláken

// Zpracování načtených dat
for (Future<Integer> future : res) {
  System.out.println(future.get());
}

Petr

Odpovedet emailem