2010-08-13 80 views
0

我正在使用的Spring配置包含我的entityManagerFactory bean中的persistenceUnitPostProcessor的定義。未在GlassFish上執行JPA PersistenceUnitPostProcessor

當我運行JUnit測試(即在容器外部)時,後處理器正在被調用,但是當它作爲部署的Web應用程序(在Glassfish v3中運行)的一部分參與時,後處理器未被執行。一切正常,Spring上下文被正確加載,所有定義的bean加載,只是後處理器從未被解僱。

實體掃描器的目的是找到@Entity帶註釋的類。該項目分爲兩個模塊,一個包含域模型,另一個包含DAO和持久性代碼。

掃描程序代碼鬆散地基於博客文章:auto-scanning-jpa-entities它搜索類路徑。正如我所說,這一切都在容器外正常工作。

示出後處理器豆(修整爲了簡潔)相關的彈簧配置元素如下:

<bean id="entityScanner" class="com.inno.spring.EntityScanner"> 
    <property name="classPathFilter"> 
     <value>insurer</value> 
    </property> 
    <property name="targetPersistenceUnits"> 
     <value>unitTest-hsqldb</value> 
    </property> 
    <property name="classesToExclude"> 
     <value></value> 
    </property> 
</bean> 

與該實體管理器工廠被定義如下:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="loadTimeWeaver"> 
     <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> 
    </property> 
    <property name="dataSource"> 
     <!-- Workaround to allow custom isolation levels --> 
     <bean class="org.springframework.jdbc.datasource.lookup.IsolationLevelDataSourceRouter"> 
      <property name="defaultTargetDataSource" ref="unitTestDataSource" /> 
      <property name="targetDataSources"> 
       <map> 
        <entry key="ISOLATION_READ_UNCOMMITTED"> 
         <bean 
          class="org.springframework.jdbc.datasource.IsolationLevelDataSourceAdapter"> 
          <property name="targetDataSource" ref="unitTestDataSource" /> 
          <property name="isolationLevelName" value="ISOLATION_READ_UNCOMMITTED" /> 
         </bean> 
        </entry> 
       </map> 
      </property> 
     </bean> 
    </property> 
    <property name="persistenceUnitName" value="unitTest-hsqldb" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="database" value="HSQL" /> 
      <property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect" /> 
      <property name="showSql" value="${jpa.hibernate.showSql}" /> 
      <property name="generateDdl" value="${jpa.hibernate.generateDdl}" /> 
     </bean> 
    </property> 
    <property name="jpaPropertyMap"> 
     <map> 
      <entry key="hibernate.ejb.interceptor" value="com.inno.jpa.interceptors.InsurerInterceptor" /> 
     </map> 
    </property> 
    <property name="persistenceUnitPostProcessors"> 
     <list> 
      <ref bean="entityScanner" /> 
     </list> 
    </property> 

</bean> 

我是如果我犯了一個明顯的錯誤,那麼Spring和JPA的相對新手對我來說很容易!

感謝史蒂夫

回答

0

我放棄了試圖得到這個工作進行到底,而不是我感動的代碼放到同一個項目。對我來說,看起來有點傻,persistence.xml中持久化單元定義下的jar-file選項在能夠直接掃描classpath方面不是那麼靈活。