使用可能なJavaee環境のバージョンをプログラムで判断する方法はありますか?
3 に答える
Java EE のバージョン番号を取得する方法があるかどうかはわかりませんが、サーブレット API のバージョン番号と JSP のバージョン番号を取得できます。
オブジェクトから実装に依存しない方法でサーブレット API のバージョンを取得でき
ServletContext
ます。getMajorVersion()
メソッドとメソッドを探しgetMinorVersion()
ます。JSP バージョンは次のように取得できます。
JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion()
また、さまざまなバージョン番号を検索または推測するためのプラットフォーム (つまりアプリケーションサーバー) 固有の方法があることは間違いありません。
appserver ベンダーが何をするかを考えると、「Java EE バージョン」というのはゴムのような概念であることに注意してください。たとえば、サポートしている Java EE テクノロジをチェリー ピッキングし、場合によってはバージョンをチェリー ピッキングします。たとえば、Tomcat はすべての Java EE をサポートしているわけではありません。EJB のサポートはありません。
それを行う標準的な方法はありません。最も近い方法は、リフレクション/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 のバージョンに基づいてサーブレットのバージョンを暗示できるはずです。
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
} ...