当前位置: 代码迷 >> JBoss >> ant打包ejb jboss5.0 ejb not bound 错误 已经解决
  详细解决方案

ant打包ejb jboss5.0 ejb not bound 错误 已经解决

热度:3697   发布时间:2013-02-26 00:00:00.0
ant打包ejb jboss5.0 ejb not bound 异常 已经解决

ant编译ejb

4、部署ejb,ejb not bound。

Caused by:org.springframework.beans.factory.BeanCreationException: Error creating beanwith name 'userManager' defined in class path resource[applicationContext.xml]: Invocation of init method failed; nested exception isjavax.naming.NameNotFoundException: userManagerBean not bound

Caused by:javax.naming.NameNotFoundException: userManagerBean not bound


这个是部署ejb的时候特别经典的异常,也耗费了我整整一天的时间,最后的结果是:persistence.xml文件的unitName写错了。

这个问题的一个十分诡异的在于两个方面:第一,ejb在打包、发布部署的时候、启动jboss的过程中都没有任何异常提示,唯有到了访问ejb的时候报错。第二,先发布ejb,再发布war就会在启动jboss的时候不报错,而当ejb和war同时部署的时候就会报错。而这两个的异常原因是不一样的,于是在无比混乱的时候,我采用了各种办法来解决,最终分清了这两个不同原因的异常:

因为刚开始的时候才用ant打包ejb不成功,而对于ant打包ejb的环境我又不熟悉,分不清是程序的问题还是build.xml文件编写的问题还是平台(如jar包、jboss服务器等)的问题,于是我就转换到我熟悉的方式来测试:

首先引入一个曾经做过的成功的小demo,将他们(一个ejb,一个web)部署到jboss服务器上,启动jboss,啊哦,ejb not bound的异常就出现了。经过几次重启以后发现了原因所在:虽然jar和war是同时部署的,但是jboss服务器会先部署war后部署jar,因此war就找不到他需要的ejb,也就是ejb not bound。

于是先部署ejb再部署war,我得先让它跑起来。启动jboss是没有问题了,但是访问ejb的时候依然出现问题:ejb not bound。这我就不懂了,部署的时候没有错了,为什么还有错呢?几经周折,也百度了N多,说的天马行空,但是大部分都是说的ejb2.0中出现的问题及解决方法。最后在测试添加数据的时候,数据并没有入库,这时候想起数据源并没有配置,于是……问题就解决了一半了。

照着这个思路想下去,也许是我的配置文件或者类的编写(注解的引用等)出现了问题,但是在打包部署ejb的时候并不会报错呢?果然,在配置文件里,发现了unitName的错误。在我发现这个问题的前一步,还有一个问题我没有整明白:如果是先部署ejb再启动jboss,控制台没有任何异常信息,但是当我先启动jboss在部署ejb的时候,控制台很“给力”的打印了异常信息:找不到unitName。也就是我出现的问题。

部署的问题终于找到答案了:首先要先部署ejb,再部署war,不然就报错。第二,要保证ejb正确,但是在发布部署的时候,不一定能找到错误的根源。

当然还有一些小问题,比如sql语句写错了,界面语句写错了等。

5、http://blog.csdn.net/gaoge19861207/article/details/4669102


总结:如果能让异常显示出来,解决问题并不是难题,难就难在没有异常提示的时候,需要用自己各种方式去寻找定位异常。下面解决的这个问题就让我特别特别………………

其实吧,最最重要的是心态:越是新手(我觉得我也算是,虽然很多网友都不这么认为),越容易犯一种错误:低级错误,这本身并没有什么,问题在于,当犯了错以后,他自身并不去寻找这方面的原因,总是认为是更高级的错误,比如上面我犯的错,当然也亏得这些个“不寻找”,让我寻找了很久,也才能从中懂得更多原理。

 

同时部署jar 和 war:

当我把jar(项目中用到的ejb)和war(项目中的web部分)同时部署到jboss的时候始终报错ejb not bound。看着服务器启动的时候的控制台输出可以看出来,jboss5.0是先部署的war再部署的jar,因此会报错ejb not bound。


报错ejb not bound:jboss先部署war再部署jar。打包成ear问题解决。

上文说到的同时部署jar和war就会报错的问题,一种方法就是将就着,我可以先部署jar,然后部署war,就是多了一步而已,也不算太麻烦。

呵呵,估计没人采用这个办法(除非项目超级紧急,那么这个问题就算是次要问题了):

解决方法:将jar和war打包成ear再部署就ok了。

尽管这个解决方法只有一句话,我也整了一个上午,主要是其中还有一些小问题。

 

1楼lfmilaoshi1小时前
专家呀。。。。米老师
  相关解决方案