我正在使用的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的相對新手對我來說很容易!
感謝史蒂夫