powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / connection pool Dao как реализовать
25 сообщений из 25, страница 1 из 1
connection pool Dao как реализовать
    #38153959
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я реализую abstract Dao factory, то для конкретной фабрики я должен иметь connection pool.
Вопрос такой - должен ли он быть inner классом этой фабрики или можно какой-то обобщённый пул для всех фабрик написать?
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38153979
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне бы скелет просто как это примерно
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154010
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем писать пул? возьми готовую реализацию, например от Апача (org.apache.commons.dbcp.BasicDataSource).
Да и по идее пул (вроде паттерн pool есть, почитай) - он как бы один должен быть, и рулит доступными ресурсами Connection'ов.
Создавать несколько пулов для подключения к одной БД - это неправильно.
Твоя основная задача - создать пул и передавать его в ДАО каким то образом.
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154017
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И передавай этот пул как интерфейс DataSource, тогда сможешь безболезненно поменять реализацию этого самого пула на другую.
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154316
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pavel_nv,

сделал пул как внутренний класс конкретной DAO.
это нормально?
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154349
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154375
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

приведите пример того, как надо(если руками писать).
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154458
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public abstract class AbstractJDBCDao{
   private DataSource dataSource;

   protected AbstractJDBCDao(){
       Context initContext = new InitialContext();
       Context envContext  = (Context)initContext.lookup("java:/comp/env");
       this.dataSource = (DataSource)envContext.lookup("jdbc/myDatasourceName");   
   }

   protected DataSource getDataSource(){
       return this.dataSource;
   }
}
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154459
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Если я реализую abstract Dao factory
Зачем для DAO factory? DAO не имеет состояния, и их не за чем производить. Они синглтоны в системе.
Сделай свой IoC вместо factory - отдельный класс, который инстранциирует и соединяет всю инфраструктуру.

redwhite90Вопрос такой - должен ли он быть inner классом этой фабрики или можно какой-то обобщённый пул для всех фабрик написать?
Пул - отдельная сущность. Её нужно единожды создать для каждого источника данных и потом заинжектить во все DAO.
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154496
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,Если честно, эти классы мне совсем не знакомы.

Моя логика такая, что на каждую конкретную бд есть свой пул, поэтому его надо хранить внутри конкретной factory

вот мой код:
Код: 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.
public class MsSqlDaoFactory extends AbstractDaoFactory {
    @Override
    public UsbDao getUsbDAO() {
        return new UsbDaoMsSql();
    }
    @Override
    public AbstractDeviceDao getAbstractDeviceDao(){
        return new AbstractDeviceDaoMsSql();
    }
    @Override
    public  ComputeDao getComputeDao(){
        return new ComputeDaoMsSql();
    }
    public static class PoolConnection {
        Queue<Connection> connectionFreeQueue;
        Queue<Connection> connectionBusyQueue;
        final String userName = "red";
        final String password = "123";
        String connectionUrl = "jdbc:sqlserver://localhost:1433;" + "databaseName=epam;";

        private static PoolConnection poolConnection;

        private PoolConnection() {
            connectionFreeQueue = new LinkedList<Connection>();
            connectionBusyQueue = new LinkedList<Connection>();
        }

        public static PoolConnection getInstance() {
            if (poolConnection == null)
                poolConnection = new PoolConnection();
            return poolConnection;
        }

        public void releaseConnection(Connection connection) {
            connectionFreeQueue.add(connection);
            connectionBusyQueue.remove(connection);
        }

        public Connection getConnection() throws SQLException {
            if (connectionFreeQueue.isEmpty())
                connectionFreeQueue.add(java.sql.DriverManager.getConnection(connectionUrl, userName, password));
            Connection connection = connectionFreeQueue.poll();
            connectionBusyQueue.add(connection);
            return connection;
        }

    }
}
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154506
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Blazkowicz,Если честно, эти классы мне совсем не знакомы.
Ии? В документацию смотреть страшно?

redwhite90Моя логика такая, что на каждую конкретную бд есть свой пул, поэтому его надо хранить внутри конкретной factory

На каждую БД есть отдельный экземпляр пула. Любой адекватный JDBC пул реализует DataSource интерфейс из JSE. Поэтому привязываться к конкретнопу пулу нужно в исключительно редких случаях.



