Děkuji všem za informace. Jsou to pro mne nové "věci", takže se musím
nejprve prokousat dokumentací a osahat si to.

Petr

2012/4/13 Jiří Chaloupka <[email protected]>

> 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 <[email protected]>
>
>> 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 <[email protected]>:
>> > 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 <[email protected]> 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