ここでは、GeneXus Java ジェネレーターで追加された Jakarta EE のサポートについて説明します。また、アプリケーションをビルドして Java EE および Jakarta EE をサポートするサーブレットサーバーにデプロイする場合、また、後でサーバーにデプロイするためのパッケージを作成する場合に考慮すべきことについて説明します。
Jakarta EE は Java EE が進化したものです。Oracle は Java EE をオープンソースの団体 (Eclipse Foundation) に移管することを決定しました。この移管により名称が Jakarta EE に変更されました。また、最も重要な点として、クラスのすべてのパッケージが javax.* から jakarta.* に名称変更されました。
コンテナサーブレットの新しいバージョンでは既に Jakarta EE が実装され始めています。たとえば、Tomcat 10、GlassFish 6.0、Jetty 11 などです。
つまり、既存のプログラムをサーバーの新しいバージョンで稼働させるには、使用するフレームワーククラスを javax.* から jakarta.* に変更して再コンパイルする必要があります。
GeneXus 17 Upgrade 5 以降では両方のバージョンがサポートされます。そのため、コードをコンテナサーブレットの新規バージョンで実行することも、以前から稼働させていたバージョンで実行することもできます。そのために、標準クラスでリファクタリングが行われたほか、生成済みのコードの変更も必要になります。
GeneXus 標準クラスでリファクタリングが行われました。
gxclassR.jar JAR から javax パッケージへのすべての参照が削除され、インターフェースのみを含む gxwrappercommon.jar という新しい JAR が実装されました。
- javax は、gxwrapperjavax.jar という新しい JAR でサポートされます。
- jakarta は、gxwrapperjakarta.jar という新しい JAR でサポートされます。
生成済みのコードについては、新しい
[ Java platform support ] プロパティがあり、Java EE 向けに生成するか Jakarta EE 向けに生成するか、あるいは Java EE と Jakarta EE の両方を対象として生成するかを選択できます。
GeneXus では今後、JAR gxclassR.jar に加えて JAR gxwrappercommon.jar も含まれるようになります。また、選択したサーブレットコンテナのバージョンによっては、JAR gxwrapperjavax.jar か gxwrapperjakarta.jar が含まれます。
ローカルの Tomcat 環境へのデプロイメントを管理するために、
[ Tomcat version ] プロパティと
[ Tomcat path ] プロパティが新たに作成されました。
いくつかの標準クラスを使用する手書きのコードが gxwrappercommon.jar JAR でインターフェースとして実装された場合、コードの修正が必要になることがあります。
次に、問題があるコードのサンプルと、修正したコードのサンプルを示します。
古いコード 1:
java javax.servlet.http.HttpServletResponse response = httpContext.getResponse();
java response.setStatus( [ !&CodeService! ] );
修正したコード 1:
java com.genexus.servlet.http.IHttpServletResponse response = httpContext.getResponse();
java response.setStatus( [ !&CodeService! ] );
古いコード 2:
java bos = new java.io.BufferedOutputStream( respuesta.getOutputStream() );
修正したコード 2:
java bos = new java.io.BufferedOutputStream( respuesta.getOutputStream().getOutputStream() );
注: 修正したコードは Jakarta EE と Java EE のどちらでも機能しますが、古いコードは Java EE でのみ機能します。