带你走进EJB--MDB的NameNotFoundException

2023-10-24 16:20

本文主要是介绍带你走进EJB--MDB的NameNotFoundException,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


    在上一篇文章中我们对MDB用一个实例进行了了解,在实例的过程中出现了这样的一个异常.服务器和客户端的异常分别如下.

Jboss端的错误提示:

	19:38:19,749 INFO  [JmsActivation] Attempting to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@ed8545(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@1b7c40 destination=topic/mytopic destinationType=javax.jms.Topic tx=true durable=false reconnect=10 provider=java:/DefaultJMSProvider user=null maxMessages=1 minSession=1 maxSession=15 keepAlive=60000 useDLQ=true DLQHandler=org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler DLQJndiName=queue/DLQ DLQUser=null DLQMaxResent=5)19:38:19,752 ERROR [JmsActivation] Unable to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@ed8545(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@1b7c40 destination=topic/mytopic destinationType=javax.jms.Topic tx=true durable=false reconnect=10 provider=java:/DefaultJMSProvider user=null maxMessages=1 minSession=1 maxSession=15 keepAlive=60000 useDLQ=true DLQHandler=org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler DLQJndiName=queue/DLQ DLQUser=null DLQMaxResent=5)javax.naming.NameNotFoundException: mytopic not boundat org.jnp.server.NamingServer.getBinding(NamingServer.java:771)at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)at org.jnp.server.NamingServer.getObject(NamingServer.java:785)at org.jnp.server.NamingServer.lookup(NamingServer.java:443)at org.jnp.server.NamingServer.lookup(NamingServer.java:399)at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:726)at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686)at javax.naming.InitialContext.lookup(InitialContext.java:411)at org.jboss.util.naming.Util.lookup(Util.java:222)at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupDestination(JmsActivation.java:464)at org.jboss.resource.adapter.jms.inflow.JmsActivation.setup(JmsActivation.java:352)at org.jboss.resource.adapter.jms.inflow.JmsActivation.handleFailure(JmsActivation.java:292)at org.jboss.resource.adapter.jms.inflow.JmsActivation$SetupActivation.run(JmsActivation.java:733)at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:205)at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:260)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)at java.lang.Thread.run(Thread.java:722)

客户端的错误提示.

	Exception in thread "main" javax.naming.NameNotFoundException: mytopic not boundat org.jnp.server.NamingServer.getBinding(NamingServer.java:771)at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)at org.jnp.server.NamingServer.getObject(NamingServer.java:785)at org.jnp.server.NamingServer.lookup(NamingServer.java:443)at org.jnp.server.NamingServer.lookup(NamingServer.java:399)at sun.reflect.GeneratedMethodAccessor270.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:601)at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)at sun.rmi.transport.Transport$1.run(Transport.java:177)at sun.rmi.transport.Transport$1.run(Transport.java:174)at java.security.AccessController.doPrivileged(Native Method)at sun.rmi.transport.Transport.serviceCall(Transport.java:173)at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)at java.lang.Thread.run(Thread.java:722)at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:160)at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:726)at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686)at javax.naming.InitialContext.lookup(InitialContext.java:411)at com.tgb.ejb.MyTopicBeanClient.main(MyTopicBeanClient.java:33)

 

        在分析异常的时候我们不要一下子把自己扎入到一行行的堆栈提示中, 应该能够一眼看到核心的提示和异常内容,根据此异常信息分析问题出现的可能情况.例如在本例中


javax.naming.NameNotFoundException:mytopic not bound


       是这些异常信息中最关键的信息.通过定位关键错误信息我们可以更快的找到问题的解决方案.

      分析原因mytopic not bound,也就是我们先前的MDB没有被绑定,可能是MDB有问题,也有可能是Jboss的配置文件的问题,而这里出现的原因是因为Jboss的升级不支持原来的写法,所以我们需要在Jboss的配置文件中加上相关的绑定信息

 

具体做法如下:

        在目录D:\Environment\jboss-5.1.0.GA\server\default\deploy\messaging下找到:destinations-service.xml

