1

Hibernate と mongo db で Spring Data を使用しています。Web アプリケーションを Wildfly 10 にデプロイしようとしているときに、次のスタックに遭遇しました。

原因: java.lang.IllegalArgumentException: Not an managed type: class class com.olp.jpa.domain.docu.product.ProductTemplateBean at org.hibernate.jpa.internal.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:219) org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.(JpaMetamodelEntityInformation.java:68) で org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:65) で org.springframework. data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:149) at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:88) at org.springframework.data.jpa. repository.support.JpaRepositoryFactory.org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:159) の getTargetRepository(JpaRepositoryFactory.java:68) org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport. java:224) org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:210) で org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92) でorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) で org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) ... 35 もっと見る


SpringJUnit4ClassRunner を使用して Junit でテストすると、コードは正常に動作します。Wildfly のデプロイ中にのみ、このエラーが発生します。以下のさまざまなアーティファクトのスニペット:

  1. web.xml

    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    

  2. 春の設定

    http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx. xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/jdbc http:// www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa. xsd

    <context:component-scan base-package="com.olp"/>
    
    <tx:annotation-driven />
    
    <jpa:repositories base-package="com.olp.jpa.domain"  entity-manager-factory-ref="entityManagerFactory"/>
    
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
      <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitManager" ref="persistenceUnitMgr"/>
        <property name="jpaDialect" ref="jpaDialect"/>
        <property name="jpaVendorAdapter" ref="ogmVendorAdapter"/>
    </bean>
    
    <bean id="persistenceUnitMgr" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
        <property name="persistenceUnitPostProcessors">
            <array>
                <ref bean="persistencePostProcessor"/>
            </array>
        </property>
        <property name="persistenceXmlLocation" value="classpath:META-INF/persistence_olp.xml"/>
        <property name="defaultPersistenceUnitName" value="productHub"/>
        <property name="packagesToScan" value="com.olp.jpa.domain.docu" />
    </bean>
    
    <bean id="persistencePostProcessor" class="com.olp.jpa.OlpPersistenceUnitPostProcessor"/>
    
    <bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
    
    <bean id="ogmVendorAdapter" class="com.olp.jpa.OlpHibernateOgmVendorAdapter"/>
    

  3. JPA conf (persistence_olp.xml)

    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> org.hibernate.ogm.jpa.HibernateOgmPersistence ENABLE_SELECTIVE

        <properties>
    
            <!--
                All other hibernate / mongo properties are externalized and provided by persistence unit post-processor in Spring
            -->
    
            <property name="jboss.as.jpa.managed" value="false" />
    
        </properties>
    

  4. エンティティが例外をスローしています (ProductTemplateBean.java)

    パッケージ com.olp.jpa.domain.docu.product;

    @Entity @Table(name="phub_product_template") public class ProductTemplateBean implements Serializable {

    @Id
    @DocumentId
    @GeneratedValue(strategy = GenerationType.AUTO)
    //@Type(type = "objectid")
    private Long id;
    
    // Omitting other fields & getters setters for brevity
    

    }

  5. Wildfly クラスローダー conf ( jboss-deployment-structure.xml )

        <exclusions>
            <module name="org.hibernate"/>
            <module name="org.hibernate.search.orm"/>
            <module name="org.hibernate.search.engine"/>
            <module name="org.hibernate.validator"/>
            <module name="org.codehaus"/>
            <module name="resteasy" />
        </exclusions>
    
    </deployment>
    

誰かがいくつかのポインタを投げることができれば、本当に感謝しています。関連する記事をいくつか読んだことがありますが、そのほとんどは「packagesToScan」プロパティを指しています。これはすでに適切に構成されています。

長い間頭を壊しました!ここで何か助けてくれてありがとう。

4

0 に答える 0