powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Объединение sql запросов в один класс - упрощение (Обновлено)
25 сообщений из 79, страница 3 из 4
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632428
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,

Ваша проблема это следствие того что вы берете Connection из DataSource в одном месте, а закрываете совершенно в другом. Хороший код должен следовать правилу - взял, закрыл в этом же методе в блоке finally:

Код: java
1.
2.
3.
try(Connection c = dataSource.getConnection()) {
   doMyQueries(c);
}



У вас этого нет.

DataSource у вас один единственный. А вы его зачем-то помещаете в кучу разных переменных без особой на то надобности. И соответсвенно путаетесь.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632432
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopЯ сейчас все переделываю.
А вот если бы инфраструктура работы с БД была бы отделена от бизнес-транзакций, то переделывали бы только инфрастуктуру а не всё.

- Вы можете методы своего Server выделить в интерфейс?
- Вы можете написать Proxy с этим интерфейсом, так чтобы InvocationHandler, который бы для всех таких методов создавал Database, потом делегировал бы вызов настоящему объекту Server, и после этого бы уже закрывал ваш Database?
- Вы можете передать Database из InvocationHanlder-а в Server через параметры или ThreadLocal?
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632433
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopСессия разрушается через 30 минут бездействия.
это параметр и его можно менять самому.
TsyklopЕсли юзер зашел на страницу а сессии нет
нет. Сессия всегда есть. Только будет новая и в сесии не будет объекта User

TsyklopДаже если сессия есть то все равно выполняется проверка хэша авторизации который в куках
я спросил зачем тебе DAO который работает с базой!!!!!
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632437
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopТо бишь для каждого объекта брался свой коннекшн из пула - это не есть правильно.
кто сказал такую ересь?
У MS рекомендации - на одну форму-окно один коннект.
Т.е. если 5 форм висят в памяти то будет 5 коннектов.
И нет проблем.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632439
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopТо бишь для каждого объекта брался свой коннекшн из пула - это не есть правильно
попытайся обосновать почему это не правильно
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632440
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наконец то мы добрались до сути всех топиков Tsyklop.
У него было 3 коннекта на 3 класса и он решил что это непорядок. Надо объединить 3 класса.
Перфекционист - что возьмёшь))
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632441
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123TsyklopСессия разрушается через 30 минут бездействия.
это параметр и его можно менять самому.причём менять динамически в коде, продлять на некоторое время, к примеру 5мин, и можно поставить слушатель окончания сессии - если сессия закончилась на сервере - с помощью ws послать сообщение клиенту(браузеру) и он перейдёт на страницу входа. т.е. скроет от посторонних всё что юзер делал.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632444
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
разумеется. Ты видишь его фильтр выше который вызывается на каждый F5 странички.
Разве не видно, что нафига там запрос в базу. Это ведь тормоза!
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632448
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123У него было 3 коннекта на 3 класса и он решил что это непорядок
просто каша в голове от всего на свете, плюс отсутствие минимальных базовых знаний. Это нормально. Ненормально упрямство и нежелание вникнуть в советы. Могу только присоединиться к совету о прочтении книжек Мартина и Фаулера.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632451
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaНенормально упрямство и нежелание вникнуть в советы
по моему опыту, упрямцы такого рода (задиристые) не становятся профи в программистах.
Удачи аффтару!
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632478
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopПроверить реально ли юзер авторизован. Сессия разрушается через 30 минут бездействия. Если юзер зашел на страницу а сессии нет то нужно проверить юзера и заполнить объект данными. Даже если сессия есть то все равно выполняется проверка хэша авторизации который в куках. Если юзер не авторизован или хэш не валидный его выбрасывает на главную.

Прошу прощения, но зачем?!
Чем вам стандартные библиотеки/фреймворки/приложения не угодили?
Тем более стандартный сервер приложений/сервлетов все это умеет "из коробки"
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632481
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulПрошу прощения, но зачем?!
Чем вам стандартные библиотеки/фреймворки/приложения не угодили?
ему некогда с ними разбираться


ТС - теперь ты видишь, к чему приводят повторы? Страниц столько же, одни и те же вопросы обсасываются снова и снова
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632507
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mad_nazgulПрошу прощения, но зачем?!
Чем вам стандартные библиотеки/фреймворки/приложения не угодили?
Тем более стандартный сервер приложений/сервлетов все это умеет "из коробки"

читайте первый пост темы. Там я об этом написал.

Что он умеет из коробки? проверить если ли юзер в бд? проверить авторизован ли он? и т.д. Если реально такое есть, без фреймворков, то покажите пожалуйста. очень интересно.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632508
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpashaPetro123У него было 3 коннекта на 3 класса и он решил что это непорядок
просто каша в голове от всего на свете, плюс отсутствие минимальных базовых знаний. Это нормально. Ненормально упрямство и нежелание вникнуть в советы. Могу только присоединиться к совету о прочтении книжек Мартина и Фаулера.

