Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate Spring Transaction / 25 сообщений из 49, страница 1 из 2
10.03.2017, 17:29
    #39417124
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
собссно вопрос в том что я через екзекьютор запускаю параллельные потоки, которые достают хибером объекты с базы, внутри которых есть лейзи связи. Транзакцию ставлю сверху метода (который в многопотоке) -- то толку ноль. тупо его игнорирует. Читаю стэковерфлоу вроде как должен пораждать вторую транзакцию. Но оно вообще игнорирует эту аннотацию. что я делаю не так? Можно конечно без транзакций решить всё. но это бэд вариант.
...
Рейтинг: 0 / 0
10.03.2017, 18:03
    #39417143
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
Вероятно сами создали экземпляр ExecutorService?
Информация о транзакциях хранится в ThreadLocal. Хранит её там Spring. Про потоки которые вы создали самостоятельно Spring ничего не знает. И информацию о транзакциях в ваших потоках он получить никак не может.
...
Рейтинг: 0 / 0
10.03.2017, 18:20
    #39417157
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
...
Рейтинг: 0 / 0
10.03.2017, 18:30
    #39417166
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
Blazkowicz https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
Вероятно сами создали экземпляр ExecutorService?
Информация о транзакциях хранится в ThreadLocal. Хранит её там Spring. Про потоки которые вы создали самостоятельно Spring ничего не знает. И информацию о транзакциях в ваших потоках он получить никак не может.
да, сам создал. если через репозиторий работать - то сохранить прочитать всё хорошо )) а с транзакциями беда. :) можно еще сейшн.геткуррентсейшн... и дальше по цепочке - но тогда получается лютый хардкод. Правда, работает.

хорошо, а как через тредлокл передать эту инфу?
...
Рейтинг: 0 / 0
10.03.2017, 19:33
    #39417205
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
спасибо за асинк. по ходу то, что надо. сделал метод асинк, возвращающий футуру.

цель была распарсить большой документ. сделал через мап-редьюс, разбив на куски, раздав куски на разные потоки, потом собрав всё в кучу. не уверен впрочем, что правильно. но вроде пашет :)
...
Рейтинг: 0 / 0
10.03.2017, 21:00
    #39417221
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
natanabrahamjrспасибо за асинк. по ходу то, что надо)
Тоже некогда читать мануал? Привёл же ссылку.
...
Рейтинг: 0 / 0
10.03.2017, 23:10
    #39417231
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
Blazkowicz,

не... оказывается не работает. тупо игнорирует транзакшнл вообще. если делаю через асинк - то вообще к базе доступа нету. никакого. ни с транзакцией ни без. если через екзекутор без асинка - то хоть без транзакций доступ есть.

навешивать аннотации транзакшнл - бесполезно.
...
Рейтинг: 0 / 0
10.03.2017, 23:25
    #39417237
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
Blazkowicznatanabrahamjrспасибо за асинк. по ходу то, что надо)
Тоже некогда читать мануал? Привёл же ссылку.
так нет там ничего про асинк и транзакшнл. я конечно могу поднять персистанз контекст и всё такое. но мне кажется что это через чур.
...
Рейтинг: 0 / 0
11.03.2017, 00:10
    #39417253
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
34.4.3 The @Async annotation
...
Рейтинг: 0 / 0
11.03.2017, 10:16
    #39417297
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
...
Рейтинг: 0 / 0
11.03.2017, 10:35
    #39417298
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
natanabrahamjr,
Похоже тут решали вашу проблему
https://m.habrahabr.ru/post/228953/
...
Рейтинг: 0 / 0
11.03.2017, 13:06
    #39417325
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
questionernatanabrahamjr,
Похоже тут решали вашу проблему
https://m.habrahabr.ru/post/228953/

да... там в общем то то, что я уже делал. я и так могу открыть через контекст.. но это ужас получается, и вообще шиворот на выворот..

сейчас в общем-то пришел к тому, от чего ушел - при асинк доступ к базе есть. ставлю аннотацию транзакшнл - вообще всё работать перестает. пишет ошибка скл запроса не может найти таблицу.

конечно по особому счету есть два пути это обойти - сделать игер на нужных полях, тупо сделать запрос с другой стороны, или через контекст обращаться. но все три пути рушат архитектуру и делают код страшным...

продолжаю копать..
...
Рейтинг: 0 / 0
11.03.2017, 13:14
    #39417326
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
говорит вот это:

авторjava.util.concurrent.ExecutionException: org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSe

