0

一般に、休止状態の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>

そしてダオで、

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

web.xmlでは、構成ファイル(spring-dao.xml)をcontextConfigLocationに配置します。

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

アプリケーションが起動すると、データソースがすべてのdaoBeanに注入されます。

これが要約でした。私の問題は、アプリケーションの起動時にSpringがデータベースに接続することを望まないことです。管理者(起動後にデータベース接続を開く責任があります)と、Webアプリサーブレットと通信するリモートマシンで動作する管理アプレットがあります。認証に問題がない場合は、Webアプリケーションのデータベース接続を開く必要があります。

どうすればこの目標を達成できますか?

4

2 に答える 2

0

解決策はそれほど難しくありませんでした。最初にパラメーターを指定せずにデータソースを作成し、管理者資格情報の後に値を設定します。

<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);
于 2012-01-03T17:16:11.310 に答える
0

Bean で指定するlazy-init="true"mySessionFactory、コードが初めてアクセスしようとしたとき、つまり認証が成功したときに初期化されます。

于 2011-12-15T06:37:04.897 に答える