redwhite90
Код: java
1.
public class MsSqlDaoFactory extends AbstractDaoFactory {


MsSql? Really? А у MySQL какой-то свой JDBC? Очень редкие приложения завязываются на любые базы данных. Dao, обычно, завязывается на JDBC. Привязка к конкретному расширению SQL нужна достаточно редко. И если вы её делаете, то вы должны знать ответ на вопрос "зачем".


redwhite90
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    @Override
    public UsbDao getUsbDAO() {
        return new UsbDaoMsSql();
    }
    @Override
    public AbstractDeviceDao getAbstractDeviceDao(){
        return new AbstractDeviceDaoMsSql();
    }
    @Override
    public  ComputeDao getComputeDao(){
        return new ComputeDaoMsSql();
    }


И зачем вам каждый пук новый экземпляр DAO? Зачем нужна Factory? Если вы так делаете, то наверное на это есть какие-то основания?
Почему DAO не синглтон? Какая роль Factory? Зачем создаётся экземпляр абстрактного класса? Чтобы запутать потенциального читателя.
Код: java
1.
    public static class PoolConnection implements DataSource



Ну и с порядком слов надо что-то решать
Не PoolConnection, а ConnectionPool.
Не UsbDaoMsSql, а MsSQLUsbDao.
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154510
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90
Код: java
1.
2.
            if (poolConnection == null)
                poolConnection = new PoolConnection();


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

Ну, и вообще к реализации пула очень много вопросов. Например как поведёт себя пул в многопоточном окружении?
Почему не используется стандартный JDBC API, в котором соединение можно вернуть в пул через Connection.close()?
Т.е. это теперь любой готовый код под JDBC надо переписывать с учетом вашей не стандартной реализации пула?
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154550
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90приведите пример того, как надо(если руками писать).
там ооочень много ньюансов. Можно и Хибер руками написать)).
Поэтому вопрос - странный.
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154631
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
this.dataSource = (DataSource)envContext.lookup("jdbc/myDatasourceName");


а что эти строки означают?
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154639
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это тривиальная замена вашему велосипеду, но я думаю писать велосипеды же интереснее
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154642
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Много информации так сразу - тяжело разобраться.
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154661
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
разве у меня не так сделано?
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154687
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я к тому, что здесь упор не на jdbc идёт, а на СУБД
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154697
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот паттерн следует использовать только если в ТЗ указано обязательное использование нескольких СУБД. это значительно увеличит трудоемкость процесса.
Вам же выше сказали:
BlazkowiczMsSql? Really? А у MySQL какой-то свой JDBC? Очень редкие приложения завязываются на любые базы данных. Dao, обычно, завязывается на JDBC. Привязка к конкретному расширению SQL нужна достаточно редко. И если вы её делаете, то вы должны знать ответ на вопрос "зачем".
Вы уверены что нужны несколько СУБД? ответьте тогда на вопрос "зачем"?
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154699
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90я к тому, что здесь упор не на jdbc идёт, а на СУБД
а для чего тебе делать упор на СУБД? Когда надо делать прямо противоположное.
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154709
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pavel_nv,

Это учебный проект.
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154721
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90а что эти строки означают?
Из JNDI сервера получаем ссылку на пул. Пул единожды настраивается на сервере. Приложению не нужно знать к какой именно базе оно конектится.
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154724
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90разве у меня не так сделано?

Мда. Вот что значит не удачная книга. Почитай GoF. Есть в хорошем переводе. Там толково разжевано какие проблемы решают конкретные паттерны. В вашей книге пример ради примера.
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154728
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90я к тому, что здесь упор не на jdbc идёт, а на СУБД
А смысл? Если все СУБД работают через SQL и JDBC, Т.е. в 99% случаев разницы между MySQLJDBCCustomerDAO и MSSQLJDBCCustomerDAO нет вообще. Вот если вы вдруг такую разницу обнаружите, тогда можно выделить её в подобный класс.
Опять же, большая редкость, если одна и та же сущность хранится в разных источниках данных. Поэтому пример в вашей книге высосан из пальца и к реальной жизни отношения не имеет вообще.
...
Рейтинг: 0 / 0
connection pool Dao как реализовать
    #38154756
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90pavel_nv,
Это учебный проект.
транслируй вопрос к преподу.
Удачи!
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / connection pool Dao как реализовать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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