首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >由: javax.naming.NamingException: WFLYNAM0027:失败实例化InitialContextFactory引起

由: javax.naming.NamingException: WFLYNAM0027:失败实例化InitialContextFactory引起
EN

Stack Overflow用户
提问于 2022-03-09 23:56:01
回答 1查看 151关注 0票数 0

我在JBoss服务器上部署了一个WebSphere应用程序,它允许使用WebSphere MQ提供的重新源适配器连接到WebSphere MQ服务器。在应用程序启动过程中,我遇到了Caused by: javax.naming.NamingException: WFLYNAM0027: Failed instantiate InitialContextFactory问题

代码语言:javascript
运行
复制
at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
    at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
    at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:360)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
    at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.naming.NamingException: WFLYNAM0027: Failed instantiate InitialContextFactory com.ibm.websphere.naming.WsnInitialContextFactory from classloader ModuleClassLoader for Module "JmsTest.war" from Service Module Loader [Root exception is java.lang.ClassNotFoundException: com.ibm.websphere.naming.WsnInitialContextFactory from [Module "deployment.JmsTest.war" from Service Module Loader]]

下面是我的java代码:

代码语言:javascript
运行
复制
Properties properties = new Properties();
properties.put(Context.SECURITY_PRINCIPAL, user);
properties.put(Context.SECURITY_CREDENTIALS, password);
properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
properties.put(Context.URL_PKG_PREFIXES, "com.ibm.ws.naming");
properties.put(Context.PROVIDER_URL,  "remote://192.16.70.10:1234");
namingContext = new InitialContext(properties);
MQConnectionFactory cf = new MQConnectionFactory();
cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);
cf.setHostName(mqHostName);
cf.setPort(Integer.parseInt(mqListenerPort));
cf.setQueueManager(mqQueueManagerName);
cf.setChannel(mqChannelName);
MQConnectionFactory factory = cf;
connection = factory.createConnection(user, password);
connection.start();
sessionConsumer = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
queue = namingContext.lookup(queue);

有谁可以帮我?任何建议都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2022-03-10 02:10:56

根本原因是:

代码语言:javascript
运行
复制
java.lang.ClassNotFoundException: com.ibm.websphere.naming.WsnInitialContextFactory

这意味着应用程序的类加载器找不到这个类。

不过,使用JCA资源适配器的主要好处之一是您不需要在代码中包含特定于提供者的详细信息。换句话说,您根本不应该在应用程序代码中直接在WebSphere MQ上查找JNDI资源。所有这些内容都应该通过您已经部署的JCA资源适配器配置并绑定到JNDI。然后,您可以执行本地JNDI查找,以访问远程WebSphere MQ服务器上的资源。那么您的应用程序将不需要访问任何特定于提供程序的类或配置细节。它可以只使用Java,因为它们是设计用来使用的。

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

https://stackoverflow.com/questions/71417352

复制
相关文章

相似问题

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