JBOSS 部署出错 javax.management.InstanceNotFoundException

Posted

技术标签:

【中文标题】JBOSS 部署出错 javax.management.InstanceNotFoundException【英文标题】:Error in JBOSS deployment javax.management.InstanceNotFoundException 【发布时间】:2013-06-02 21:35:34 【问题描述】:

我在我的环境中遇到了一个非常奇怪的问题,那就是 jboss-5.1.0.GA java版本“1.6.0_33” Java(TM) SE 运行时环境 (build 1.6.0_33-b03) Java HotSpot(TM) 64 位服务器 VM(内部版本 20.8-b03,混合模式)

直到我在上下文中更新某个 jar 的版本(在此之前在 6 个环境中进行了测试,没有错误)之前,它是完全可用的。 在错误之前我有这个文件:

服务器/默认/部署/我的文件夹

-rw-r--r--  1 jboss users  808430 May 16 17:29 s-c-core-2.38.6.0.jar
-rw-r--r--  1 jboss users  555328 May 16 17:29 s-c-dao-2.38.6.0.jar
drwxr-xr-x  9 jboss users    4096 Jun  3 20:11 s-c-web.war
-rw-r--r--  1 jboss users  199259 May  2 16:58 s-com-core-2.38.5.0.jar
-rw-r--r--  1 jboss users  202086 May  2 16:58 s-com-dao-2.38.5.0.jar
-rw-r--r--  1 jboss users 1333612 May  2 16:58 s-com-domain-2.38.5.0.jar
-rw-r--r--  1 jboss users   86526 May  2 16:58 s-com-util-2.38.5.0.jar
-rw-r--r--  1 jboss users  660621 May 11 13:01 s-fin-core-2.38.6.0.jar
-rw-r--r--  1 jboss users  559292 May 11 13:01 s-fin-dao-2.38.6.0.jar
drwxr-xr-x  8 jboss users    4096 May 15 21:41 s-fin-web.war
-rw-r--r--  1 jboss users  108444 May  7 07:29 s-geio-engine-2.38.5.0.jar
drwxr-xr-x  8 jboss users    4096 May 15 21:24 s-geio-web.war
-rw-r--r--  1 jboss users   71975 Jun 14  2012 s-o-core-1.1.4.0.jar
-rw-r--r--  1 jboss users   66516 Jun 14  2012 s-o-dao-1.1.4.0.jar
-rw-r--r--  1 jboss users   53532 Jun 14  2012 s-o-domain-1.1.4.0.jar
-rw-r--r--  1 jboss users   16347 Jun 14  2012 s-o-util-1.1.4.0.jar
drwxr-xr-x  5 jboss users    4096 Jun 14  2012 s-o-web.war
-rw-r--r--  1 jboss users   54588 Apr 10 11:29 s-p-core-2.38.2.0.jar
-rw-r--r--  1 jboss users   35784 Apr 10 11:29 s-p-dao-2.38.2.0.jar
drwxr-xr-x  8 jboss users    4096 Apr 10 19:20 s-p-web.war
-rw-r--r--  1 jboss users   69140 Jun 14  2012 s-s-se-1.1.0.jar
-rw-r--r--  1 jboss users  594214 May 13 13:36 s-ser-core-2.38.6.1.jar
-rw-r--r--  1 jboss users  530903 May 13 13:36 s-ser-dao-2.38.6.1.jar
drwxr-xr-x  9 jboss users    4096 May 15 21:58 s-ser-web.war
drwxr-xr-x  6 jboss users    4096 May 28 08:27 s-te-me.war
-rw-r--r--  1 jboss users  155639 May 15 22:06 s-uni-core-2.38.5.0.jar
-rw-r--r--  1 jboss users  145944 May 15 22:05 s-uni-dao-2.38.5.0.jar
drwxr-xr-x  7 jboss users    4096 May 15 21:20 s-uni-web.war

然后我停止我的 jboss (/etc/init.d/jbossd stop) 并只更新这三个文件/文件夹(删除旧的并放入新的)

-rw-r--r--  1 jboss users  808430 May 16 17:29 s-c-core-2.38.7.0.jar
-rw-r--r--  1 jboss users  555328 May 16 17:29 s-c-dao-2.38.7.0.jar
drwxr-xr-x  9 jboss users    4096 Jun  3 20:11 s-c-web.war

在以 root 用户和命令“/etc/init.d/jbossd start”启动服务器之后 在某些时候,用户开始使用应用程序,并且在日志文件 server/default/log/server.log 上开始出现一些奇怪的错误,如下所示:

2013-06-04 00:01:30,615 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/jmx-console].[htmlAdaptor]] (http-0.0.0.0-80-3) Servlet.service() for servlet HtmlAdaptor threw exception
javax.management.InstanceNotFoundException: jboss.j2ee:jar=s-c-core-2.38.6.0.jar,name=ApCarBusinessImpl,service=EJB3 is not registered.
      at org.jboss.mx.server.registry.BasicMBeanRegistry.get(BasicMBeanRegistry.java:526)
      at org.jboss.mx.server.MBeanServerImpl.getMBeanInfo(MBeanServerImpl.java:675)
      at org.jboss.jmx.adaptor.control.Server.getMBeanData(Server.java:98)
      at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet$1.run(HtmlAdaptorServlet.java:357)
      at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet$1.run(HtmlAdaptorServlet.java:354)
      at java.security.AccessController.doPrivileged(Native Method)
      at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet.getMBeanData(HtmlAdaptorServlet.java:353)
      at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet.inspectMBean(HtmlAdaptorServlet.java:224)
      at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet.processRequest(HtmlAdaptorServlet.java:100)
      at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet.doGet(HtmlAdaptorServlet.java:81)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
      at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
      at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
      at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
      at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
      at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
      at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:383)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
      at java.lang.Thread.run(Thread.java:619)

