|
|
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
rdmBlazkowicz, я нагуглил статью 2004 года. Сайт хороший. Там про транзакции в Spring отличная статья. Но вам бы я рекомендовал reference читать по свежим версиям. Он на столько подробный сто статьи особо не нужны. rdmСобственно не понял как синглтон без состояния может безопасно использоваться разными потоками, ну да ладно) главное работает) Ответственность лежит на девелопере. Точно так же как у сервлетов. Поля лучше не использовать, без соответствующей синхронизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 13:30 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Ещё Flash Scope просили глобально добавить. Но вроде только в web сделали. https://jira.springsource.org/browse/SPR-6464 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 13:35 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, они ту статью с сайта ibm скопировали) Если вы эту имеете в виду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 13:38 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Petro123silvan, ну да. Надо аффтару привести более конкретный код с ПРОБЛЕМОЙ. imho в вопросе намешаны несколько вопросов. Потокобезопасные объекты\сингелетоны\DAO\Хибер. Каждый элемент можно написать потокоустойчивым и нет. Безотносительно DI. Хороший вопрос . Хочется для себя прочснить раз и навсегда как же все это работает в описаных вариантах Раскройте пожалуйста про потокобезопасные объекты/синглетоны /dao/хибер Верно чтов спринге у управляемого контейнером компонента вообще не должно быть в полях класса ссылок на объекты с изменяемым состоянием. Все такие объекты должны создаваться и использоваться как локальные переменные методов. Это действительно защищает от ошибок, но очень напоминает процедурное программирование. Тогда даже при моделе спринга с одним экземплярлм класса два потока одновременно исполяя один и тот же метод буду иметь каждый свой набор локальных переменных данного метода.Фактически это своя копия тела метода?! Это же верно и для метода с ключевым словом static !? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 10:58 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Atum1 Верно чтов спринге у управляемого контейнером компонента вообще не должно быть в полях класса ссылок на объекты с изменяемым состоянием. Нет, не верно. Сильно зависит от Scope. Так же надо понимать как именно состояние используется разными потоками, если речь о многопоточном сервере. Atum1 Все такие объекты должны создаваться и использоваться как локальные переменные методов. Какие "такие"? Atum1Это действительно защищает от ошибок, но очень напоминает процедурное программирование. Темы OOP и хранения состояния слабо связаны. Кажется что вы нащупали проблему Anemic Domain Model, но не можете её осознать. Постарайтесь обнаружить более точные критерии, что именно вас напрягает в коде. И сформулировать это конкретными терминами, а не "кажется", "похоже" и "возможно". Про Anemic Model первым начал писать Фаулер. Много интересного можно подчерпнуть и на rsdn.ru в форуме Архитектуры по этой теме. Atum1Тогда даже при моделе спринга с одним экземплярлм класса два потока одновременно исполяя один и тот же метод буду иметь каждый свой набор локальных переменных данного метода.Фактически это своя копия тела метода?! Ну, что значит "своя копия". Есть локальные переменные. Они хранятся на стэке. У каждого потока свой стэк. Atum1Это же верно и для метода с ключевым словом static !? Это всё немного паралельно вопросу static. Мысли все в верном направлении, но стоит ознакомиться с терминологией и более конкретно задавать вопросы. Anemic Model, coupling, cohesion это первое с чем бы я порекомендовал разобраться. После этого можно будет говорить уже более предметно. Ну, и можно было новую тему создавать, а не некропостить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 11:34 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Atum1, я бы ответил, что можно использовать один объект, если использующие его методы не изменяют его. Например в классе @Service можно использовать простое поле private String blabla если методы не будут его менять, а только читать. Присвоить ему значение можно в методе @PostConstruct. Например библиотеки логгирования, добавляется одно поле (private static final Logger log) на весь класс и используется всеми метода сервиса сразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 12:40 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Atum1но очень напоминает процедурное программирование. смотри шире. Модель веб - публичный сервер-код для много-много клиентов. Для упрощения масштабирования и чтобы он не падал, вводится контейнер и много-много потоков. Значит куски кода должны быть слабосвязаны между собой. Что мы и наблюдаем - а ля процедурное программирование. Все связи между классами и временем жизни заменяют конфиги и DI. ..... В десктопе (клиент-сервере) совершенно всё наоборот т.к. нет предпосылки выше. Так что imho лучше знать оба метода кодирования). Т.е. синглтон не забывать))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 12:57 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Petro123 , Ничего не понял :-) Каким образом наличие контейнера и "многих потоков" может сделать так, что бы "он не падал"? К отказоустойчивости это вообще никакого отношения не имеет. И Спринг так же ни к отказоустойчивости, ни к масштабируемости не имеет ровно никакого отношения. Спринг - это просто удобный способ проставить зависимости между объектами. Так же, он никак не реламентирует, может ли у объекта быть состояние или нет. Хотите - делайте состояние. Не хотите - делайте stateless. Хотите - делайте синглтон, хотите - много инстансов. Спринг никак не подталкивает вас к тому или иному решению по дизайну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 13:27 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
cdtyjv, - "не падал" значит - сервер откликается на запросы. Это обеспечивает контейнер за счёт потоков. Логично? - я про отказоустойчивость не говорил. И про спринг не говорил. Я говорил про синглтон. Вы его давно писали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 13:36 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Petro123, Ок! тогда по порядку на простых примерах и так есть обычный такой servlet в него делаем @Injection private MyClass myClass; ( если просто создать private MyClass myClass = new MyClass() - то это будет .... что это будет ?! к примеру потоко незащищенный , разделяемый всеми тредами -> всеми пользователями некоторый ресурс ) - опять очень большая абстракция. Пусть MyClass Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. в сервлете в doGet() идет вызов методов doSomethingStatic и doSomething если в методах мы не используем значения полей класса MyClass - то при передаче параметра мы для каждого потока должны получить свое значение - ситуации когда один пользователь послал параметр а получил значение которое должен был получить второй пользователь - в такой ситуации невозможна ?! так ??? почему так ? потому что для каждого вызова - свой стек и свой набор переменных ?!. теперь добавляем в тело методом - операции с переменной класса counter ? и вот тут начинается .... что начинается? Как с этим бороться ? как этого избежать .... ( synchronized ? cas ? ) Это первая часть вопроса ... вторая будет уже по технологии и по спрингу - вот у нас есть Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. создали private SessionFactory sessionFactory; - каким образом он создается , он будет один ? что из себя будет представлять ? далее вопрос - как влияет на код @Transactional если ее не будет. а если мы будем вызывать процедуру то вопросы те же... про одновременный вызов двух пользователей. получит один из них мусор или нет. (мой ответ получит мусор , без аннотации , проверил )... почему пришел мусор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 17:41 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Atum1, Процедуру я имел ввиду вызов некой процедуры в базе данных call ? allCompany (?,?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 17:45 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Думаю секрет в ThreadLocal context ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 17:56 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
rdm, о спасибо, напомнили про ThreadLocal - насколько я помню - он нужен в тех случаях когда нужно чтобы у потока был свой экземпляр переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 18:18 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Atum1он нужен в тех случаях когда нужно чтобы у потока был свой экземпляр переменной это всегда нужно при работе с потоками. Так сказать обратная сторона медали наших замечательных потоков. (был тут топик на эту тему) Atum1(мой ответ получит мусор , без аннотации , проверил )... почему пришел мусор? где мусор? Приведи минимальный код с этим мусором. ЗЫ. Если говорить про объект сессии хибера, то он потокобезопасен. Уж так написан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 21:37 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Atum1 , У вас как-то в кучу все смешалось :-) Хотите понять многопоточность - задавайте конкретные вопросы по многопоточности, поможем. Хотите понять сколько инстансов того или бина будет создано, что такое Transactional, и т.д. - документация вам в помощь. Почитали, попробовали, что-то поняли, что-то не поняли. Что не поняли - спросили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2014, 12:05 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Petro123- "не падал" значит - сервер откликается на запросы. Это обеспечивает контейнер за счёт потоков. Логично?Ни разу. То, что контейнер "прячет многопоточность" ни разу не мешает создавать кривой код. У нас был живой пример. Но NDA. Но был. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 17:19 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Если ты про руки программиста, то я не о них. Я о депрекатед однопоточной модели в сервлет 2.4 вроде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 17:38 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Petro123Если ты про руки программиста, то я не о нихА я - о них. Можно выдать на гора вполне работоспособный на стенде код, который вообще не пригоден к реальной жизни.Я о депрекатед однопоточной модели в сервлет 2.4 вроде.Ну была возможность декларативно аннулировать многопоточность. Потом подумали, что смысла - ноль и возможность отменили. И что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 17:48 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, а смотри ниже ...очень тонкий юмор: авторВ какой-то момент в Sun сочли такой подход неудачным. В самом деле, гораздо эффективнее отдать синхронизацию разработчику. Он во всяком случае знает, какие блоки действительно нужно синхронизировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 18:24 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38539480&tid=2127751]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
210ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 510ms |

| 0 / 0 |
