2012-03-21 7 views
0

私は、プロジェクトに依存して開発されたコンポーネントを持っています...私はそのコンポーネントで指定されたエンティティを使用して、 Springのdata-jpaプロジェクトのMergingPersistenceUnitManagerを使用します。 このコンポーネントは、それが使用されている親プロジェクトと同じunitNameを持つpersistence.xmlを定義します。 ここでは、2つのpersistence.xmlファイルがあり、両方ともMergingPersistenceUnitManagerを使用してEntityManagerFactoryを作成する際に読み込まれます。HibernateのイベントリスナーがマージされたPersistence Unit Managerを使用した後に呼び出されない

コンテナの起動時にすべてがうまく動作し、エンティティが読み込まれて検出されました... しかし、私がここで直面している問題は、私の宣言された休止状態のリスナーは全く呼び出されていません...呼び出されることはないと私は思いますコンポーネントを削除してpersistence.xmlファイルを1つだけ持っていれば動作することを確認しました。

<persistence-unit name="LineManagement" transaction-type="RESOURCE_LOCAL"> 
     <properties> 
      <property name="hibernate.id.new_generator_mappings" value="true"  /> 
      <property name="hibernate.current_session_context_class"  value="thread" /> 
      <property name="hibernate.default_batch_fetch_size" value="1000" /> 
<property name="hibernate.cache.use_second_level_cache" value="true" /> 
      <property name="hibernate.cache.use_query_cache" value="true" /> 
      <property name="hibernate.cache.use_structured_entries" value="true" /> 
      <property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory" /> 
      <property name="hibernate.cache.provider_configuration_file_resource_path" value="/ehcache.xml" /> 

      <property name="hibernate.ejb.event.pre-update" value="com......dao.listener.ChangeHistoryMultiSelectListener" /> 
      <property name="hibernate.ejb.event.pre-insert" value="com......dao.listener.LMCoreEntityAuditListener" /> 

     <!-- General Debugging --> 
      <property name="hibernate.show_sql" value="false" /> 
      <property name="hibernate.format_sql" value="true" /> 
      <property name="hibernate.generate_statistics" value="true" /> 
     </properties> 
    </persistence-unit> 

二persistence.xmlのはちょうどこの

<persistence-unit name="LineManagement" transaction-type="RESOURCE_LOCAL"> 
    </persistence-unit> 

である私は私がMergingPersistenceUnitManagerを使用して開始した後、私のリスナーが呼び出されることはありませんことに気づいた...ここで はそのうちの一つからの抜粋です。

public class LMCoreEntityAuditListener 
     implements PreInsertEventListener, PreUpdateEventListener, Initializable { 
    private static final String MODIFIED_BY = "modifiedBy"; 
    private static final String CREATED_BY = "createdBy"; 

    @Override 
    public boolean onPreInsert(final PreInsertEvent event) { 
     System.out.println("ssss"); 
     if (!(event.getEntity() instanceof LMBaseEntity)) { 
     return false; 
     } 
     final LMBaseEntity entity = (LMBaseEntity) event.getEntity(); 
     if (!(entity instanceof GlobalLine) || (entity.getCreatedTimestamp() == null)) { 
     // auditCreates(entity); 
     final String user = SecurityContextUtil.getOriginalUser(); 
     final List<String> props = Arrays.asList(event.getPersister().getPropertyNames()); 
     event.getState()[props.indexOf(CREATED_BY)] = user; 
     event.getState()[props.indexOf(MODIFIED_BY)] = user; 
     } 

     return false; 
    } 

ご協力いただければ幸いです。たぶん私は何か基本的なものを逃している。依存関係は適切に構成されています。

答えて

0

スプリングデータのMergingPersistenceUnitManagerはプロパティをマージしていません。

https://github.com/SpringSource/spring-data-jpa/blob/master/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java

プロパティを含むマージユニットマネージャの例を以下にそれを比較します。

https://dev.c-ware.de/confluence/display/PUBLIC/Multiple+persistence.xml+in+a+multi-module+application

+0

良好な観察!これを完全に追加するためにJIRAを開いてもよろしいですか?ありがとう! –

関連する問題