8

是否有编程方式来确定可用的 java ee 环境版本?

4

3 回答 3

6

没有标准的方法可以做到这一点。您可以做的最接近的方法是使用反射/ClassLoader 并检查在给定 Java EE 版本中引入的特定 API 类/方法。

在我的头顶上:

  • 添加了 Java EE 6 / EJB 3.1javax.ejb.Singleton
  • 添加了 Java EE 5 / EJB 3.0javax.ejb.Stateless
  • 添加了 J2EE 1.4 / EJB 2.1javax.ejb.TimerService
  • 添加了 J2EE 1.3 / EJB 2.0javax.ejb.MessageDrivenBean

在此之前是 J2EE 1.2 / EJB 1.1

不过,请注意,如果这是针对 Tomcat(根据标签判断),最好的方法是检查System.getProperty("tomcat.version"). 您应该能够暗示基于 Tomcat 版本的 servlet 版本。

于 2013-01-20T00:34:06.640 回答
6

我不知道是否有办法获取 Java EE 版本号,但您可以获取 Servlet API 版本号和 JSP 版本号:

  • ServletContext您可以从对象以独立于实现的方式获取 servlet api 版本。寻找getMajorVersion()getMinorVersion()方法。

  • 您可以通过以下方式获取 JSP 版本:

    JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion()

毫无疑问,平台(即应用服务器)特定的方法可以找到或推断各种版本号。


值得注意的是,如果您考虑到应用服务器供应商可能会做什么,“Java EE 版本”是一个橡皮概念。例如,挑选他们支持的 Java EE 技术,以及可能挑选的版本。例如,Tomcat 不支持所有 Java EE - 缺少 EJB 支持。

于 2013-01-20T01:04:16.167 回答
2

如果您使用的是 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
} ...
于 2013-01-20T00:41:42.790 回答