Инициализация фабрики сеансов после запуска веб-приложения - PullRequest
0 голосов
/ 13 декабря 2011

в общем, hibernate sessionfactory создается в файле конфигурации Spring (например, spring-dao.xml), как;

<bean id="mySessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>file:src/hibernate.cfg.xml</value>
</property>
</bean>

, а затем в dao,

<bean id="myProductDao" class="product.ProductDaoImpl">
<property name="sessionFactory" ref="mySessionFactory"/>
</bean>

в сети.xml, мы помещаем файл конфигурации (spring-dao.xml) в contextConfigLocation;

<context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>/WEB-INF/spring-dao.xml</param-value>  
</context-param>

при запуске приложения источник данных внедряется во все компоненты dao.

Это было резюме, в чем моя проблема, я не хочу, чтобы Spring подключался к базе данных при запуске приложения.У меня есть администратор (отвечающий за открытие соединения с БД после запуска) и администраторский апплет, работающий на удаленной машине, который взаимодействует с сервлетом веб-приложения.соединение с базой данных для веб-приложения должно быть открыто, если аутентификация в порядке.

как мне достичь этой цели?

Ответы [ 2 ]

0 голосов
/ 03 января 2012

Решение не было трудным;Сначала создайте источник данных без параметров, а затем установите значения после учетных данных администратора. ОК.

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  <!-- Connection properties. All should be ommitted. -->
</bean>


// code below is called after admin login
    DataSource dS = context.getBean("dataSource");
    dS.setUrl("...");
    dS.setUserPass(adminPass);
0 голосов
/ 15 декабря 2011

Укажите lazy-init="true" для компонента mySessionFactory, и он будет инициализирован, когда ваш код попытается получить к нему доступ в первый раз, т. Е. После успешной аутентификации.

...