WildFly + java Preferences在classpath中找不到自定义首选项类

时间:2016-07-28 07:39:34

标签: java java-ee jboss wildfly

我正在将具有以下结构的EAR部署到Wildfly 9.0.2

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

我可以直接从my.sar加载lib / myPreferencesImpl.jar中的类(比如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)

请帮我解决这个问题。

更新
我最后通过使用JMX Service将启动服务迁移到@Singleton + @Startup EJB来修复。不需要进行其他更改。

1 个答案:

答案 0 :(得分:2)

当您在命令行中传递arg Djava.util.prefs.PreferencesFactory=com.my.PreferencesFactory时,Wildfly将在可用的类中查找该类,该类通过modules提供。在Wildfly启动期间,它甚至不知道存在该类的应用程序,也不能为同一容器上的其他部署提供相同的类。因此,如果您希望命令行arg正常工作,请确保deploy the Factory implementation as a Wildfly module

相关问题