Tu synchronizaci tam, kde potřebuji dělám tak, že mám informaci o nějakém
systémovém úkolu, jehož identifikátor posílám v message, a ve chvíli, kdy
se úkol dokončí, tak se k němu zapíše výsledek.

Jirka
2012/4/13 Ondra Medek <xmed...@gmail.com>

> No já myslím, že Petr bude ještě potřebovat nějakou synchronizaci až
> se data načtou.
>
> V Tvém případě v JEE prostředí můžeš použít vlákna, protože tvoje
> metoda je vlastně synchronní, jen jistá část kódu se kvůli výkonu volá
> asynchronně. Akorát v těch vláknech nemůžeš používat JEE věci, jako je
> např. přístup k DB. Ale i tak by bylo pravděpodobně lepší použít
> některý z navrhovných způsobů.
>
> 2012/4/13 Jiří Chaloupka <k...@chalu.cz>:
> > V J2EE se namísto toho využije aplikační server a pomocí message se pošle
> > pokyn k vykonání nějaké asynchronní operace.
> > Podívejte se třeba na
> >
> http://www.java2s.com/Code/Java/EJB3/EJBTutorialfromJBossdemoformessagedrivenbean.htm
> > Protože jste toto asi ještě nepoužil, ještě napovím, že zpráva může být
> > různých typů včetně java.lang.Object
> >
> > Jirka Chaloupka
> >
> > Dne 13. dubna 2012 14:33 Petr Franta <petr.fra...@gmail.com> napsal(a):
> >
> >> 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
> >
> >
>
>
>
> --
> Ondra Medek
>

Odpovedet emailem