添加如下配置:


	<mbean code="org.jboss.jms.server.destination.QueueService"  name="jboss.messaging.destination:service=Queue,name=myqueue"  xmbean-dd="xmdesc/Queue-xmbean.xml">  <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.QueueServiceMO)</annotation>        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>  <depends>jboss.messaging:service=PostOffice</depends>  </mbean>

 

         问题即可解决,但是是一个临时的解决方案,每个消息队列都需要添加一下配置文件,更好的解决方式正在寻找中.

 

问题上升

 

    通过对上面的异常分析一起以前的项目经验我们会经常遇到这类的问题,例如:

 

javax.naming.NameNotFoundException: *** not bound

 

          这时候我们需要做的是检查一下Namespace,Datasource,EJB,MDB 等等相关内容是否被绑定.如果想查看某个资源是否被绑定我们可以访问Jbossjmx-console.

         http://localhost:8080/jmx-console/

          然后选service=JNDIView,点击list下面的invoke 看一看现在 jboss 的 jndi 里面都有哪些对象直接看最下面的 global部分就可以了,看看有没有定义的资源如果有,那就说明部署成功了.调用应该就没有问题了.

         如下图:

计算机生成了可选文字:内夕.国抽普D二扩C豆蕊O乍0.。‘b.中国IT实践达人.语言交互平台.国外在线教育….新发现.〔mytop"GlobalJNDINamespaceobjectNdmeFilterUserTr.sacti。沼essi。nFactory份roxy:$rrox碑58ioplementsinterface。r'jbo,,tmusertxinterface,甘,erTrosacti。招e:,i。nFactory)per,istenceoit:.itN一e二auctionear(class:or'j即interface,N一in薛ontext)+一加cti。沼ervi。eJar禅aucti。nUnit(class:。r'hibernateimplSessi。nFactorylmpl)讥住DKe价eneratorFactory(class:。r'jbossejbplu'inskey'eneratoruuid切JIDKe价enerator下actory〕Sec二e阴ana'eoentyiew(class:or'j即interfacesN一in薛ontext)+一reoote一or'jbossdeplo萝ersspioana'eoentMana'eoentView(class:Proxyfor:。r'Jbossdeployer,spio.a'ementM.agementView)+一reoote(class:rroxyfor:。r'jbossdeployerssp:。ana'eoentM.a'ementView)Sec二eDeplo卿entM.a'er(class:。r'j即interfacesN一:n薛ontext〕+一reoote一or'jbossdeplo萝ersspioana'eoentdeployDeplo卿entMana'er(clas,:Proxyfor:or'jbo,,deployer,spimoa'ementdeployDeplo卿entM.ager)+一reoote(class:Proxyfor:。r'jbossdeplo萝ersspioana'eoentdeployDeplo卿entMana'er)HILoKe声eneratorFactory(class:。r'jbossejbplu'inskey'eneratorhiloHILoKe价eneratorFactory)X蛆o.ectionFactory(class:or'jbossjmsclient油ossConnectionFactor萝)stere汇onnectionFactory(class:or'jbossjoscl.ent油。:sConnectionFactor犷)ofileservice(classctio困ueue(class:or'jbossaop'enerate如roxiesADPProx娜2)or'jbossjmsdestination油ossQueue)toP+-cluProAucOSS.meS叼DS弓J们es弓刁二旦口』。口巴廿伪〔切lboss.mqlboss.pojoihnc'r‘叨”n朽nnSec二eProfileservi。e(cla,,:。rgj仰interface:N一in薛ontext〕+一reoote(class:rroxyfor:。r'jbosspr。filesery:。e:piProfilesery;。e)+一reoote一or'jbossprofileservicespiProfileservice(cla,,:Proxyfor:or'jbo,,profileservice,piProfileservice〕U,erM.a'erBe.(class:。r'j仰interfacesN一:n『ontext)+一reoote一coot沙ejb甘serMana'er(class:Proxyfor:。omt沙ejb甘,erMana'er)+一remote(class:Proxyfor:。omt沙ejb甘serMana'er)叭eue(clas,:or'j即interfacesNoin『ontext)+一my妙eue(class:orgjboss」msdestination皿ossQueue)+一D田(class:。r'jbossjmsdestinati。n皿ossQueue)+一Expir闷ueue(class:or'jbossjosdestination油。,sQueue)』U一』U尸,二~么.…」下舟尸.~-.~‘二.~廿.~1…~.r~,.~~二七.-一二-一~,二.~1气州0.~一尸.~~~孟二~口~孟~~.~~、一一一一一一一一一一一一一一一++l++11十11+++l++十+11+!l+!11占................……

      

        如果没有的话,需要手动配置,本文的问题解决方案是通过手动配置解决的,其他的情况例如使用数据库oracle等数据库需要配置相关的配置文件例如 oracle-ds.xml

        

         通过对此问题进行分析,并找到以前类似的问题进行归类总结能够很好的帮助我们提高解决问题的效率,以后再遇到类似的问题就能够迎刃而解.而所谓的项目经验就是在这一个个问题的分析,解决,汇总的过程中所积累的.

 

 

