Конфигурация Spring, которую я использую, содержит определение persistenceUnitPostProcessor в моем bean-компоненте entityManagerFactory.
Когда я запускаю тест JUnit (то есть вне контейнера), вызывается постпроцессор, но когда он участвует как часть развернутого веб-приложения (запущенного в Glassfish v3), постпроцессор не выполняется,Все остальное работает, контекст весны загружается правильно, загружаются все определенные bean-компоненты, просто постпроцессор никогда не запускается.
Цель сканера сущностей - найти аннотированные классы @Entity.Проект разделен на два модуля, один из которых содержит доменные модели, а другой содержит DAO и постоянный код.
Код сканера свободно основан на сообщении в блоге здесь: auto-scan-jpa-лица , которые ищут путь к классу.Как я уже сказал, все это прекрасно работает вне контейнера.
Соответствующие элементы конфигурации пружины, показывающие компонент постпроцессора (обрезанный для краткости), следующие:
<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, поэтому будьте осторожны, если я допустил очевидную ошибку!
Спасибо, Стив