从Jboss4.0.2迁移到Jboss5.1.0

最近干了一件吃力的事情, 把以前的EJB2.x应用从Jboss4迁移到Jboss5.

 

刚开始, 流年不利啊, 部署到Jboss5上后奇奇怪怪的问题不断, 就查Jboss的文档, 从WWW.Jboss.org找了一份Jboss5的"administrator and configuration guide", 打开一看, 书中写到"The primary focus of this book is the presentation of the standard JBoss 4.2 architecture components .... ", 唉, 不晓的是不是因为希望大家买它的服务的缘故, 文档都不更新很久了.

 

只好自己找资料, 看源代码(打算来着), 现在把遇到的问题记录如下, 以后再有这种活, 也可参考一下:

 

1. 将原来的部署文件app-deploy.xml放到Jboss deploy目录下, 4可以正确部署, 5毫无反应

    应该是Jboss的部署器修改了文件名规则, 从源代码上看, 好像会部署"*-service.xml", "*-jboss-beans.xml".

    不过我没有改文件名, 因为这次要部署的不多, 我改的jboss-service.xml

 

2. 开始部署后, 抛异常, 说 xxxx name not bound.

   有两个原因都可能导致这个问题:

   一个是depandens 没有写对. EJB2.x的部署器应该是EJBDeployer, 如果depandens没有写对的话, 在EJBDeployer加载前就部署, 会被SARDeployer部署, 这个时候jar里的东西实际上没有被部署.

   增加了Depandens后可以解决这种问题

 

   第二个是Jboss.xml没写对.导致jar包部署失败. 这种情况会有一个伴生的异常: ClassCastException

 

3. 奇怪的ClassCastException

   打印消息 "Can not cast JbossEJBEntityBean to class JbossEJBSessionBean"

   原来是Jboss.xml里写错了.

   在Jboss4 中, 不论EntityBean还是SessionBean, 都可以写成<sesseion>...., Jboss可以成功加载

   在Jboss5中, 如果实际上是一个EntityBean, 但是继续在Jboss.xml里写session的话, 就会触发这个异常, 然后, 相关Bean的JDNI name自然是not bounded

   这个确实是之前项目的配置文件没有做规范, 不过就是提示信息有些摸不着头脑, 压根没提是在处理Jboss.xml时出的错, 我在ejb-jar.xml里上上下下查了一个多星期, 也没想通哪里让Jboss认为那是个SessionBean的.

 

4. XML校验异常, 显示信息 "Element <session> must match (description?, ..." 啥的

   原因是, 在Jboss4里, 校验DTD的时候, 是校验是否只包含指定的子元素,子元素的个数是否满足DTD的定义等等.

   在Jboss5里, 加载EJB2.x的配置文件时, 会校验DTD, 除了4里要校验的内容外, 还校验子元素出现的顺序是否和DTD里定义的一致!

   说实话, 我不能理解这种校验的必要性, 不过受制于人, 他要这样校验,就只好改ejb-jar.xml了, 对照DTD的顺序, 把子元素移动一下就好了.

 

5. deploy depadencs fail ....due to EJBTimerService.... should be start but .... current stat is Configured.

   这个错误我觉得最不可理解了.

   在部署EJB2.x的时候, 使用的是EJBDeployer, 而且在conf/bootstrap/deployers.xml中, 已经指明了EJBDeployer会依赖EJBTimerService, 但是在实际部署过程中, 却是没有在EJBTimerService启动之前就开始部署EJB2.x的东东了. 等EJBTimerService启动完了, 异常已经抛出来了.

   只好手动在添加对EJBTimerService的依赖, 问题解决.

 

大概找了2个星期才解决了迁移的问题, 我刚开始用Jboss, 估计有些解决方法只是碰巧, 可能不对, 希望看到错误的同学能指点指点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值