Spring IoC
От: 6lackbird Россия  
Дата: 18.01.07 16:07
Оценка:
Привет

Ведется одновременная разработка проекта под несколько баз данных.
Есть самописная DAOFactory, занимающаяся созданием DAO для заданного типа базы данных. Создаваемый
инстанс зависит от параметра vendor.

    <factory>
        <property name="vendor"
                  value="mssql"/>
    </factory>


    <dao id="DictionariesDAO"
         interface="dao.commons.DictionariesDAO">

        <vendor name="mssql"
                impl="dao.mssql.DictionariesDAOImpl"/>

        <vendor name="oracle"
                impl="dao.oracle.DictionariesDAOImpl"/>
    </dao>


Возникла необходимость добавить функциональность IoC контейнера. Возникает вопрос, а можно ли
такую структуру описать используя возможности Spring IoC?

Может кто сталкивался
... << RSDN@Home 1.2.0 alpha rev. 668>>
"Мы будем уничтожать свое ядерное оружие вместе с Америкой" (c) Б. Ельцин
Re: Spring IoC
От: lexius www.acula.org
Дата: 18.01.07 17:28
Оценка:
Может это поможет

http://www.ibm.com/developerworks/ru/library/j-genericdao/index.html
************
www.acula.org
Re: Spring IoC
От: Blazkowicz Россия  
Дата: 18.01.07 17:38
Оценка:
Здравствуйте, 6lackbird, Вы писали:


6> Возникла необходимость добавить функциональность IoC контейнера. Возникает вопрос, а можно ли

6> такую структуру описать используя возможности Spring IoC?

Легко! У бина фабрики пропертя — Map. Ключ — имя вендора, значения — реализации. Все это чудесно сприноговым конфигом можно описать.
Re: Spring IoC
От: zalexaka  
Дата: 18.01.07 17:52
Оценка:
Здравствуйте, 6lackbird.

Так подойдёт?

    Раскомменчиваем что надо 

    <bean id="globalDictionariesDAO" class="dao.mssql.DictionariesDAOImpl"/>
<!--
    <bean id="globalDictionariesDAO" class="dao.oracle.DictionariesDAOImpl"/>
    .
    .
    <bean id="globalDictionariesDAO" class="dao.XXX.XXXXX"/>
-->


    В коде можно взять объект так:

    ApplicationContext ctx =...;
    .
    .
    DictionariesDAO dao = (DictionariesDAO)ctx.getBean("globalDictionariesDAO");


    Можно инжектить куда надо

    <bean id="daoUsingBean" class="bla.bla.DAOUsingBean">
        <property name="dictionariesDAO" ref="globalDictionariesDAO"/>
    </bean>


почитайте доку(там усё написано). Удачи.
Re[2]: Spring IoC
От: 6lackbird Россия  
Дата: 19.01.07 09:35
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Легко! У бина фабрики пропертя — Map. Ключ — имя вендора, значения — реализации. Все это чудесно сприноговым конфигом можно описать.

а можно пример , со spring'ом знаком не так давно ...
... << RSDN@Home 1.2.0 alpha rev. 668>>
"Мы будем уничтожать свое ядерное оружие вместе с Америкой" (c) Б. Ельцин
Re[2]: Spring IoC
От: 6lackbird Россия  
Дата: 19.01.07 09:35
Оценка: :)
Здравствуйте, zalexaka, Вы писали:

Z>Здравствуйте, 6lackbird.

Z>Так подойдёт?

Z>[code]

Z> Раскомменчиваем что надо

Z> <bean id="globalDictionariesDAO" class="dao.mssql.DictionariesDAOImpl"/>

Z><!--
Z> <bean id="globalDictionariesDAO" class="dao.oracle.DictionariesDAOImpl"/>
Z> .
Z> .
Z> <bean id="globalDictionariesDAO" class="dao.XXX.XXXXX"/>
-->>

Спасибо, но данное решение основано на методе китайских программистов и требует
большого количества ручной работы для изменении вендора бд
... << RSDN@Home 1.2.0 alpha rev. 668>>
"Мы будем уничтожать свое ядерное оружие вместе с Америкой" (c) Б. Ельцин
Re[3]: Spring IoC
От: Blazkowicz Россия  
Дата: 19.01.07 09:40
Оценка:
Здравствуйте, 6lackbird, Вы писали:

6>Здравствуйте, Blazkowicz, Вы писали:


B>>Легко! У бина фабрики пропертя — Map. Ключ — имя вендора, значения — реализации. Все это чудесно сприноговым конфигом можно описать.

6>а можно пример , со spring'ом знаком не так давно ...


   <bean id="externalDataSource" class="com.offshorecreations.activepages.datasource.jdbc.JDBCDataSource">
        <!-- Map of datasources -->
        <property name="jdbcDataSources">
            <map>
                <entry key="firebird">
                    <ref bean="firebirdDatasource"/>
                </entry>
                <entry key="mssql">
                    <ref bean="mssqlDatasource"/>
                </entry>
                <entry key="mysql">
                    <ref bean="mysqlDatasource" />
                </entry>
                <entry key="oracle">
                    <ref bean="oracleDatasource" />
                </entry>
            </map>
        </property>
   </bean>
Re[3]: Spring IoC
От: zalexaka  
Дата: 19.01.07 10:56
Оценка: +1
Здравствуйте, 6lackbird, Вы писали:

6> Спасибо, но данное решение основано на методе китайских программистов и требует

6>большого количества ручной работы для изменении вендора бд

Если система у вас по ходу работы сама переключаеться между БД от разных вендоров, то
действительно такой подход можно назвать китайским. В противном случае конфигурировать
её всё равно придётся вручную, а уж как это осуществлять дело вкуса. В изложенной вами
идее откуда берётся параметр "vendor", неужели из файла конфигурации или из коммандной
строки? (Не забудьте задокументировать это)

А по-моему они одинаковые(ц)

ЗЫ
как по-вашему закомменченные фрагменты в hibernate.properties тоже китайский подход ну-ну
ЗЗЫ
По доброму конечно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.