2017-06-06 34 views
0

我在战争中拥有以下类。这也是任何具有JPA批注的唯一一类:实例化JPA实体内的JavaFX属性导致“无法加载类”错误

@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的豆类:

@MappedSuperclass 
public abstract class BaseEntity { 
    Object loc3 = new Object(); 
} 

作品有或没有初始化。这是为什么?

编辑 - 运行时配置:

enter image description here

类路径条目:

enter image description here

+0

检查您的版本运行的Java版本和运行服务器的版本。 – Thihara

+0

@Thihara尽我所见,他们都使用'JVM版本:1.8.0_112' – Mark

+0

一旦你确定该类实际上在CLASSPATH /可访问。你的JPA提供者知道如何坚持ObjectProperty吗?不在JPA规范中的ObjectProperty类型。你面前有答案。你有@AttributeConverter,如果你想定义如何保持这种类型... –

回答

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