我在战争中有以下课程。它也是唯一具有任何JPA注释的类:
@MappedSuperclass
public abstract class BaseEntity {
protected ObjectProperty<Object> loc3 = new SimpleObjectProperty<>();
}
当我部署战争时,我收到以下错误:
ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 65) MSC000001: Failed to start service jboss.persistenceunit."DevCrowd.war#prod": org.jboss.msc.service.StartException in service jboss.persistenceunit."DevCrowd.war#prod": org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [pl.devcrowd.virtual.business.state.entity.BaseEntity]
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:179)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:121)
at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:193)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [pl.devcrowd.virtual.business.state.entity.BaseEntity]
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:232)
at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.<init>(AnnotationMetadataSourceProcessorImpl.java:103)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.<init>(MetadataBuildingProcess.java:147)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:141)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:161)
... 7 more
Caused by: java.lang.NoClassDefFoundError: javafx/beans/property/ObjectProperty
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:226)
... 14 more
Caused by: java.lang.ClassNotFoundException: javafx.beans.property.ObjectProperty from [Module "deployment.DevCrowd.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
... 17 more
但如果我删除了实例化
@MappedSuperclass
public abstract class BaseEntity {
protected ObjectProperty<Object> loc3;
}
有效。这也适用于IntegerProperty。
没有javafx bean的比较:
@MappedSuperclass
public abstract class BaseEntity {
Object loc3 = new Object();
}
有或没有初始化。那是为什么?
编辑 - 运行时配置:
类路径条目:
答案 0 :(得分:1)
根据我阅读Class Loading in WildFly的评论并根据访问JDK类下的内容,我将此jboss-deployment-structure.xml
添加到我的src\main\webapp\WEB-INF
文件夹中:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
<deployment>
<dependencies>
<system export="true">
<paths>
<path name="javafx/beans/property"/>
<path name="javafx/beans/binding"/>
</paths>
</system>
</dependencies>
</deployment>
</jboss-deployment-structure>
即使属性位于javafx.beans.property
下,也可能需要这两个属性,因为他们的超类位于.binding
。