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 のデプロイ中にのみ、このエラーが発生します。以下のさまざまなアーティファクトのスニペット:
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>
春の設定
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"/>
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>
エンティティが例外をスローしています (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
}
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」プロパティを指しています。これはすでに適切に構成されています。
長い間頭を壊しました!ここで何か助けてくれてありがとう。