Имам приложение JavaEE 6 / EJB3.1 / Glassfish 3.1.2, което извлича .xml страници от отдалечен компютър, преобразува ги в java обекти, след което запазва всеки от тях в моята база данни mysql. Има десетки хиляди от тези .xml страници и аз просто ги добавям постепенно.
Това работи чудесно, с изключение на това, че е много бавно (70ms извличане на страница + малко време за конвертиране и запазване на обектите).
Искам да извърша тази работа едновременно, за да я ускоря - кой е най-добрият метод?
Вероятно заслужава да се отбележи: всяко извличане на страница актуализира броя в базата данни mysql за идентификационни данни за OAuth, които използва, за да получи страницата, и ако е на максимума, не продължава (хвърля изключение). Не съм сигурен дали/доколко това ще усложни нещата - но ако две нишки видят, че е под максималния, тогава вземете страницата, преди да актуализирате броя, може да надхвърли максималния.
Изследванията ми досега го стесниха до две възможности (не се колебайте да добавите и други):
- Beans, управлявани от съобщения – Предполагам, макар че вероятно грешат, че ще имам сесиен bean, изпращащ url съобщения, докато опашката за съобщения се запълни (да речем, че се добавят 10 url), след което блокира, докато опашката не се изчерпи пълен. Glassfish ще създаде 10 екземпляра на компонент за съобщения, който създавам, всеки от които получава един от .xml от един от URL адресите, актуализира броя на OAuth, след което изпраща този .xml като съобщение до друга опашка с друг компонент за съобщения, който преобразува и продължава. xmls от тази опашка.
- Да използвам метода @Asynchronous и да създам моя собствена опашка за нишки? Това може да е много по-просто и по-подходящо за това, което правя, но не съм сигурен как точно бих го приложил.
Всеки съвет ще бъде оценен!