JPA PersistenceUnitPostProcessor未在GlassFish上执行

时间:2010-08-13 16:11:47

标签: jpa glassfish glassfish-3

我使用的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

1 个答案:

答案 0 :(得分:0)

我放弃了尝试让它最终工作,而是将代码移动到同一个项目中。对我来说有点愚蠢的是,persistence.xml中持久性单元定义下的jar-file选项在能够直接扫描类路径方面没有那么灵活。