paint-brush
バック・トゥ・ザ・フューチャー: Java 8 を使用して GlassFish 4 で Spring Boot 2 を実行する@isharipov
268 測定値

バック・トゥ・ザ・フューチャー: Java 8 を使用して GlassFish 4 で Spring Boot 2 を実行する

ILia Sharipov8m2024/08/26
Read on Terminal Reader

長すぎる; 読むには

すべての開発者は、最新のテクノロジーを使用して最新の状態を維持することを夢見ています。実際、時代遅れで、時代遅れで、多くの場合効果のないテクノロジーを中心に強力な採用戦略を構築することはほぼ不可能です。Spring Boot は、独立して実行できる場合に、アプリケーション サーバーにアプリケーションをデプロイするために使用できます。Java 8 は、現在のプロジェクトの 28% でまだ使用されています。
featured image - バック・トゥ・ザ・フューチャー: Java 8 を使用して GlassFish 4 で Spring Boot 2 を実行する
ILia Sharipov HackerNoon profile picture
0-item

否認、怒り、交渉、憂鬱…

すべての開発者は、最新のテクノロジーを駆使して最新の状態を維持することを夢見ています。実際、時代遅れで、時代遅れで、多くの場合効果がなく、未だに生まれていないテクノロジーを中心に強力な採用戦略を構築することはほぼ不可能です。


しかし、人生は複雑であり、すべてが必ずしも私たちの欲望によって決まるわけではありません。


昇進のオファーを受けて、何年もテクノロジーが変わっていない、または更新されていないプロジェクトに異動になるかもしれません。あるいは、現在のテクノロジー スタックに特に興味がない、夢の会社に就職するかもしれません。大学を卒業したばかりで、初めての仕事の経験を積みたいと思っているかもしれませんし、前の仕事を解雇され、経済的困難を避けるためにすぐに新しい仕事を見つける必要があるかもしれません。


別のシナリオもあります。面接中に、現在のスタックで作業を開始するが、将来的には変更する機会が十分にあると言われます。おそらく、可能性はありますが...


承認…

しかし、正直に言うと、これはすべて単なる哲学です。私も同意します。そこで、皆さんが挑戦的なキャリアパスで遭遇する可能性のある実際のケースを分析することを提案します。


JVM スタックのすべてのファン、特に Spring Framework を愛するファンの皆さん、ぜひお読みください。


ところで、 Spring Bootアプリケーションは独立して実行できるのに、なぜアプリケーション サーバーにデプロイする必要があるのでしょうか? 結局のところ、それが Spring Boot の優れた機能の 1 つです。


これにはいくつかの理由が考えられます:

  1. GlassFish または別の EE アプリケーション サーバーにアプリケーションをデプロイするためのインフラストラクチャがすでに設定されている場合があります。この場合、EE アプリケーション サーバーはインストールされ、構成され、完全にサポートされています。Spring Boot の場合のようにアプリケーションが独立して実行できる場合でも、デプロイと実行のためのインフラストラクチャを準備して維持する必要があります。
  2. しばらくすると、アプリケーションサーバーを放棄し始め、現在の環境で使用できる可能性のある将来使用するテクノロジを事前に使用し始めることがわかります。
  3. チーム内のさまざまな経験と専門知識
  4. 実験と仮説検証

Java 8

Java 8 は 2014 年 3 月 18 日にリリースされ、今日まで使用されている画期的な機能をもたらしました。

例は多くありませんが、いくつか挙げると次のようになります。

  • ラムダ式

  • ストリームAPI

  • オプションクラス

  • java.time パッケージ (日付と時刻 API)

  • などなど


それ以来、現在( 2024 年 8 月 19 日)までに3 つの LTS バージョンがリリースされています。

  • Java SE 11(55) - 2018年9月25日
  • Java SE 17(61) - 2021年9月14日
  • Java SE 21(65) - 2023 年 9 月 19 日


New Relic が実施した調査によると、Java 8 は現在のプロジェクトの 28.8% で依然として使用されており、これは決して小さな数字ではないことはご承知のとおりです。そのシェアは年々徐々に減少していますが、このテクノロジーを完全に否定するのは時期尚早です。

https://newrelic.com/resources/report/2024-state-of-the-java-ecosystem

グラスフィッシュ4.1.2

Eclipse GlassFish 専用の Project Eclipse Web サイトによると、次のようになります。


Eclipse GlassFish® は、Jakarta EE 仕様を実装する完全なアプリケーション サーバーです。GlassFish には、すべての必須およびオプションの Jakarta EE API の実装が含まれており、すべての Jakarta EE TCK に合格しています。GlassFish には、完全な管理コンソール、クラスタリング サポート、その他の開発者および本番環境向けのツールと機能も含まれています。


残念ながら、この Web サイトから 5.1.0 より前のバージョンをダウンロードすることはできませんが、5 より前のバージョンを使用することにしたため、 Oracle Web サイトにアクセスする必要があります。この Web サイトのダウンロード セクションで、この製品の以前のバージョンをいくつか見つけることができます。ただし、ライセンスには注意し、このフォルダーの内容をサンドボックスの外部で使用しないでください。