Каких базовых знаний не хватает? огласите список пожалуйста.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632515
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczTsyklopЯ сейчас все переделываю.
А вот если бы инфраструктура работы с БД была бы отделена от бизнес-транзакций, то переделывали бы только инфрастуктуру а не всё.

- Вы можете методы своего Server выделить в интерфейс?
- Вы можете написать Proxy с этим интерфейсом, так чтобы InvocationHandler, который бы для всех таких методов создавал Database, потом делегировал бы вызов настоящему объекту Server, и после этого бы уже закрывал ваш Database?
- Вы можете передать Database из InvocationHanlder-а в Server через параметры или ThreadLocal?

в Server нет методов. это просто контроллер который передаёт запрос в модель - то бишь создает объект модели и передаёт в неё все данные.

Вот мой Server:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
@WebServlet(name = "WebServer", urlPatterns = {"/Server/*"})
public class WebServer extends HttpServlet {

    private static final Logger LOGGER = LogManager.getLogger(WebServer.class);

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        WebRequest UTILS = null;
        WebSession SESSION = null;

        Answer answer = new Answer();

        try {

            UTILS = new WebRequest(request, response);

            SESSION = UTILS.getSession();

                switch (UTILS.getCmd(1)) {
                    case Core.CONTROLLER_USER:
                        answer.setAnswer(Controller.user(answer, UTILS));
                        break;
                    case Core.CONTROLLER_CHAT:
                        answer.setAnswer(Controller.chat(answer, UTILS));
                        break;
                    default:
                        answer.setError(DEFAULT_MESSAGE_404);
                        break;
                }

        } catch (Exception e) {
            answer.setError(DEFAULT_MESSAGE_SERVER_ERROR);
            LOGGER.error("SERVER ERROR", e);
        }

        response.getWriter().write(answer.toString());
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}



Controller:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
public class Controller {

    private static final Logger LOGGER = LogManager.getLogger(Controller.class);

    public static Answer user(Answer answer, WebRequest utils) {

            try {

                UserModel model = new UserModel(utils, answer);

                if (model.isReady()) {
                    if(model.getUser().getDeviceType().isWeb() || model.getUser().getDeviceType().isMobile()) {
                        switch (utils.getCmd(2)) {
                            case "login":
                                answer.setAnswer(model.execute(UserAction.ACTION_LOGIN));
                                break;
                            case "register":
                                answer.setAnswer(model.execute(UserAction.ACTION_REGISTER));
                                break;
                            case "logout":
                                answer.setAnswer(model.execute(UserAction.ACTION_LOGOUT));
                                break;
                            ...
                            default:
                                answer.setError(DEFAULT_MESSAGE_404);
                                break;
                        }
                    } else {
                        answer.setError("Доступ запрещен. Код deviceType");
                    }
                } else {
                    answer.setAnswer(model.getAnswer());
                }
            } catch (SQLException e) {
                LOGGER.error("ERROR", e);
                answer.setError("Ошибка базы данных. Попробуйте позже");
            } catch (ParseException e) {
                LOGGER.error("ERROR", e);
                answer.setError("Ошибка базы данных. Попробуйте позже");
            } catch (Exception e) {
                LOGGER.error("ERROR", e);
                answer.setError(DEFAULT_MESSAGE_ERROR);
            }

        return answer;
    }

    public static Answer chat(Answer answer, WebRequest utils) {

       
            try {

                ChatModel model = new ChatModel(utils, answer);

                if (model.isReady()) {

                    switch (utils.getCmd(2)) {
                        case "login":
                            answer.setAnswer(model.execute(ChatAction.LOGIN));
                            break;
                         ...
                        default:
                            answer.setError(DEFAULT_MESSAGE_404);
                            break;
                    }

                } else {
                    answer.setAnswer(model.getAnswer());
                }

            } catch (Exception e) {
                LOGGER.error("ERROR", e);
                answer.setError(DEFAULT_MESSAGE_ERROR);
            }

        return answer;

    }

}