这篇关于带你走进EJB--MDB的NameNotFoundException的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/276384

相关文章

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

【Linux】萌新看过来!一篇文章带你走进Linux世界

🚀个人主页:奋斗的小羊 🚀所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言💥1、初识Linux💥1.1 什么是操作系统?💥1.2 各种操作系统对比💥1.3 现代Linux应用💥1.4 Linux常用版本 💥2、Linux 和 Windows 目录结构对比💥2.1 文件系统组织方式💥2.2

【python 走进NLP】两两求相似度,得到一条文本和其他文本最大的相似度

应用场景: 一个数据框里面文本,两两求相似度,得到一条文本和其他文本最大的相似度。 content source_id0 丰华股份军阀割据发生的故事大概多少w 11 丰华股份军阀割据发生的故事大概多少 22 丰华股份军阀割据发生的故事大概多少 33 丰华股份军阀割据发生的故事大概多少

【Python 走进NLP】NLP词频统计和处理停用词,可视化

# coding=utf-8import requestsimport sysreload(sys)sys.setdefaultencoding('utf-8')from lxml import etreeimport timetime1=time.time()import bs4import nltkfrom bs4 import BeautifulSoupfrom

【java 走进NLP】simhash 算法计算两篇文章相似度

python 计算两篇文章的相似度算法simhash见: https://blog.csdn.net/u013421629/article/details/85052915 对长文本 是比较合适的(超过500字以上) 下面贴上java 版本实现: pom.xml 加入依赖 <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</a

【python 走进NLP】simhash 算法计算两篇文章相似度

互联网网页存在大量的重复内容网页,无论对于搜索引擎的网页去重和过滤、新闻小说等内容网站的内容反盗版和追踪,还是社交媒体等文本去重和聚类,都需要对网页或者文本进行去重和过滤。最简单的文本相似性计算方法可以利用空间向量模型,计算分词后的文本的特征向量的相似性,这种方法存在效率的严重弊端,无法针对海量的文本进行两两的相似性判断。模仿生物学指纹的特点,对每个文本构造一个指纹,来作为该文本的标识,从形式上来

【python 走进NLP】文本相似度各种距离计算

计算文本相似度有什么用? 1、反垃圾文本的捞取 “诚聘淘宝兼职”、“诚聘打字员”…这样的小广告满天飞,作为网站或者APP的运营者,不可能手动将所有的广告文本放入屏蔽名单里,挑几个典型广告文本,与它满足一定相似度就进行屏蔽。 2、推荐系统 在微博和各大BBS上,每一篇文章/帖子的下面都有一个推荐阅读,那就是根据一定算法计算出来的相似文章。 3、冗余过滤 我们每天接触过量的信息,信息之间存在大量

【python 走进NLP】句子相似度计算--余弦相似度

余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度将向量根据坐标值,绘制到向量空间中,如最常见的二维空间。 github 参考链接:https://github.com/ZhanPwBibiBibi/CHlikelihood # -*- coding: utf-8 -*-import jiebaimport numpy as npimpor

【python 走进NLP】从零开始搭建textCNN卷积神经网络模型

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。人工智能教程 1、众所周知,tensorflow 是一个开源的机器学习框架,它的出现大大降低了机器学习的门槛,即使你没有太多的数学知识,它也可以允许你用“搭积木”的方式快速实现一个神经网络,即使没有调节太多的参数,模型的表现一般还

【python 走进pytotch】pytorch实现用Resnet提取特征

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂, 而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。人工智能教程 准备一张图片,pytorch可以方便地实现用预训练的网络提取特征。 下面我们用pytorch提取图片采用预训练网络resnet50,提取图片特征。 # -*- coding: utf-8 -*-import os