Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> synchronize 
:(
    Опции темы
DEMOVERSION
Дата 28.10.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.10.2005

Репутация: нет
Всего: 1



Скажите правильно ли зделана synchronize-ция? Надо ли мне вообше ее? Надо синхронизуровать всю ф-цию?
Спасибо!

Код

public boolean deleteClass(int classID) {
     int result = 0;
     String  sql = "DELETE FROM ObjectValues Where ObjectRef IN (SELECT Object.ID FROM Object Where Object.classRef = " + classID + ");";
      result = executeUpdateSQL(sql);
             sql = "DELETE FROM Object Where Object.classRef = " + classID + ";";
      result += executeUpdateSQL(sql);
             sql = "DELETE FROM ClassAttributes Where classRef = " + classID + ";";
      result += executeUpdateSQL(sql);
             sql = "DELETE FROM Class Where ID = " + classID + ";";
      result += executeUpdateSQL(sql);
      commit("deleteClass");
     System.out.println("Deleted class " + result);
     return result!=0;
    }
public synchronized int executeUpdateSQL(String sql) {
        int result = 0;
        Connection cConnection = null;
        Statement sStatement = null;
        try {
        cConnection = getConnection();
        sStatement = cConnection.createStatement();
        result = sStatement.executeUpdate(sql);
        if (sStatement!=null)
        sStatement.close();
        sStatement = null;
        if (cConnection!=null)
        cConnection.close();
        cConnection = null;
        }
        catch (SQLException ex) {
            System.out.println(getConstantByName("dataBaseExecuteSQL") + sql);
            result = 0;
            ex.printStackTrace();
        }
        finally {
            try {
            if (sStatement!=null) sStatement.close();
            if (cConnection!=null) cConnection.close();
            }
            catch (SQLException ex) {
                System.out.println("Can't close Statement,Connection. [executeUpdateSQL]");
                ex.printStackTrace();
        }
       }
        return result;
    }

PM MAIL   Вверх
AntonSaburov
Дата 28.10.2005, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



По идее все верно, только непонятно зачем. Если уж кто-то удалил, то второй запрос на удаление с тем же ИД просто ничего не удалит. Да и в случае использования SQL о целостности данных будет он заботится - незачем дергаться.
PM MAIL WWW ICQ   Вверх
Souljah
Дата 28.10.2005, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 24.12.2004

Репутация: нет
Всего: 7



имхо тут синхронизация вообще не нужна - ни один из приведенных методов не меняет состояние класса (поля)
PM MAIL   Вверх
pvo
Дата 28.10.2005, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.10.2005
Где: Мск

Репутация: 2
Всего: 7



DEMOVERSION
Насчет синхронизации - вроде она не нужна.

И вопрос насчет работы с базой - она транзакции поддерживает? Если да, то приведенный код странный.
PM MAIL ICQ   Вверх
val
Дата 28.10.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: нет
Всего: 7



Практически у любой современной базы данных все запросы к ней являются синхронизированными. Так что можно и не мучится, но идеологически все верно.


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
anonymouse
Дата 28.10.2005, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 18.8.2004

Репутация: нет
Всего: 1



А я как обычно че-то не понял. Зачем синхронизовать если ети методы вызываются по порядку ? Синхронизация нужна только если метод будет вызываться из разных потоков.По этому идеологически это как раз написано не правильно.

--------------------
Много чего интересного...
PM MAIL   Вверх
Souljah
Дата 28.10.2005, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 24.12.2004

Репутация: нет
Всего: 7



почему идеологически верно?
executeUpdateSQL не меняет состояние класса, у переменных scope - метод, они существуют только в контексте конкретного потока.
зачем синхронизировать?
PM MAIL   Вверх
AntonSaburov
Дата 28.10.2005, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(Souljah @ 28.10.2005, 17:38)
почему идеологически верно?

Идеологически не верно, здесь это не надо. Я имел в виду, что так конечно можно, только это напоминает в Москву из Питера через Одессу.
PM MAIL WWW ICQ   Вверх
DEMOVERSION
Дата 2.11.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.10.2005

Репутация: нет
Всего: 1



Код может и не идеальный но я к етому двигаюсь.
Я хочу немного добавить - ети ф-ции, ето часть веб-програмы(JSP)!!!! Просто з не знаю как будет работать если useroff будет много. БД - Access.
Что будет если я буду редактировать а кто-то другой будет удалять даные из таблици?

PS: в примере было только удаление, а еше есть add, remove, edit. All uses updateSQL function.

Это сообщение отредактировал(а) DEMOVERSION - 2.11.2005, 14:05
PM MAIL   Вверх
corewithin
Дата 2.11.2005, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 1.11.2005

Репутация: нет
Всего: 1



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

в случае клиент-сервер приложения обязательна синхронизация на серверной стороне...
PM MAIL   Вверх
Stampede
Дата 2.11.2005, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 24
Всего: 144



Цитата(DEMOVERSION @ 2.11.2005, 14:02)
Просто з не знаю как будет работать если useroff будет много


Много - это скока?

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

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

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



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
pvo
Дата 3.11.2005, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.10.2005
Где: Мск

Репутация: 2
Всего: 7



Цитата(Stampede @ 2.11.2005, 20:09)
что каждый запрос будет отрабатываться без тормозов


В целом согласен. Но:

1. Все-таки речь должна идти не о тысячах запрсов в секунду ... Интереса ради попробовал выполнить простой update (изменение одной строки в таблице, кот. имеет 2 индекса и содержит около 50 записей) на локальном Firebird - вместе с коммитом операция заняла от 20ms до 100ms. При работе с удаленной базой время увеличится - будет, скорее всего, от 100ms. ИМХО, тут стоит говорить о максимум 10-20 запросах в секунду.

2. синхронизация методов доступа к базе не спасет, если вдруг захочется запустить приложение в кластере. Или один и тот же код работает в 2 разных веб приложениях.



Это сообщение отредактировал(а) pvo - 3.11.2005, 00:59
PM MAIL ICQ   Вверх
Stampede
Дата 3.11.2005, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 24
Всего: 144



pvo, в соседнем топике идет обсуждение похожей темы. Поскольку мы в данном случае говорим не столько об использовании Java-примитивов синхронизации, сколько о вполне конкретной задаче синхронизации кода сервлетов/JSP (каковой вопрос выходит далеко за рамки просто синхронизации потоков), то я предлагаю продолжить обсуждение в подфоруме J2EE, тема JSP отдельная страничка - отдельный объект?.

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.