WFLYNAM0027:ClassNotFoundException:org.jboss.naming.remote.client.InitialContextFactory

WFLYNAM0027:ClassNotFoundException:org.jboss.naming.remote.client.InitialContextFactory,jboss,ejb,ejb-3.0,wildfly,Jboss,Ejb,Ejb 3.0,Wildfly,环境-wildfly-9.0.2.Final,EJB3.0 尝试连接Test.java类(作为模块部署在wildfly-9.0.2上)时发生以下错误。Final@machine-A) 到EJB,它部署在机器B(291.861.301.732)的jboss上 Test.java类 package com.testmodule.pojo; import java.util.Properties; import javax.naming.Context; import javax.naming.In

环境-wildfly-9.0.2.Final,EJB3.0

尝试连接Test.java类(作为模块部署在wildfly-9.0.2上)时发生以下错误。Final@machine-A) 到EJB,它部署在机器B(291.861.301.732)的jboss上

Test.java类

package com.testmodule.pojo;

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;

public class Test { 
public void getDbConnection(){
    try{
        Properties jndiProps = new Properties();
        jndiProps.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.naming.remote.client.InitialContextFactory");
        jndiProps.put(Context.PROVIDER_URL,"remote://291.861.301.732:4447");
        jndiProps.put(Context.SECURITY_PRINCIPAL, "testuser");
        jndiProps.put(Context.SECURITY_CREDENTIALS, "testpassword");
        jndiProps.put("jboss.naming.client.ejb.context", true);
        Context context = new InitialContext(jndiProps);
    }
    catch(Exception e){e.printStackTrace();}
}}
为什么会发生此错误,为了使“org.jboss.naming.remote.client.InitialContextFactory”对testclient.jar的可见性,在将testclient.jar部署为一个模块时,我是否必须添加更多依赖项(当前仅为javax.api)?或导致错误的任何其他问题?类“org.jboss.naming.remote.client.InitialContextFactory”也存在于$WILDFLY_HOME/bin/client/jboss-client.jar中

注意-291.861.301.732是远程系统ip,ejb部署在jboss上,此ejb正在使用JNDI从Test.java(远程客户端)调用

wildfly-9.0.2.Final(在JBOSS 5.x中)中没有jnp,所以我将属性“org.jnp.interfaces.NamingContextFactory”替换为值org.JBOSS.naming.remote.client.InitialContextFactory”。为什么仍然出现错误


在收到“Sampada Wagde”的评论“尝试将jboss-client.jar放入运行时路径,作为WEB-INF/lib的一部分”后,添加了以下内容。

我不理解,在这个场景中,test.jsp(存在于test.ear-->test.war-->test.jsp中)文件正在调用test.java文件的函数getDbConnection。test.java文件存在于testclient.jar中,这个testclient.jar已经作为一个模块部署。 根据您的建议,当我将“jboss client.jar”放入test.ear-->test.war-->WEB-INF-->库时,问题已经解决了,现在正在访问 应用程序“org.jboss.naming.remote.client.InitialContextFactory”ClassNotFound异常未发生…但我的问题是有多个war文件(例如test.war、test1.war、test2.war),每个war文件都在访问test.java文件(存在于testclient.jar中),所以我必须将“jboss client.jar”文件放在每个war归档文件的WEB-INF/lib中。这对我来说非常复杂,还有其他可用的方法吗?其次,如何通过将“jboss client.jar”放在WEB-INF/lib目录中来解决这个问题,因为testclient.jar中有“org.jboss.naming.remote.client.InitialContextFactory”(不在test.ear-->test.war中)

在收到“Sampada Wagde”回复“服务器在运行时需要jboss-client.jar…”后,添加了以下内容。

我还尝试了以下步骤 1.将“jboss deployment structure.xml”放入test.ear-->META-INF-->jboss-deployment-structure.xml

<?xml version="1.0"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
<deployment>
    <dependencies>
        <module name="testclient" export="true" />
        <module name="jboss-client" export="true" />
    </dependencies>
</deployment>
但仍然发生了以下错误

14:14:34,376 WARN  [org.jboss.modules] (default task-1) Failed to define class org.jboss.naming.remote.client.InitialContextFactory in Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/modules/system/layers/base)): java.lang.LinkageError: Failed to link org/jboss/naming/remote/client/InitialContextFactory (Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/modules/system/layers/base)))
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:437)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:269)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77)
at org.jboss.modules.Module.loadModuleClass(Module.java:560)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
Caused by: java.lang.NoClassDefFoundError: javax/naming/spi/InitialContextFactory
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:353)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:432)
Caused by: java.lang.ClassNotFoundException: javax.naming.spi.InitialContextFactory from [Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/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)
14:14:34,391 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /test/test.jsp: javax.servlet.ServletException: java.lang.LinkageError: Failed to link org/jboss/naming/remote/client/InitialContextFactory (Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/modules/system/layers/base)))
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:777)
at org.apache.jsp.test_jsp._jspService(test_jsp.java:85)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:69)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
Caused by: java.lang.LinkageError: Failed to link org/jboss/naming/remote/client/InitialContextFactory (Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/modules/system/layers/base)))
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:437)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:269)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77)
at org.jboss.modules.Module.loadModuleClass(Module.java:560)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
Caused by: java.lang.NoClassDefFoundError: javax/naming/spi/InitialContextFactory
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:353)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:432)
Caused by: java.lang.ClassNotFoundException: javax.naming.spi.InitialContextFactory from [Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/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)

