JPA PersistenceUnitPostProcessor не выполняется на GlassFish - PullRequest
0 голосов
/ 13 августа 2010

Конфигурация 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, поэтому будьте осторожны, если я допустил очевидную ошибку!

Спасибо, Стив

1 Ответ

0 голосов
/ 17 августа 2010

В конце концов я прекратил попытки заставить это работать, вместо этого я переместил код в тот же проект. Мне кажется немного глупым, что опция jar-file в определении модуля персистентности в persistence.xml не является немного более гибкой в ​​плане возможности прямого сканирования пути к классам.

...