转载---JBOSS错误信息

jboss 配置 jboss下载 jboss tomcat

初次使用EJB+JMS开辟项目,将其放到JBoss部署时,经常遇到一些错误和异常。有时在JBoss部署后启动不了,有时候虽然JBoss部署后能启动,但启动过程中发生一些异常。有时候,使用lookup查找远程EJB组件时报错,或者找不到。

现在将初次使用EJB3时遇到的一些错误和异常,以及错误出现的原因和解决方法记录下来,以便以后再次遇到时可以方便查找原因。同时也让其他想将EJB3放到Jboss部署,从中遇到同样问题的捏友们能方便找到错误的原因。在以后使用EJB3的开辟过程中,再遇到其他的问题,我会一并记录到这里。

下面仙列举几个问题:

(一) 调用EJB远程接口的客户端使用 lookup方法出现异常:

1. 异常信息:java.lang.ClassCastException: javax.naming.Reference cannot be cast to ………太长了后面省略。

问题原因:

Jboss目录下有个Client文件夹,下面有一些jar文件是给EJB的远程调用者准背的,这下面的jar文件应该放到我们的调用EJB的程序的classpath中。如果是开辟阶段,拷贝到工程里就行了。JBoss4和Jboss5略有不同,Jboss4下有忆■叫做jbossall-client的jar文件,这个jar中包含了所有客户端需要的class。JBoss5也有这个文件,可是体积相当小,因为里面没有实际的class,我们需要的class分散在其他的jar中。因此使用JBoss4只需要拷贝jbossall-client即可,使用JBoss5则需要拷贝Client下所有的jar。

2. 异常信息:javax.naming.CommunicationException [Root exception is java.io.InvalidClassException: org.jboss.ejb3.stateless.StatelessRemoteProxy; local class incompatible: stream classdesc serialVersionUID = 3 local class serialVersionUID = -

问题原因:

调用EJB的客户端所使用的JbossClient的类与实际工程部署的JBoss服务器版本不同引起的。我们开辟EJB项目时,可能用到的服务器时jboss4,可是开辟完成后部署到了Jboss5上,客户端使用的确是Jboss4的jbossall-client.jar,因此就引起了serialVersionUID不一致的错误。

3. 异常信息:javax.naming.NamingException

问题原因:

因为客户端按照ejb的JNDI名称远程查找时,没有找到对应名称的EJB组件。通常我们lookup时用的ejb名称是这样的 ejbname/remote,可是有时候我们用这样的名字来lookup组件时却找不到。其实在Jboss下发布EJB组件根据你发布的方式不同你的EJB组件的名字是不同的。

当你用ear形式发布工程时你的EJB名称需要带有工程名,像这样:氦程名/ejbname/remote的形式。

当你用jar形式发布工程时,EJB查找名是不需要带有工程名做前缀的。只要:ejbname/remote 这一部分即可。

(二)JBoss启动报错

1. 异常信息:Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List

问题原因:

实体类注解标注的位置有误,要么写在属性上,要么写在getter上,不能混合使用。

(三) JMS在JBoss部署和调用时,JBoss发生的异常错误

1.JBoss启动时报错,异常信息:for messagingType 'javax.jms.MessageListener ' not found in activation config [ActivationConfigProperty………….name='jms-ra.rar'

问题原因:

引起该异常的原因是因为音讯接收类上杀少注解缺少@ActivationConfigProperty(propertyName = "destination" propertyValue = "queue/OECPLoggerListener")

2.JBoss启动报错,异常信息:

Unable to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivatio nSpec

.........

WARN [JmsActivation] Failure in jms activation org.jboss.resource.adapter.jms.inflow.JmsActivatio nSpec

javax.naming.NameNotFoundException: OECPLoggerListener not bound

at org.jnp.server.NamingServer.getBinding(NamingServe r.java:771)

………

问题原因:

jboss下缺少服务配置文件,在jboss_home/server/default/deploy/目录下,添加忆■名称为xxx-service.xml的文件,内容类似下面:

queue/accpQueue

jboss.mq:service=DestinationManager

topic/accpTopic

jboss.mq:service=DestinationManager

用来描述音讯监听的JNDI音讯类型等信息。

3. JMS服务配置完成后,部署好的Jboss能正常启动,调试代码,音讯发送也正常没有异常,但是却收不到音讯

可能原因1:

发送器代码中可能没有调用session.commit()方法。有些EJB的教材上没有写这一行,导致我们照着它来学习的时候也不知道还需要commit。Commit以后音讯才能真正的发送出去。

可能原因2:

接收器上增加了过滤音讯的注解@ActivationConfigProperty(propertyName = "messageSelector" propertyValue = "MessageFormat = 'Version 3.4'") 去掉这个注解就可以接收到音讯了。

以上内容是我在将EJB3+JMS在Jboss部署上遇到的异常,同时也将个人的解决方法进行的陈述,希望可以帮助遇到同样问题的捏友,如果大家觉得有疑问,欢迎大家到 我的正式博客 上留下宝贵的留言进行相关讨论,谢谢!

本文(EJB+JMS部署到Jboss出现异常的解决方法)转载自百洋软件研究实验室

猜你喜欢

转载自letmedown.iteye.com/blog/1672295