是否有编程方式来确定可用的 java ee 环境版本?
3 回答
没有标准的方法可以做到这一点。您可以做的最接近的方法是使用反射/ClassLoader 并检查在给定 Java EE 版本中引入的特定 API 类/方法。
在我的头顶上:
- 添加了 Java EE 6 / EJB 3.1
javax.ejb.Singleton
- 添加了 Java EE 5 / EJB 3.0
javax.ejb.Stateless
- 添加了 J2EE 1.4 / EJB 2.1
javax.ejb.TimerService
- 添加了 J2EE 1.3 / EJB 2.0
javax.ejb.MessageDrivenBean
在此之前是 J2EE 1.2 / EJB 1.1
不过,请注意,如果这是针对 Tomcat(根据标签判断),最好的方法是检查System.getProperty("tomcat.version")
. 您应该能够暗示基于 Tomcat 版本的 servlet 版本。
我不知道是否有办法获取 Java EE 版本号,但您可以获取 Servlet API 版本号和 JSP 版本号:
ServletContext
您可以从对象以独立于实现的方式获取 servlet api 版本。寻找getMajorVersion()
和getMinorVersion()
方法。您可以通过以下方式获取 JSP 版本:
JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion()
毫无疑问,平台(即应用服务器)特定的方法可以找到或推断各种版本号。
值得注意的是,如果您考虑到应用服务器供应商可能会做什么,“Java EE 版本”是一个橡皮概念。例如,挑选他们支持的 Java EE 技术,以及可能挑选的版本。例如,Tomcat 不支持所有 Java EE - 缺少 EJB 支持。
如果您使用的是 Tomcat,则可以使用类获取运行时的Servlet API 版本。org.apache.catalina.core.Constants
例如
if (Constants.MINOR_VERSION == 2 && Constants.MINOR_VERSION == 5) {
// Servlet 2.5
} else if(Constants.MINOR_VERSION == 3 && Constants.MINOR_VERSION == 0) {
// Servlet 3.0
} ...