происходит только когда есть анноташка асинк+транзакшнл. если либо то либо то - то всё раотает :)
...
Рейтинг: 0 / 0
11.03.2017, 13:25
    #39417328
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
natanabrahamjrпродолжаю копать..
у вас документ такой большой что не вобрать его в оперативку и потом парсить?
Зачем вообще транзакции от СУБД + асинхронка?
...
Рейтинг: 0 / 0
11.03.2017, 14:40
    #39417348
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
Petro123natanabrahamjrпродолжаю копать..
у вас документ такой большой что не вобрать его в оперативку и потом парсить?
Зачем вообще транзакции от СУБД + асинхронка?
у меня локально не большой. а на проде большой. заказчик так хочет подстраховаться - резать документ на части и обсчитывать по частям - этакий мап-редьюс. на самом деле, сейчас загвоздка в том, что я считываю объект с базы, а в нем есть лейзи связь на другой. и именно она всё ложит.

...сделал как на хабре. зараза. не хочет. как только добавляю транзакшн темплейт-екзекьют - всё ломается. :) аннотация транзакшнл делает тоже самое.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
   @Autowired
    protected PlatformTransactionManager transactionManager;

    @Async
    public Future<String> parseDocument(List<Payment> payments, String countryCode) {
        final TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
        StringBuilder sb = new StringBuilder();
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus status) {



варианты воркэраунда есть. но хочу сделать по-человечески.
...
Рейтинг: 0 / 0
11.03.2017, 15:47
    #39417361
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
natanabrahamjrзаказчик так хочет подстраховаться - резать документ на части и обсчитывать по частям - этакий мап-редьюс. на самом деле,
мап-редьюс почитал концепцию - первый главный узел режет на куски задачу и решает проблему с вашими ссылками между кусков докумта.
Чудес не бывает. Либо качаете всё в оперативку (жёсткий твёрдоцельный диск) и отдаёте куски на обработку.
Либо блокируете документа на изменение (снимок) и опять спокойно парсите.
Причём при снимке плевать на то сколько у вас там транзакций. Они все только читают.
....
Может вам тип БД тогда пересматривать? Под такие БОЛЬШИЕ документы "Вики-подобные".
...
Рейтинг: 0 / 0
11.03.2017, 15:49
    #39417362
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
natanabrahamjrно хочу сделать по-человечески.
"по человечески" - это когда заказчик может понять концепцию простыми словами в ворд файле на A4))
...
Рейтинг: 0 / 0
11.03.2017, 17:06
    #39417380
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
Это все понятно что можно и так и сяк. Вопрос все же как сделать транзакции в потоке.. не может же быть что так никто не делает.
...
Рейтинг: 0 / 0
11.03.2017, 19:04
    #39417400
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
natanabrahamjrтранзакции в потоке.. не может же быть что так никто не делает.
в поток передают потокозащищённый объект Connection (драйвера) и продолжают в той же транзакции.
Либо создают новый объект и стартуют новую.
А так ты IMHO переключаешь клавиши спринга как баловство пока не заработает.
Удачи!
...
Рейтинг: 0 / 0
11.03.2017, 22:49
    #39417441
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
Petro123natanabrahamjrтранзакции в потоке.. не может же быть что так никто не делает.
в поток передают потокозащищённый объект Connection (драйвера) и продолжают в той же транзакции.
Либо создают новый объект и стартуют новую.
А так ты IMHO переключаешь клавиши спринга как баловство пока не заработает.
Удачи!
возможно и так, но что делать то? не поднимать же внутри потока всю требуху, которую поднимаешь в спринге? ...или поднимать? просто если второй вариант, то преимущества потоков тупо пропадают..

у меня например, была как то задачка, клиент дергает ендпойнт, по нему инициируется процесс сохранения сотни тысяч уникальных объектов в базу. т.е. в рамках сессии клиента это сделать тупо нереально от слова совсем. я делал это ессно параллельным потоком, выкладывал в базу эту сотню тысяч объектов. но там как то без транзакций обходился. тупо через репозиторий сейв и до свидания.
...
Рейтинг: 0 / 0
12.03.2017, 00:36
    #39417485
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
natanabrahamjr,
так что там с п.п. 34.4.3 от Blazkowicz?
...
Рейтинг: 0 / 0
12.03.2017, 11:18
    #39417540
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
Petro123,

у меня метод находится в другом классе, возвращает футуру.. сделал всё правильно. собссно, вы о чем?
...
Рейтинг: 0 / 0
12.03.2017, 11:35
    #39417543
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
я вот одного понять ен могу почему ни у кого проблема эта толком не возникала? а) - так никто не делает. б) - я что-то совсем уж делаю не так
...
Рейтинг: 0 / 0
12.03.2017, 11:55
    #39417555
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
natanabrahamjrсобссно, вы о чем?
начни топик заново.
Я о том что Blazkowicz вроде решил твою проблему.
Ни у кого твоей проблемы нет)))) LOL
...
Рейтинг: 0 / 0
12.03.2017, 11:55
    #39417556
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Spring Transaction
natanabrahamjr,
и не забудь, что у профи выходные).
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate Spring Transaction / 25 сообщений из 49, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]