WebSphere客户端迁移的一般问题

现象:J2EE应用在迁移时因为之前使用特定厂商的特殊实现,因此各种编译或者运行时的异常
原因:厂商实现的差别
解决办法:

一、 J2EE标准的遵循

几乎没有一个J2EE应用程序,在不经过任何改动的情况下,可以运行在WebSphere 应用服务器上,其中一个原因就是大多数的应用程序没有完全遵循J2EE规范,并且很多J2EE应用服务器都在某种程度上放宽了对于应用程序的限制。

1 何时使用PortableRemoteObject进行对象造型

    基于IIOP协议,我们需要使用PortableRemoteObject来转换返回的stub对象,而基于WebLogic使用的t3协议,这个操作是可选的 如果stub对应的是远程接口,此方法是必要的;如果stub对应的是本地接口,此方法是可选的
  • 如果在不需要的情况下(例如访问本地接口的EJB时)使用了此方法,系统可以正常运行,但不推荐使用;如果在必需的情况下(例如访问远程接口的EJB时)没有使用此方法,那么系统会抛出ClassCastException

2 EJB引用

    根据EJB2.0规范,使用本地的JNDI上下文(javacomp/env)来查找EJB是必须的。但是很多J2EE服务器对此放宽了要求,在使用全局的JNDI上下文时,同样可以正常运行。然而,WebSphere则严格遵循了这一约束。 在部署描述符中需要添加EJB引用 每个EJB home都需要绑定一个全局的JNDI名称,绑定信息会存放在ibm-ejb-jar-bnd.xmi文件中 WebSphere中,每个EJB引用(ejb-ref)必须绑定一个全局JNDI名称;而在WebLogic中,全局JNDI名称不总是必需的,当使用ejb-link时,全局JNDI名称是可选的
  • 如果使用的是EJB的远程接口,按照规范,需要通过本地的JNDI名称和EJB引用来访问。如果使用了全局的JNDI名称访问,也可以在WebSphere中正常运行,但这个操作是违规的,而且可能会导致将来的不兼容问题

3、对于本地接口的EJB引用

    WebSphere中,如果没有使用本地JNDI名称查找本地EJB,将会出错 不需要使用PortableRemoteObject进行类型转换 必须使用本地JNDI名称
  • 必须使用EJB引用

4、构建时的错误

    先修复部署描述符的错误信息。根据任务视图的提示,可以轻松定位和修复错误(主要包括部署描述符的版本信息、JNDI名称、各种引用等等)
然后根据任务视图的提示定位和修复编译错误(比如JAVA CLASS的丢失等等)
请使用浏览器的分享功能分享到微信等