【问题标题】:Jersey Service Initialization with HIbernate default dataset使用 HIbernate 默认数据集的 Jersey 服务初始化
【发布时间】:2013-11-04 21:29:40
【问题描述】:

我有一个由 Hibernate、Spring 和 Jersey 组成的堆栈。

虽然很多东西都是 RESTFUL 的,但并非我们应用程序中的所有东西都是(而且不可能,由于各种原因。我意识到我在某些地方破坏了 REST 最佳实践。)

我需要做两件事,但不知道如何做到这两件事。

在我的 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(),但我尝试让我的服务扩展 ServletContainer 并覆盖启动的那一刻 或者实现 AbstractResourceModelListener 然后提供 onLoaded(AbstractResourceModelContext modelContext) 我收到空指针,因为 data.sql 提供的初始数据不存在。

我怎样才能正确地做到这一点,这样我既可以加载我的 data.sql,又可以在加载服务时执行一些语句?

(如果有人好奇,是的,该服务是@Singleton)

任何帮助表示赞赏。

【问题讨论】:

    标签: java spring hibernate rest jersey


    【解决方案1】:

    因此,这里的正确答案是使用@PostConstruct,尽管 Eclipse 可能会给您关于限制和库的警告。我不确定为什么会出现该警告,或者为什么它会继续工作,但@PostConstruct 是在 Spring 中不破坏其他加载的方法。

    (也就是说,如果你没有被固定,在外面进行初始化并注入它会更加 RESTFUL 和更好,并且不需要@Singleton,但我在问题和答案中都假设它不是一个选项无论出于何种原因。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2019-06-09
      • 2018-07-27
      • 1970-01-01
      • 2012-03-02
      • 2013-11-06
      • 1970-01-01
      相关资源
      最近更新 更多