我使用的Spring配置包含entityManagerFactory bean中persistenceUnitPostProcessor的定义。
当我运行JUnit测试(即在容器外部)时,正在调用后处理器,但当它作为已部署的Web应用程序(在Glassfish v3中运行)的一部分参与时,后处理器未被执行。其他一切正常,春季上下文正确加载,所有定义的bean加载,只是后处理器永远不会被解雇。
实体扫描程序的目的是找到@Entity带注释的类。该项目分为两个模块,一个包含域模型,另一个包含DAO和持久性代码。
扫描程序代码基于以下博客文章:auto-scanning-jpa-entities,它会搜索类路径。正如我所说,这一切都在容器外工作正常。
显示后处理器bean的相关spring配置元素(为简洁而修剪)如下:
<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的相对新手,所以如果我犯了一个明显的错误,请继续关注我!
谢谢Steve
答案 0 :(得分:0)
我放弃了尝试让它最终工作,而是将代码移动到同一个项目中。对我来说有点愚蠢的是,persistence.xml中持久性单元定义下的jar-file选项在能够直接扫描类路径方面没有那么灵活。