`
strongant
  • 浏览: 66895 次
  • 性别: Icon_minigender_1
  • 来自: IT
社区版块
存档分类
最新评论

JBoss AS 7 JNDI 的常见异常

 
阅读更多

  1、对于jnp包的使用,jboss5中使用jnp,实现类是org.jnp.interfaces.NamingContextFactory,需要引 入jnp-client.jar。在AS7中客户端只需要引入一个jboss-client.jar的包使用的 java.naming.factory.initial改成了这个包下面的 org.jboss.naming.remote.client.InitialContextFactory。

                      jboss5下面的initialContext的实例化方法是

                                         Properties prop = new Properties();

                                         prop.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");

                                         prop.put("java.naming.provider.url","localhost:1099")

                                         prop.put("java.naming.factory.url.pkgs","org.jboss.naming")

                      jboss7中改成了

                                        Properties prop = new Properties();

                                        prop.put(Context.PROVIDER_URL, "remote://127.0.0.1:4447");

                                        prop.put(Context.SECURITY_PRINCIPAL, System.getProperty("username","appname"));

                                        prop.put(Context.SECURITY_CREDENTIALS, System.getProperty("password","12345"));

                                        prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");

                    否则会抛出Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
                                      at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
                                      at java.security.AccessController.doPrivileged(Native Method)
                                      at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
                                      at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
                                      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
                                      at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
                                      at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
                                      at java.lang.Class.forName0(Native Method)
                                      at java.lang.Class.forName(Class.java:247)

                    2、注意到上面那个remote:127.0.0.1:4447,没有使用5.1里默认的localhost:1099,因为这个localhost和 127.0.0.1的区别访问不到JNDI,搞了好半天,这个banding IP可以在standalone/configration/standalone.xml文件里<integerface>配置

否则抛出

javax.naming.NamingException: Failed to create remoting connection [Root exception is java.lang.RuntimeException: Operation failed with status WAITING]
at org.jboss.naming.remote.client.ClientUtil.namingException(ClientUtil.java:36)
at org.jboss.naming.remote.client.InitialContextFactory.getInitialContext(InitialContextFactory.java:121)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at ClientTest.main(ClientTest.java:27)
Caused by: java.lang.RuntimeException: Operation failed with status WAITING
at org.jboss.naming.remote.protocol.IoFutureHelper.get(IoFutureHelper.java:89)
at org.jboss.naming.remote.client.NamingStoreCache.getRemoteNamingStore(NamingStoreCache.java:56)
at org.jboss.naming.remote.client.InitialContextFactory.getOrCreateCachedNamingStore(InitialContextFactory.java:166)
at org.jboss.naming.remote.client.InitialContextFactory.getOrCreateNamingStore(InitialContextFactory.java:139)
at org.jboss.naming.remote.client.InitialContextFactory.getInitialContext(InitialContextFactory.java:104)
... 5 more

                    3、用户名密码,在jboss7里必须使用用户名和密码的验证,而且需要自己添加一个用户,一般用add-user.bat添加,选择Application User

                         Realm输入默认的ApplicationRealm

                          最后输入一行what roles do you want this user to belong to?

                          这里的输入与standalone.xml的内容匹配。我的项目是用到guest的

                          否则抛出

javax.naming.NamingException: Failed to create remoting connection [Root exception is java.lang.RuntimeException:javax.security.sasl.SaslException: Authentication failed: all available authentication mechanisms failed]
at org.jboss.naming.remote.client.ClientUtil.namingException(ClientUtil.java:36)
at org.jboss.naming.remote.client.InitialContextFactory.getInitialContext(InitialContextFactory.java:121)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at ClientTest.main(ClientTest.java:27)
Caused by: java.lang.RuntimeException: javax.security.sasl.SaslException: Authentication failed: all available authentication mechanisms failed
at org.jboss.naming.remote.protocol.IoFutureHelper.get(IoFutureHelper.java:87)
at org.jboss.naming.remote.client.NamingStoreCache.getRemoteNamingStore(NamingStoreCache.java:56)
at org.jboss.naming.remote.client.InitialContextFactory.getOrCreateCachedNamingStore(InitialContextFactory.java:166)
at org.jboss.naming.remote.client.InitialContextFactory.getOrCreateNamingStore(InitialContextFactory.java:139)
at org.jboss.naming.remote.client.InitialContextFactory.getInitialContext(InitialContextFactory.java:104)
... 5 more
Caused by: javax.security.sasl.SaslException: Authentication failed: all available authentication mechanisms failed
at org.jboss.remoting3.remote.ClientConnectionOpenListener$Capabilities.handleEvent(ClientConnectionOpenListener.java:365)
at org.jboss.remoting3.remote.ClientConnectionOpenListener$Capabilities.handleEvent(ClientConnectionOpenListener.java:214)
at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:72)
at org.xnio.channels.TranslatingSuspendableChannel.handleReadable(TranslatingSuspendableChannel.java:189)
at org.xnio.channels.TranslatingSuspendableChannel$1.handleEvent(TranslatingSuspendableChannel.java:103)
at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:72)
at org.xnio.nio.NioHandle.run(NioHandle.java:90)
at org.xnio.nio.WorkerThread.run(WorkerThread.java:184)
at ...asynchronous invocation...(Unknown Source)
at org.jboss.remoting3.EndpointImpl.doConnect(EndpointImpl.java:270)
at org.jboss.remoting3.EndpointImpl.doConnect(EndpointImpl.java:251)
at org.jboss.remoting3.EndpointImpl.connect(EndpointImpl.java:349)
at org.jboss.remoting3.EndpointImpl.connect(EndpointImpl.java:333)
at org.jboss.naming.remote.client.EndpointCache$EndpointWrapper.connect(EndpointCache.java:105)
at org.jboss.naming.remote.client.NamingStoreCache.getRemoteNamingStore(NamingStoreCache.java:55)
... 8 more

                     4、jndi命名,JBoss7使用了更加严格的JNDI命名比如 JMS的jms-connection-factories使用的是java:jboss/exported/jms /RemoteConnectionFactory而不是以前的/RemoteConnectionFactory我以为是 initialcontext.lookup的时候查找的内容是java:jboss/exported/jms /RemoteConnectionFactory,试了几次发现错了,应该是配置文件中的命名为java:jboss/exported/jms /RemoteConnectionFactory查找的时候用jms/RemoteConnectionFactory。同理查找Queue的时候在 standalone.xml中配置

                <jms-destinations>
                    <jms-queue name="myQueue">
                        <entry name="java:jboss/exported/queue/MyQueue"/>
                    </jms-queue>
                    <jms-queue name="SyslogQueue">
                        <entry name="java:jboss/exported/queue/SYSLOG"/>
                    </jms-queue>
                    <jms-queue name="TrapQueue">
                        <entry name="java:jboss/exported/queue/TRAP"/>
                    </jms-queue>
                    <jms-queue name="ICMPPingQueue">
                        <entry name="java:jboss/exported/queue/ICMPPING"/>
                    </jms-queue>
                </jms-destinations>

查找的时候用initialcontext.lookup("queue/MyQueue");

否则抛出

javax.naming.NameNotFoundException: jms/RemoteConnectionFactory -- service jboss.naming.context.java.jboss.exported.jms.RemoteConnectionFactory
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:178)
at org.jboss.naming.remote.protocol.v1.Protocol$1.handleServerMessage(Protocol.java:127)
at org.jboss.naming.remote.protocol.v1.RemoteNamingServerV1$MessageReciever$1.run(RemoteNamingServerV1.java:73)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)

ps:发现一个问题上面说的第四点 我理解错了,我原来以为entry name="XXX/XXX"就是用来查找的所以把原来的<entry name="queue/SYSLOG"/>直接改成了<entry name="java:jboss/exported/queue/SYSLOG"/>然后启动时候没有报错但是会有几行提示信息

10:05:54,884 INFO  [org.hornetq.ra.inflow.HornetQActivation] (default-short-running-threads-threads - 3) Attempting to reconnect org.hornetq.ra.inflow.HornetQActivationSpec(ra=org.hornetq.ra.HornetQResourceAdapter@175c39c3 destination=queue/ICMPPING destinationType=javax.jms.Queue ack=Auto-acknowledge durable=false clientID=null user=null maxSession=15)
10:05:54,900 INFO  [org.hornetq.ra.inflow.HornetQActivation] (default-short-running-threads-threads - 2) Attempting to reconnect org.hornetq.ra.inflow.HornetQActivationSpec(ra=org.hornetq.ra.HornetQResourceAdapter@175c39c3 destination=queue/SYSLOG destinationType=javax.jms.Queue ack=Auto-acknowledge durable=false clientID=null user=null maxSession=15)
10:05:54,900 INFO  [org.hornetq.ra.inflow.HornetQActivation] (default-short-running-threads-threads - 3) awaiting topic/queue creation queue/ICMPPING

原来系统是根据entry name="XXX/XXX"来创建Queue的 所以entry name="XXX/XXX"(也就是<entry name="queue/SYSLOG">是不能去掉滴,否则提示找不到对应的Queue)要保留。

分享到:
评论

相关推荐

    jboss配置MySql的JNDI

    在IT领域,特别是Java应用服务器环境下,JBoss与MySQL数据库的集成是常见需求之一,而JNDI(Java Naming and Directory Interface)在此过程中扮演着关键角色。本文将深入解析如何在JBoss中配置MySQL的JNDI数据源,...

    JBoss AS7教程

    【JBoss AS7教程】 JBoss Application Server 7(简称JBoss AS7)是Red Hat公司推出的一款开源Java EE应用服务器,它基于EAP(Enterprise Application Platform)的轻量级版本,提供了对Java EE 6规范的全面支持。...

    JBoss AS 7 Development

    ### JBoss AS 7 Development #### 一、概述 JBoss AS 7(Application Server 7)是一款功能强大且开放源代码的应用服务器,为开发者提供了高效稳定的开发平台,支持多种高级特性,包括EJB(Enterprise JavaBeans)...

    jboss as7 文档

    ### JBoss AS7 文档概览 JBoss AS7(Application Server 7)是JBoss社区推出的一款开源应用服务器,其文档提供了全面且详细的指南、教程及资源介绍,旨在帮助开发者和管理员更好地理解和掌握JBoss AS7的各项功能与...

    JBoss AS 7 简介

    ### JBoss AS 7 简介与特点 JBoss AS 7(Application Server 7)是JBoss系列中的一个重要版本,它标志着JBoss AS在技术架构上的一次重大革新。本文将详细介绍JBoss AS 7的历史背景、设计初衷、核心技术和内部结构,...

    [JBoss] JBoss AS 7 配置部署管理教程 (英文版)

    [Packt Publishing] JBoss AS 7 配置部署管理教程 (英文版) [Packt Publishing] JBoss AS 7 Configuration, Deployment and Administration (E-Book) ☆ 出版信息:☆ [作者信息] Francesco Marchioni [出版机构...

    jbossAS7开发指南

    ### JBoss AS7 开发指南知识点总结 #### 一、JBoss AS7 开发者指南概览 **标题**: “JBoss AS7 开发指南” **描述**: “这是 JBoss AS7 最新版的开发指南,对于希望深入了解 JBoss 应用服务器的开发者来说,这是...

    Nginx 1.2.1 + JBOSS AS 7 负载配置及Session处理

    Nginx 1.2.1 + JBOSS AS 7 负载配置及Session处理 本文主要介绍了如何使用 Nginx 1.2.1 和 JBOSS AS 7 实现负载均衡和 Session 处理。文章首先介绍了使用 Nginx 1.2.1 和 JBOSS AS 7 做为应用服务器的理由,然后...

    jboss as 7

    JBoss AS 7 是一款开源的应用服务器,由 Red Hat 公司开发,它提供了一个高效且灵活的平台来运行Java应用程序。在这个版本中,JBoss 引入了命令行接口 (CLI) 作为管理和部署应用的主要工具,以提高管理效率和自动化...

    JBoss AS 5 Development

    ### JBoss AS 5 Development: 关键知识点解析 #### 一、JBoss AS 5 概述 **JBoss AS 5(Application Server 5)**是JBoss组织推出的一款开源应用服务器,它为Java应用程序提供了强大的运行环境。JBoss AS 5在企业...

    jboss配置 jndi

    【JBoss配置JNDI详解】 在Java应用服务器中,JNDI(Java Naming and Directory Interface)是一个关键组件,用于查找和绑定资源,如数据源、EJB等。JBoss,作为一款开源的企业级应用服务器,对JNDI的支持使得开发者...

    jboss安装与jndi配置.doc

    《JBoss安装与JNDI配置详解》 JBoss,作为一个开源的应用服务器,广泛应用于Java EE应用程序的部署和管理。本文将详细介绍JBoss的安装过程以及JNDI(Java Naming and Directory Interface)的配置,旨在帮助开发者...

    Jboss AS7 性能调优

    【JBoss AS7 性能调优】 JBoss Application Server 7 (JBoss AS7) 是一款开源的应用服务器,以其高效能和快速启动而受到赞誉。然而,为了确保最佳性能,对服务器进行适当的配置和调优至关重要。大约80%的应用性能取...

    [JBoss] JBoss AS 7 开发教程 (英文版)

    [Packt Publishing] JBoss AS 7 开发教程 (英文版) [Packt Publishing] JBoss AS 7 Development (E-Book) ☆ 出版信息:☆ [作者信息] Francesco Marchioni [出版机构] Packt Publishing [出版日期] 2013年06月...

    jboss 配置jndi数据源

    jboss 配置jndi数据源,deploy下配置oracle-ds.xml

    jboss7 + EJB3

    【JBOSS7 + EJB3详解】 JBOSS7是Red Hat公司开发的一款开源Java应用服务器,它基于Java EE 6(Enterprise JavaBeans 3.1)规范,提供了全面的中间件服务,包括Servlet、JSP、JSF、EJB、JMS等。EJB3是Java EE平台中...

    windows环境下Jboss as 7配置Https

    Windows 环境下 JBoss AS 7 配置 HTTPS 在 Windows 环境下,配置 JBoss AS 7 的 HTTPS 需要按照特定的步骤进行。下面将详细介绍配置 HTTPS 的过程。 生成服务器端证书文件 首先,需要使用 JDK 自带的工具制作 ...

    myeclipse 远程调试jboss as7或者jboss eap6

    本篇将详细介绍如何在MyEclipse中远程调试JBoss AS7或JBoss EAP6,无论是在Windows还是Linux环境下。 首先,我们需要了解远程调试的基本原理。远程调试通常依赖于Java的调试接口(Java Debug Wire Protocol, JDWP)...

Global site tag (gtag.js) - Google Analytics