应用能不能移植到TongWeb上,主要看应用采用的JavaEE规范。而如今应用开发大量采用spring、hibernate等开源框架,很多人逐渐不了解底层的JavaEE规范,我们可以从以下几方面来了解应用采用的JavaEE规范。以常用web应用为例:
一、通过应用的web.xml来判断
J2EE 1.4规范的web.xml文件头:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd version="2.4">
JavaEE5规范的web.xml文件头:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd version="2.5">
JavaEE6规范的web.xml文件头,但web.xml在JavaEE6规范的应用中是可以没有的。
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0" metadata-complete="false">
JavaEE7规范的web.xml文件头,但web.xml在JavaEE7规范的应用中是可以没有的。
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" metadata-complete="false">
JavaEE8规范的web.xml文件头,但web.xml在JavaEE8规范的应用中是可以没有的。
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0" metadata-complete="false">
二、通过应用采用的JDK版本来判断
JavaEE规范 | JDK版本 |
J2EE 1.4 | 最低JDK1.4版本 |
JavaEE5 | 最低JDK5.0版本 |
JavaEE6 | 最低JDK6.0版本 |
JavaEE7 | 最低JDK7.0版本 |
JavaEE8 | 最低JDK8.0版本 |
三、通过应用服务器版本来判断,以tomcat为例:
JavaEE规范之web规范 | tomcat版本 |
J2EE 1.4 web规范 | tomcat5.x |
JavaEE5 web规范 | tomcat6.x |
JavaEE6 web规范 | tomcat7.x |
JavaEE7 web规范 | tomcat8.x |
JavaEE8 web规范 | tomcat9.x |
通过了解应用支持的应用服务器版本可判断采用的JavaEE规范。JavaEE规范理论上向下兼容。若应用可以在tomcat8上运行,则肯定说明应用没有采用JavaEE8规范,但反之并不成立,应用运行在tomcat9上并不能说明应用采用了JavaEE8规范。
四、通过JavaEE的javadoc文档中注明的规范版本。
此方式仅适合移植出现问题时参考应用代码,并不适合移植前查看应用所有代码。
只有在移植时可看到对该API是否支持
java.lang.IllegalStateException: HttpServletRequest.changeSessionId is undefined. Are you using a Servlet 3.1+ environment?
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
五、通过常用开源框架对JavaEE规范的支持要求来判断,如下Spring Boot。
六、了解应用用了哪些与应用服务器相关的接口。
应用尽量不要用与应用服务器绑定的代码,这样影响可移植性。 例如:hibernate提供支持weblogic和websphere的全局事务接口,如:org.hibernate.transaction.WeblogicTransactionManagerLookup和org.hibernate.transaction. WebSphereTransactionManagerLookup。这时就需要修改hibernate配置,改用TongWeb的全局事务接口。
有些还采用了一些应用服务器特有的硬编码,如:import weblogic.wtc.jatmi.* ,这种情况如果要移植到TongWeb上只能通过修改应用代码来完成。
总结:
通过以上六点基本可以判断出应用是否适合移植到TongWeb上。但需要说明的是不同应用服务器之间有差异、JDK和JavaEE规范并不能100%向下兼容,所以在移植时多多少少需要做些改动。
JavaEE规范:Java Platform, Enterprise Edition (Java EE) | Oracle Technology Network | Oracle