部署EJB一定要仔细观察应用服务器的控制台消息

EJB 的部署一向是个头疼的问题,在部署行为和默认设置上,应用服务器之间,甚至是同一服务器的不同版本之间都可能有着很大的差异。这几天刚用上JBoss 5.10GA,碰上一个傻帽问题,发现原因后差点没气得呛死。

事情是这样,照规矩我在拿到新的服务器时都要先写一个HelloWorld试验,图方便就在MyEclipse里直接建立了一个EAR项目(PlayEJB1),同时选择新建一个EJB项目和一个WEB项目。EJB项目里写了一个HelloStatelessBean,Web项目里新建一个JSP写好JNDI查找的字串如下:
"HelloStatelessBean/local"
实验证明,JNDI查找失败,抛出NameNotFoundException。

我非常奇怪,HelloStatelessBean是这个EJB 的ejbName,这在JBoss部署项目时在控制台里打印得白纸黑字的,怎么可能NameNotFound?抱着试一试的态度,我把EAR项目卸除,然后仅仅部署里面的EJB项目,这一次居然试验成功没有异常!由此想到,JBoss在部署EAR项目时很可能采用了与单独部署EJB项目不同的JNDI命名策略。仔细观察控制台消息,几行平日让我熟视无睹的INFO日志让我恍然大悟:
23:14:36,093 INFO [EJBContainer] STARTED EJB: com.jeff.ejb.HelloStatelessBean ejbName: HelloStatelessBean
23:14:36,140 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:

PlayEJB1/HelloStatelessBean/remote - EJB3.x Default Remote Business Interface
PlayEJB1/HelloStatelessBean/remote-com.jeff.ejb.HelloStatelessRemote - EJB3.x Remote Business Interface
PlayEJB1/HelloStatelessBean/local - EJB3.x Default Local Business Interface
PlayEJB1/HelloStatelessBean/local-com.jeff.ejb.HelloStatelessLocal - EJB3.x Local Business Interface

原来如此!EAR项目里的EJB的JNDI,被JBoss加上了EAR项目名作为前缀,单独部署EJB项目时JNDI这样查"HelloStatelessBean/local",而在EAR里变成了"PlayEJB1/HelloStatelessBean/local"。其实JBoss这样做是有些道理的,最起码有了EAR项目名称作为命名空间,EJB的重名可能大大减少。但是开发者就倒霉了,每个服务器都有自己的个性,开始干活之前还要一个个分别调教,太累了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值