首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org.jboss.naming.remote.client.InitialContextFactory : WFLYNAM0027 :ClassNotFoundException

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

Stack Overflow用户
提问于 2016-04-06 03:57:10
回答 2查看 9K关注 0票数 1

环境-野蝇-9.0.2.wildfly,EJB 3.0

以下错误发生在试图将Test.java类(在通配符下作为模块部署-9.0.2.final@machine-A)连接到EJB时发生,同时部署在机器-B(291.861.301.732)的jboss上。

代码语言:javascript
复制
17:02:46,666 ERROR [stderr] (default task-1) javax.naming.NamingException: WFLYNAM0027: Failed instantiate InitialContextFactory org.jboss.naming.remote.client.InitialContextFactory from classloader ModuleClassLoader for Module "deployment.test.ear.test.war:main" from Service Module Loader [Root exception is java.lang.ClassNotFoundException: org.jboss.naming.remote.client.InitialContextFactory from [Module "deployment.test.ear.test.war:main" from Service Module Loader]]
17:02:46,667 ERROR [stderr] (default task-1)    at org.jboss.as.naming.InitialContext.getDefaultInitCtx(InitialContext.java:118)
17:02:46,667 ERROR [stderr] (default task-1)    at org.jboss.as.naming.InitialContext.init(InitialContext.java:99)
17:02:46,670 ERROR [stderr] (default task-1)    at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:154)
17:02:46,670 ERROR [stderr] (default task-1)    at org.jboss.as.naming.InitialContext.<init>(InitialContext.java:89)
17:02:46,670 ERROR [stderr] (default task-1)    at org.jboss.as.naming.InitialContextFactory.getInitialContext(InitialContextFactory.java:43)
17:02:46,687 ERROR [stderr] (default task-1) Caused by: java.lang.ClassNotFoundException: org.jboss.naming.remote.client.InitialContextFactory from [Module "deployment.test.ear.test.war:main" from Service Module Loader]
17:02:46,688 ERROR [stderr] (default task-1)    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205)
17:02:46,688 ERROR [stderr] (default task-1)    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
17:02:46,688 ERROR [stderr] (default task-1)    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
17:02:46,688 ERROR [stderr] (default task-1)    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
17:02:46,688 ERROR [stderr] (default task-1)    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)

Test.java类存在于testclient.jar中&使用命令将testclient.jar作为一个模块来处理

代码语言:javascript
复制
module add --name=testclient --resources=/Downloads/lib/test/client/testclient.jar --dependencies=javax.api

Test.java类

代码语言:javascript
复制
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(远程客户端)调用。

通配符中没有jnp -9.0.2.Final(在JBoss5.x中),所以我将属性“org.jboss.naming.remote.client.InitialContextFactory".”替换为值org.jnp.interfaces.NamingContextFactory,为什么仍然会出现错误?

在注释“尝试将-client.jar放入运行时路径,作为WEB/lib的一部分”(Sampada)后添加了

我无法理解,在这个场景中,test.jsp (出现在test.ear->test.war->test.jsp)文件正在调用Test.java文件的函数getDbConnection。Test.java文件存在于testclient.jar中,并且该testclient.jar已作为一个模块部署。按照您的建议,当我在test.ear->test.war->WEB>lib中放置‘jBos-client.jar’时,问题已经解决了,现在访问应用程序'org.jboss.naming.remote.client.InitialContextFactory‘ClassNotFound异常时没有发生.,但我的问题是存在多个war文件(Eg..test.war、test1.war、test2.war),而且每个war文件都在访问Test.java文件(在testclient.jar中),因此,我必须将‘jbos-client.jar’文件放在每个war存档的WEB/lib中。对于我来说,这将是非常复杂的,还有其他可用的方法吗?'org.jboss.naming.remote.client.InitialContextFactory‘(不是在test.ear->test.war中),是如何通过将'jboss-client.jar’放到WEB/lib目录中来解决这个问题的。

在运行时服务器需要重命名回复‘JBos-client.jar’之后添加了以下内容.由'Sampada Wagde'

我还尝试了以下步骤1.在test.ear-->META-INF-->jboss-deployment-structure.xml中放置‘JBos-Deployment-structure.xml’

代码语言:javascript
复制
<?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>

  1. 将模块名称部署为 模块add --name= --resources=/Downloads/wildfly-9.0.2.Final/bin/client/jboss-client.jar

但仍然发生了以下错误。

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-07 08:03:59

您需要使自己的模块依赖于一个模块,该模块不仅包含jboss,而且还包含jboss的所有依赖项,这可能只是其他模块,也可能是其他jar。它正在抱怨缺少的第一个类是javax/naming/spi/InitialContextFactory,所以编辑module.xml以便jboss模块依赖于javax.api

票数 1
EN

Stack Overflow用户

发布于 2016-04-06 06:52:35

jboss-client.jar是服务器在运行时所需的。有几种向JBoss服务器提供jars的方法-

  1. 在MANIFEST.MF中包括jars (这通常用于您自己的应用程序jars)
  2. 如果jar特定于给定的web项目或WAR,则在web/lib中包括jar
  3. 将jars包含在模块类加载器中,并通过JBoss-部署-structure.xml将其提供给web项目。这是当有多场战争,其中一些(不是所有的)需要罐子。
  4. 在模块类加载器中包括jars,并通过standalone.xml中的全局模块将其提供给服务器。这是在服务器上部署的所有应用程序引用jars时完成的。

有关JBoss中模块的详细信息,请参阅此链接- https://docs.jboss.org/author/display/AS7/Class+Loading+in+AS7

至于如何将jboss-client.jar置于WAR中而不是testclient.jar来解决这个问题,答案是一样的--这就是类加载的工作方式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36441217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档