有没有办法在运行时确定Java EE版本?

时间:2013-01-20 00:14:38

标签: java java-ee

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

3 个答案:

答案 0 :(得分:5)

没有标准的方法可以做到这一点。您最接近的方法是使用reflection / 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版本。

答案 1 :(得分:4)

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

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

  • 您可以按如下方式获取JSP版本:

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

毫无疑问,平台(即appserver)可以找到或推断各种版本号。


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

答案 2 :(得分:2)

如果您使用的是Tomcat,则可以使用Servlet API version类获取org.apache.catalina.core.Constants运行时。 e.g。

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
} ...