2016-07-28 83 views
1

我用下面的結構部署EAR定製的喜好類Wildfly 9.0.2WildFly + Java首找不到類路徑

my.ear 
    |-my.sar (it is a SAR archive) 
    |-lib 
    |-myPreferencesImpl.jar 

我能夠/ myPreferencesImpl.jar從加載lib中的類我(比如class.forname(com.my.PreferencesFactory)),但是,java.util.prefs.Preferences.factory無法加載com.my.PreferencesFactory。在WildFly啓動期間,我通過Djava.util.prefs.PreferencesFactory=com.my.PreferencesFactory作爲命令行參數。

以下是拋出的異常:

Caused by: java.lang.ClassNotFoundException: com.my.PreferencesFactory from [Module "org.jboss.as.jmx:main" from local module loader @76a3e297 (finder: local module finder @4d3167f4 (roots: /CSA_wildfly/wildfly/modules,/CSA_wildfly/wildfly/modules/system/layers/base))] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385) 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at java.util.prefs.Preferences.factory(Preferences.java:254) 

請幫我解決這個問題。

UPDATE:
我終於通過遷移使用JMX服務爲@辛格爾頓+ @Startup EJB啓動服務固定。沒有其他更改是必需的。

回答

2

當您在命令行中通過arg Djava.util.prefs.PreferencesFactory=com.my.PreferencesFactory時,Wildfly將在可用的類中查找該類,該類以modules的方式提供。在Wildfly啓動過程中,它甚至不會知道存在具有該類的應用程序,它也不能爲同一容器上的其他部署提供相同的類。所以如果你想讓命令行參數工作,請確保deploy the Factory implementation as a Wildfly module

+0

正在調用'java.util.prefs.PreferencesFactory'來實例化'com.my.PreferencesFactory'的應用程序(my.sar)。這發生在Wildfly啓動之後。那麼爲什麼這不起作用呢? –

+1

直到'java.util.prefs.Preferences'被初始化,它才被設置。所以它應該工作。但是,其他部署或任何服務器依賴性都無法使用首選項API,因此它必須位於模塊中。在這種情況下,JMX試圖使用首選項API,但不能。 –

+0

@ JamesR.Perkins你應該發佈這個答案。 –