|
|
|
SingleThreadModel деприкайт
|
|||
|---|---|---|---|
|
#18+
Уважаемые господа (товарищи)!!! Вот объясните пролетариату вот такую вещь. В старых спецификациях servlet, имелся многопотоковый режим работы и монопотоковый режим (ну если не реализовать или реализовать интерфейс SingleThreadModel). У меня в старых прогах множество сервлтов релизованы с "расширением" SingleThreadModel, так как требовалось чтобы некоторые операции были "атомарными" и еще параллельно выполняемы. Подход "synchronized" методов не канает, так как возникнит "цепочка" операции, от которой пострадает производительность системы.... В итоге с какой коцепцией сейчас руководствоваться, чтобы организовать параллельную обработку и при этом не было пересечений (я про атомарные операции)? Спасибо, за Ваши комментарии!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2006, 12:20:53 |
|
||
|
SingleThreadModel деприкайт
|
|||
|---|---|---|---|
|
#18+
Через стандартные методы синхронизации в Java: synchronized, java.util.concurrent и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2006, 15:23:20 |
|
||
|
SingleThreadModel деприкайт
|
|||
|---|---|---|---|
|
#18+
synchronized - будет последовательность, потеря производительности системы.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 13:43:26 |
|
||
|
SingleThreadModel деприкайт
|
|||
|---|---|---|---|
|
#18+
вот с SingleThreadModel у вас будет потеря производительности, а с грамотным использованием синхронизации не такая уж и большая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 13:46:44 |
|
||
|
SingleThreadModel деприкайт
|
|||
|---|---|---|---|
|
#18+
Вот объясните тупому, как да чего. Имеется сервлет (для упрощения изложения буду использовать реализацию веб компоновки model1 (не MVC)). Для реализации моей задачи имеется SERVLET+JNDI+ORACLE. Для формирования отчета происходит 2 операции в БД, это выглядит примерно так -------------------- Service { коннект = getConnection(JNDI-ресурс)…. Операция №1……. (производим insert-ы)…. Операция №2 …….(выполняем select)….. Коннект.сlose()…. } -------------------- Операции №1 и №2 должны выполниться в рамках одной сессии с БД, т.е. между этими операциями никто не смог «пролезть», т.е. необходимо их выполнить в рамках одной транзакции. На сколько я понимаю (если ошибаюсь поправьте мои мысли), для снижения времени коннекта с БД с помощью JNDI (с фабрикой «oracle.jdbc.pool.OracleDataSourceFactory" ) создается пул сессии и при раздачи коннектов из пула берется не «активный» коннект. Ну и теперь в моей тупой голове парадокс. Нужно ли синхронизировать операции №1 и №2 или система обеспечит единый не пересекающее сессионное пространство с БД? По идеи я коннект из пула забрал и не вернул его обратно в пул (методом close()), по идеи если другой процесс захочет произвести аналогичную операцию, он возьмет другой коннект с БД…. Короче что-то в моей голове неразбериха. Если можете помогите встать на путь истинный …. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2006, 13:00:08 |
|
||
|
SingleThreadModel деприкайт
|
|||
|---|---|---|---|
|
#18+
Сейчас реализовано вот так --- init { получение ссылки на JNDI - ресурс } service { ...getConection().... synchronized { операция №1... операция № 2 } .... трали вали connection.close(); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2006, 13:15:08 |
|
||
|
SingleThreadModel деприкайт
|
|||
|---|---|---|---|
|
#18+
Или я неправильно понял вашу мысль, или если вам нужна атомарность запроса к базе данных, то это делается через batch-запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2006, 15:38:41 |
|
||
|
SingleThreadModel деприкайт
|
|||
|---|---|---|---|
|
#18+
Естественно я упоковываю фразы "insert" в батч пакет ..... Операция №1 String[] ss = basket_temp.getStringKeys(); PreparedStatement ps = conn.prepareStatement("insert into t001_007_ (f01) values (?)"); ((OraclePreparedStatement)ps).setExecuteBatch (count_param); for (int i=0;i<count_param;i++ ) { ps.setString(1,"ss "); ps.executeUpdate(); } ((OraclePreparedStatement)ps).sendBatch(); ....... Оперция №2 String sql ="select * from что-то"; rset = stmt.executeQuery(sql); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2006, 16:05:01 |
|
||
|
SingleThreadModel деприкайт
|
|||
|---|---|---|---|
|
#18+
Ну... народ ну где же ваши комментарии... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 11:23:20 |
|
||
|
SingleThreadModel деприкайт
|
|||
|---|---|---|---|
|
#18+
Ну может что подскажем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 14:43:58 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34170614&tid=2147298]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
198ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 474ms |

| 0 / 0 |
