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

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

приведите пример того, как надо(если руками писать).
...
Рейтинг: 0 / 0
17.02.2013, 10:36:24
    #38154458
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
connection pool Dao как реализовать
Код: 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
17.02.2013, 10:39:45
    #38154459
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
connection pool Dao как реализовать
redwhite90Если я реализую abstract Dao factory
Зачем для DAO factory? DAO не имеет состояния, и их не за чем производить. Они синглтоны в системе.
Сделай свой IoC вместо factory - отдельный класс, который инстранциирует и соединяет всю инфраструктуру.

redwhite90Вопрос такой - должен ли он быть inner классом этой фабрики или можно какой-то обобщённый пул для всех фабрик написать?
Пул - отдельная сущность. Её нужно единожды создать для каждого источника данных и потом заинжектить во все DAO.
...
Рейтинг: 0 / 0
17.02.2013, 12:32:47
    #38154496
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
connection pool Dao как реализовать
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
17.02.2013, 12:45:09
    #38154506
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
connection pool Dao как реализовать
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
17.02.2013, 12:49:52
    #38154510
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
connection pool Dao как реализовать
redwhite90
Код: java
1.
2.
            if (poolConnection == null)
                poolConnection = new PoolConnection();


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

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


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

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

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

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


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