0

Hibernate、Spring、および Jersey で構成されるスタックがあります。

多くのものが RESTFUL ですが、私たちのアプリケーションのすべてが RESTFUL であるわけではありません (さまざまな理由から、そうではありません。私は RESTFUL のベスト プラクティスをところどころ破っていることに気付きました)。

私は2つのことをする必要があり、両方を実現する方法がわかりません。

私のapplication-context.xmlには次のものがあります

  <!-- Configure the entity manager factory bean -->
  <bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
    <property name="packagesToScan" value="com.mystuff.model"/>
     <property name="jpaProperties">
      <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
        <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
       <prop key="hibernate.format_sql">true</prop>
        <prop key="hibernate.hbm2ddl.auto">create</prop>
        <prop key="hibernate.show_sql">true</prop>
        <prop key="hibernate.hbm2ddl.import_files">data.sql</prop>
      </props>
    </property>

これは通常、休止状態のデータをデータベースにロードします。ただし、サービスの一部のメモリ構造を初期化する必要もあります。

super.initiate() への呼び出しまたは AbstractResourceModelListener を実装してから onLoaded(AbstractResourceModelContext modelContext) を提供したにもかかわらず、サービスに ServletContainer を拡張させて開始をオーバーライドしようとすると、data.sql によって提供される初期データが存在しないため、null ポインターが取得されます。 .

data.sql をロードし、サービスがロードされたときにいくつかのステートメントを実行できるようにするにはどうすればよいですか?

(誰かが興味を持っているなら、はい、サービスは @Singleton です)

どんな助けでも感謝します。

4

1 に答える 1

0

したがって、ここでの正しい答えは、Eclipse が制限やライブラリーに関する警告を表示する可能性があるにもかかわらず、@PostConstruct を使用することです。その警告が表示される理由、またはとにかく動作する理由はわかりませんが、@PostConstruct は、Spring の他の読み込みを破棄しない方法です。

(とはいえ、ピン留めされていない場合は、外部で初期化を実行して注入する方が、より RESTFUL で優れており、@Singleton は必要ありませんが、質問と回答の両方で、それは何のオプションでもないと想定しています理由。)

于 2013-11-05T16:50:01.447 に答える