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 >> > >
