【问题标题】:Is there a way to determine the Java EE version at runtime?有没有办法在运行时确定 Java EE 版本?
【发布时间】:2013-01-03 10:17:49
【问题描述】:

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

【问题讨论】:

  • 您标记了 Tomcat7。只是想说,Tomcat7 并不完全是 Java EE 应用服务器。它“只是”一个 JSP/Servlet 容器。 Glassfish、JBoss AS 和 TomEE 是成熟的 Java EE 应用服务器(JSP/Servlet/JSF/JPA/EJB/etc/etc)的示例。
  • 明白。大部分时间都在使用 TomEE,但需要弄清楚安装期间是否可以使用正确的环境。

标签: java jakarta-ee


【解决方案1】:

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

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

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

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

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


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

【讨论】:

  • 请注意,web.xml 中的<web-app version>ServletContext#getMajorVersion()getMinorVersion() 有影响。理论上,这可以设置为 2.5,而容器本身支持 3.0。然后容器以回退方式运行。如有必要,这可以与检查 Servlet 3.0 特定类(例如 @WebServlet 注释)是否在类路径中相结合,具体取决于 OP 需要此信息的确切原因。
  • 注意,在任何经过​​认证的 Java EE 服务器上都不允许挑选樱桃。这是创建 TomEE 的主要原因,因为普通 Tomcat 不包括 quite a bit more than EJB
  • ServletContext 有 四个 相关方法:`get[Effective]{Major|Minor}Version()'。有关详细信息,请参阅 JavaDoc。
【解决方案2】:

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

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

【讨论】:

  • 有一种便携的方法可以做到这一点......看我的回答
【解决方案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 版本。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 2022-12-19
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多