Далее все передаётся в модель. Пример метода login:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
private void login() throws Exception {
        if (!getUser().getAuth().isAuth() && (getUser().getDeviceType().isWeb() || getUser().getDeviceType().isMobile())) {

            ValidateUser validateUser = new ValidateUser(getAnswer(), getUser());

            validateUser.validateLogin(getUtils().getParam("email"), getUtils().getParam("password"));

            if (validateUser.isValid()) {

                getUser().setPassword(getHashes().hashPassword(getUser().getEmail(), getUser().getPassword()));

                getUser().update(getDbUser().getUserFullInfo(getUser().getEmail(), getUser().getPassword()));

                if (getUser().getId() > 0) {

                    if (getDbUser().checkUserConfirm(getUser().getId(), getUser().getEmail())) {

                        getUser().setHash(getHashes().generate(150));

                        if (getUser().getDeviceType().isWeb() || (getUser().getDeviceType().isMobile() && (getUser().isAdmin() || getUser().isOperator()))) {

                            if (getDbUser().addAuth(getUser().getId(), getUtils().getClientIpAddress(), getUser().getHash(), getCurrentDate(), TIME_FORMAT.format(Calendar.getInstance().getTime()))) {

                                getUser().getAuth().setAuth();

                                if (getUser().getDeviceType().isMobile()) {
                                    getAnswer().add("token", getUser().getHash());
                                    getAnswer().add("data", getUser().toString());
                                } else {
                                    getCookies().create("/", Core.NAME_USER_HASH, getUser().getHash(), COOKIES_AGE_MONTH);
                                }

                                getAnswer().setSuccess("Вы успешно авторизовались");

                            } else {
                                getAnswer().setError("Ошибка авторизации. Попробуйте позже");
                            }
                        } else {
                            getAnswer().setError("Нет доступа к этой операции");
                        }
                    } else {

                        ConfirmRegister cr = new ConfirmRegister(getUser().getId(), getDbUser().getConfirmRegisterToken(getUser().getId()), getUtils().getDomain());

                        getEmailSender().send("Подтверждение регистрации",
                                new MailBuilder(getGlobal().getHtml((getUser().isAdmin() ? "admin" : getUser().isOperator() ? "operator" : "user") + "-registration"))
                                        .replace("fullName", getUser().getFullName())
                                        .replace("url", cr.toString()).build()
                                , getUser().getEmail());

                        getAnswer().setError("Подтвердите Ваш E-Mail. Письмо выслано на Вашу почту.");
                    }

                } else {
                    getAnswer().setError("E-Mail или пароль не верны");
                }

            } else {
                getAnswer().setAnswer(validateUser.getAnswer());
            }

        } else {
            getAnswer().setError("Нет доступа или вы уже авторизованы");
        }
    }
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632520
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopКаких базовых знаний не хватает? огласите список пожалуйста
как писать хороший код (Clean code , Robert Martin) и как организовывать архитектуру приложения (Patterns of Enterprise Application Architecture, Martin Fowler) . Наверное имеет смысл именно в таком порядке
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632543
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123У MS рекомендации - на одну форму-окно один коннект.
Т.е. если 5 форм висят в памяти то будет 5 коннектов.
И нет проблем.
В формах работают по-очереди. А здесь 3 класса могут сохранять все одновременно - если будут 3 разных коннекта, они не будут видеть изменений сделанных из 2-х других классов, при должном умении можно самого себя задедлочить, не ясно как передавать FK между ними и в каком порядке коммитить эти транзакции чтобы не упасть, а самое главное нельзя будет реализовать транзакционное изменение данных хотя бы 2-мя этими классами, если данные меняются ими 2-мя без распределенных транзакций.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632545
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркВ формах работают по-очереди.это что то новое.
Расшифруйте что за очередь? ГУИ?
Дак могут и потоки быть.

Локшин МаркА здесь 3 класса могут сохранять все одновременно - если будут 3 разных коннекта, они не будут видеть изменений сделанных из 2-х других классов
конечно. Т.к. у него рукописный ОРМ. Зачем?
Вместо ОРМ всё пустить в один ворота-коннект?
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632548
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Маркесли будут 3 разных коннекта, они не будут видеть изменений сделанных из 2-х других классов
а вы знаете что в пуле тоже не видны изменения? )))
По вашему убрать пул?
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632549
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марки в каком порядке коммитить эти транзакции чтобы не упасть
вы не читали тред - у него автокоммит
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632550
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Расшифруйте что за очередь? ГУИ?
Дак могут и потоки быть.

Это означает, что данные меняются формами независимо друг от друга.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632554
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123а вы знаете что в пуле тоже не видны изменения? )))
По вашему убрать пул?
Не нужно в каждый менеджер совать свой коннекшен, не важно откуда его брать - напрямую с драйвера или с коннекшен пула.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632555
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркPetro123Расшифруйте что за очередь? ГУИ?
Дак могут и потоки быть.

Это означает, что данные меняются формами независимо друг от друга.
как захочу.
Хочу передам коннект. Захочу создам новый.
Вы чего испугались то? Я не пойму?
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632556
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркНе нужно в каждый менеджерслово менеджер придумали вы.
И детские страхи только у вас.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс - упрощение (Обновлено)
    #39632562
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк,
все ваши посты про транзакци и не имеют смысла при автокоммите. Это к автору топика.
...
Рейтинг: 0 / 0
25 сообщений из 79, страница 3 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Объединение sql запросов в один класс - упрощение (Обновлено)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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