2017-06-06 71 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