说 EJB 没有被实例化(很多) 但用户没有任何反应,应用程序继续正常工作

所以我开始验证文件 s-c-core-2.38.6.0.jar 是否没有留在我的 jboss 内的某个文件夹中,并且没有。所以我开始认为这是 jboss 正在读取的某种缓存,所以我停止服务并删除文件夹 server/default/tmp 和 server/default/work 并重新启动服务器,但错误继续出现在日志中。

我的 run.conf 是这样的配置:

JAVA_OPTS="-DSB_BASE=$SB_BASE -Dmodulo.context.file=s-o-core-context.xml;s-com-core-context.xml;s-ser-core-context.xml;s-geio-core-context.xml;s-fin-core-context.xml;s-c-core-context.xml;s-uni-core-context.xml;s-p-core-context.xml -Xmx3072m -Xms768m -XX:MaxPermSize=256m -Xss1024k -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -XX:+UseConcMarkSweepGC -Djava.awt.headless=true"

我尝试了很多方法,例如用户权限、文件夹权限、内存配置 (xmx xms),并且错误一直出现在日志文件中。

当我回到我更改的文件 (sc--2.38.6.0 ) 时,应用程序停止显示此错误,所以我显然虽然错误与该软件包有关,但我申请了它在镜像服务器上,错误没有出现。

所以我现在没有选择。该应用程序对用户来说运行良好,但错误一直出现在日志中,这很烦人。

这里有人经历过这样的事情吗?

2天前我在community.jboss.org上发布了这个问题,没有任何帮助:

提前致谢, 对不起我的英语。

【问题讨论】:

不客气。我很高兴能帮上忙。你在追查这件事上表现出了很大的毅力,向你致敬! 【参考方案1】:

该错误基本上意味着 JBoss 无法在其树中找到服务 MBean。您看到 jmx-console 中部署了该服务吗?

您看到InstanceNotFoundException: jboss.j2ee:jar=s-c-core-2.38.6.0.jar,name=ApCarBusinessImpl,service=EJB3 is not registered 是因为:

某些外部服务/工具/应用程序或您自己的应用程序正在尝试调用该特定服务 (name=ApCarBusinessImpl,service=EJB3)。由于 JBoss 找不到它部署在任何地方(由于您更新了已部署的 JAR),它只是记录了它找不到被要求调用的 MBean 的消息。

要解决此问题,您需要找出是谁在旧服务名称 (jboss.j2ee:jar=s-c-core-2.38.6.0.jar) 上发出请求,并将其更新为指向新服务名称。这应该可以解决看到这些异常日志消息的问题。

豪尔赫·坎波斯编辑:

正如@Coolbeans 所说,它确实是一个外部服务,它正在调用我在 JBoss 上启动的 bean。我发现在安装的 jboss 中存在未正确配置的安全问题(jmx-console)。因此,有一个蠕虫正在向我的应用程序服务器(某种缓存)中预先安装的 bean 发出请求。在对 jboss 安装进行了一些挖掘之后,我发现了这个战争 iesvc.war,它是这个线程中所述的蠕虫 https://community.jboss.org/blogs/mjc/2011/10/20/statement-regarding-security-threat-to-jboss-application-server

蠕虫是 JAVA_JBOSSPY.A,由趋势微办公室扫描识别。

感谢@Coolbeans 的回答,正如你所说,这是一个“一些外部服务/工具/应用程序”。

【讨论】:

嗨@CoolBeans,我查看了 jmx-console 并且该服务未部署,这是我的第一个想法。甚至可以向这样的特定 jar 发出请求?我们使用 spring 来初始化 bean,然后(它肯定)都没有引用特定的 JAR。它们仅引用 bean 的名称“ApCarBusinessImpl”,并且在部署的新 jar 中引用了这个名称。如果我在洞服务器的 xml 文件中找到这个特定的文本,我已经使用了一些命令来检查,但什么也没有。 关于这个“某些外部服务/工具/应用程序或您自己的应用程序正在尝试调用该特定服务(名称=ApCarBusinessImpl,service=EJB3)。由于 JBoss 无法找到它部署在任何地方”那是问题,这是在新版本中部署的,当jboss启动时我可以在日志中找到它正在启动。我们创建了所有应用程序,以便与旧版本一起使用。 另一个信息是这些版本 2.38.6.0 和 2.38.7.0 之间没有添加或删除任何 bean,也没有添加任何新内容。我刚刚检查了 spring bean 文件之间的差异 @JorgeCampos - 它不是通过 jar 名称而不是服务名称找到它。 @JorgeCampos - 我不确定我是否理解您的第二条评论。对于新应用,您在 jmx-console 中看到了哪些服务信息?【参考方案2】:

这有时是由 PU 名称引起的。尝试将 PU 名称更改为另一个名称,清理并构建和部署。

问候

【讨论】:

嗨@Ushahemba,这是关于我的 jboss 应用服务器上的蠕虫。无论如何感谢您的帮助。

以上是关于JBOSS 部署出错 javax.management.InstanceNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

JBoss5:由于 java.util.zip.ZipException 无法部署:打开 zip 文件时出错

从 JBoss 7.1 引用依赖 Jar 文件时出错

在 jboss 中部署应用程序失败

JBoss Tools部署错误:这可能是由于服务器的临时部署目录位于与最终目标不同的文件系统上

如何使用 Java 代码使用 jboss-cli 命令将 EAR 文件部署到 wildfly-17.0.1 服务器

关闭 JBOSS 时出错