服务器在运行时需要jboss-client.jar-

  • 在MANIFEST.MF中包含JAR(这通常用于您自己的应用程序JAR)
  • 在WEB-INF/lib中包含jar-如果jar特定于给定的WEB项目或WAR
  • 在模块类加载器中包含JAR,并通过jboss-deploymet-structure.xml将其提供给web项目。这是在存在多场战争且其中一些(并非全部)需要JAR时完成的
  • 在模块类加载器中包含JAR,并通过standalone.xml中的全局模块将其提供给服务器。这是在服务器上部署的所有应用程序都引用JAR时完成的
  • 有关JBoss中模块的详细信息,请参阅此链接-


    至于你关于如何将jboss-client.jar而不是testclient.jar放在战争中解决这个问题的问题,答案是一样的——这就是类加载的工作原理。

    你需要让你自己的模块依赖于一个不仅包含jboss-client-jar,而且还包含jboss-client的所有依赖项的模块,这可能是另外一个r模块或其他jar。它抱怨缺少的第一个类是javax/naming/spi/InitialContextFactory,因此编辑module.xml,使jboss客户端模块依赖于javax.api

    尝试将jboss-client.jar放在运行时路径中,作为WEB-INF/lib的一部分maybe@SampadaWagde…感谢您的回复…请参阅编辑部分。是吗你可以稍微整理一下你的问题,只留下问题的相关部分吗?因为它有很大的格式/拼写问题,很难帮助你。另外,你是否使用某种构建工具,如Maven?@aribeiro…请查看链接…感谢你的回复…我用命令添加了模块--module add--name=jboss-client--resources=~/Downloads/wildfly-9.0.2.Final/bin/client/jboss-client.jar,然后创建模块testclient作为依赖项->jboss-client--module add--name=testclient--resources=~/Downloads/lib/test/client/testclient/testclient.jar--依赖项=javax.api,jboss-client----但是仍然发生了相同的错误……请看我在哪里“错误:”由JavaLang.NoCuffeDefFunDror:Javax/NAMIG/SPI/RealCalExtCurnFiel厂引起的。这就是现在引起问题的问题。考虑在Sun.xMLIS中添加Sun.jdk作为依赖项。XMLI在正确的路径上……以及如何(Sun.jdk)将添加dependency?感谢您的回复,先生,module.xml是由jboss cli.sh自动生成的,所以我也通过命令“module add--name=testclient--resources=~/Downloads/lib/test/client/testclient.jar--dependencies=javax.api,sun.jdk”尝试了这个方法,但它不起作用。
    <?xml version="1.0"?>
    <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
    <deployment>
        <dependencies>
            <module name="testclient" export="true" />
            <module name="jboss-client" export="true" />
        </dependencies>
    </deployment>
    
    module add --name=jboss-client --resources=/Downloads/wildfly-9.0.2.Final/bin/client/jboss-client.jar
    
    14:14:34,376 WARN  [org.jboss.modules] (default task-1) Failed to define class org.jboss.naming.remote.client.InitialContextFactory in Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/modules/system/layers/base)): java.lang.LinkageError: Failed to link org/jboss/naming/remote/client/InitialContextFactory (Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/modules/system/layers/base)))
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:437)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:269)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77)
    at org.jboss.modules.Module.loadModuleClass(Module.java:560)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
    Caused by: java.lang.NoClassDefFoundError: javax/naming/spi/InitialContextFactory
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:353)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:432)
    Caused by: java.lang.ClassNotFoundException: javax.naming.spi.InitialContextFactory from [Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/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)
    14:14:34,391 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /test/test.jsp: javax.servlet.ServletException: java.lang.LinkageError: Failed to link org/jboss/naming/remote/client/InitialContextFactory (Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/modules/system/layers/base)))
    at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
    at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:777)
    at org.apache.jsp.test_jsp._jspService(test_jsp.java:85)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:69)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    Caused by: java.lang.LinkageError: Failed to link org/jboss/naming/remote/client/InitialContextFactory (Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/modules/system/layers/base)))
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:437)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:269)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77)
    at org.jboss.modules.Module.loadModuleClass(Module.java:560)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
    Caused by: java.lang.NoClassDefFoundError: javax/naming/spi/InitialContextFactory
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:353)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:432)
    Caused by: java.lang.ClassNotFoundException: javax.naming.spi.InitialContextFactory from [Module "jboss-client:main" from local module loader @707f7052 (finder: local module finder @11028347 (roots: /Downloads/wildfly-9.0.2.Final/modules,/Downloads/wildfly-9.0.2.Final/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)