Соединение с одной базой данных с помощью HibernateTemplate и SessionFactory - PullRequest
3 голосов
/ 17 марта 2011

на стороне java все работает нормально, но когда я смотрю на специальную таблицу оракулов V $ SESSION и в моей таблице журналов, в которой записываются все операции входа или выхода из системы, это катастрофа ... каждый запрос выполняет вход в системувыход из системы.Итак, вот мой вопрос: есть ли способ настроить Spring на уникальное подключение к базе данных или что-то не так в способе подключения?Вот моя конфигурация компонента источника данных:

<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>oracle.jdbc.OracleDriver</value>
        </property>
        <property name="url">
            <value>jdbc:oracle:thin:@nanssunorad:1523:nanorad3</value>
        </property>
        <property name="username">
            <value>foo</value>
        </property>
        <property name="password">
            <value>bar</value>
        </property>
    </bean>
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation">
        <value>hibernateESign.cfg.xml</value>
    </property>
    <property name="dataSource">
        <ref bean="dataSource" />
    </property>
    <property name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref local="sessionFactory" />
    </property>
</bean>
<bean id="IXalVaParametresDAO" class="fr.asterion.archivage.hibernate.XalVaParametresDAO">
    <property name="sessionFactory">
        <ref local="sessionFactory" />
    </property>
</bean>

В моем приложении, чтобы получить DAO для параметров базы данных, я делаю

  IXalVaParametresDAO parametreDAO = (IXalVaParametresDAO) ConfigApplication
           .getApplicationContext(this.log).getBean("IXalVaParametresDAO");

И наконец, в моем классе DAO,Я делаю что-то вроде этого:

public class XalVaParametresDAO implements IXalVaParametresDAO
{

   private HibernateTemplate hibernateTemplate;

   public void setSessionFactory(SessionFactory sessionFactory)
   {
      this.hibernateTemplate = new HibernateTemplate(sessionFactory);
   }



   public List<XalVaParametres> findAll()
   {
      log.debug("finding all XalVaParametres instances");
      try
      {
         String queryString = "from XalVaParametres";
         List lst = this.hibernateTemplate.find(queryString);

В моем приложении каждый раз, когда я вызываю метод "find", оно выполняет вход / выход из БД.Я думаю, проблема та же на другой БД.Я правильно все делаю?Я думаю, нет.Я бы хотел, чтобы HibernateTemplate создавал и оставлял сеанс открытым раз и навсегда.Это возможно ?Спасибо за ваши идеи

Manux

Ответы [ 4 ]

5 голосов
3 голосов
/ 17 марта 2011

Не рекомендуется использовать DriverManagerDataSource на производстве, так как он не выполняет пул соединений.

Вместо этого вам нужно использовать пул соединений, например c3p0 или Apache DBCP .

1 голос
/ 28 июля 2011

Лучше использовать пул соединений сервера приложений и указать jndi в весеннем XML-файле:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc/DSTest"/>
</bean>
0 голосов
/ 17 марта 2011

Вы можете использовать собственный источник данных Oracle с кэшированием соединения, например:

<bean id="myDataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
        <property name="connectionCachingEnabled" value="true"/>
        <property name="URL">
            <value>${jdbc.url}</value>
        </property>
        <property name="user">
            <value>${jdbc.username}</value>
        </property>
        <property name="password">
            <value>${jdbc.password}</value>
        </property>
        <property name="connectionCacheProperties">
            <value>
                MinLimit:1
                MaxLimit:1
                InitialLimit:1
                ConnectionWaitTimeout:120
                InactivityTimeout:180
                ValidateConnection:true
                MaxStatementsLimit:0
            </value>
        </property>
    </bean>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...