配布ファイルをマシン上のどこかに置き、 binフォルダーに移動して、次のコマンドを実行するだけです。

 ./asadmin start-domain --verbose


しばらく待ってから、 http://localhost:4848/を開いてみてください。管理コンソールはデフォルトで利用可能で、いかなる種類の資格情報も求められないはずです。左側のパネルに [アプリケーション] タブがあります。これをクリックすると、アプリケーションのデプロイ、デプロイ解除、有効化、無効化を行うことができるメニューにアクセスできます。


現時点で、アプリケーションを GlassFish にデプロイするために GlassFish について知っておく必要があるのはこれだけです。

スプリングブート2

ウェブ開発の世界で、この人気のあるフレームワークについて一度も聞いたことがない人を見つけるのは、おそらくかなり難しいでしょう。

Spring Boot 2 は 2021 年にリリースされ、最小バージョンとしてJava 17 を必要とするバージョン 3 とは異なり、最小バージョンとしてJava 8 を必要とします。


最新の機能、セキュリティ パッチ、および一部の最適化を使用するには、Java 8 をサポートする最新バージョンを見つける必要があります。


そして、これが 2.7.18 です。彼らのブログによると、2.7.18 は Spring Boot 2.x とそれに応じた Java 8 および Java 11 をサポートする最新バージョンになりました。

5 年半と 121 回のリリースを経て、2.7.18 で Spring Boot 2.x のオープン ソース サポートは終了します。できるだけ早く Spring Boot 3 にアップグレードしてください。まだアップグレードの準備ができていない場合は、Spring Boot 2.7.x の商用サポートをご利用いただけます

一緒に使い始める

前提条件:

  • Java 8
  • グラスフィッシュ4.1.2
  • スプリングブート 2.7.18
  • メイヴン


Spring Boot コミュニティは、EE 環境で Spring Boot アプリケーションを実行する方法に関する推奨事項公式ドキュメントを提供しています。

xml ファイルの

アプリケーションをビルドして実行するための最小限かつ十分なpom.xml は次のようになります。


 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <relativePath/> </parent> <groupId>io.github.isharipov</groupId> <artifactId>sb2-to-gf4</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> </exclusions> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>


ここでは、次の 2 つの点に注意する必要があります。

  1. アプリケーションをwarファイルとしてパッケージ化して、Webアプリケーションをデプロイしていることをアプリケーションサーバーに明確にします。


     <packaging>war</packaging>


  1. 組み込みTomcatを除外し、spring-boot-starter-tomcat依存関係を追加し、2つの内部依存関係を除外し、提供されたスコープを追加しています。


     <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> </exclusions> <scope>provided</scope> </dependency>


このアプローチにより、Tomcat を組み込み、Spring Boot ランタイムでのみ使用できるようにして、アプリケーションをアプリケーション サーバーから独立して実行できるようになります。この分離は重要です。Spring は、この依存関係を、結果の成果物内のlib-providedという別のフォルダーに配置します。結果の成果物を実行するには、少なくとも 3 つのオプションがあります。


  • GlassFish へのデプロイ - 基本的に、 アプリケーションをデプロイする方法は 3 つあります
    • GlassFish 管理 GUI
    • アーカイブファイルをdomain-dir/autodeployの下のautodeployディレクトリにコピーします。
    • asadmin API -デプロイコマンド
  • java -jarを使用して実行します。spring -boot-maven-plugin はwarwar.originalの 2 つの成果物を作成します。単純なwarにはlib-providedが含まれますが、 originalものには含まれません。
  • お気に入りのIDEでアプリケーションを起動します。IntelliJ IDEA Community Editionの場合は、実行/デバッグ構成の下に次のオプションを追加する必要があります。

次の依存関係を除外すると、結果として得られる成果物のサイズを削減できます。


 <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion>


アプリケーションクラス

アプリケーション サーバー上で Spring Boot アプリケーションを実行するには、メイン アプリケーション クラスに 2 つの変更を加える必要があります。

通常、単純な Web アプリケーションをセットアップするには、 mainメソッドを持つパブリック クラスを作成し、 @SpringBootApplicationアノテーションを付けます。


 @SpringBootApplication public class Application { private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class, args); } }


したがって、上で述べたように、2 つの修正があります。


  1. SpringBootServletInitializerからApplicationクラスを継承する
  2. 保護された SpringApplicationBuilder configure(SpringApplicationBuilder builder)メソッドをオーバーライドします。


 @SpringBootApplication public class Application extends SpringBootServletInitializer { private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { LOGGER.debug("From main"); SpringApplication.run(Application.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { LOGGER.debug("From configure"); return application.sources(Application.class); } }


デプロイメント記述子

最後に、デプロイメント記述子を追加する必要があります。

したがって、main → src → webapp → WEB-INF フォルダーの下に、次のファイル - glassfish-web.xmlを配置する必要があります。


 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> <glassfish-web-app> <class-loader delegate="false"/> <session-config> <session-manager/> </session-config> <jsp-config/> </glassfish-web-app>


デプロイメント記述子の詳細を読む

クラスローダー委任の詳細を読む

まとめ

  1. 古い技術を使うことを恐れない
  2. 好奇心を持ち続け、スキルを磨き続けましょう
  3. 幸運を



GitHub

リンクトイン