Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dojo_エンタープライズJava入門_20230530資料.pdf

Water
May 30, 2023

 Dojo_エンタープライズJava入門_20230530資料.pdf

VSCodeとLibertyで始める エンタープライズJava入門

Water

May 30, 2023
Tweet

More Decks by Water

Other Decks in Technology

Transcript

  1. 2

  2. 3 本日のアジェンダ! • エンタープライズJava概要 • VSCode & Liberty 開発環境構築 •

    Libertyについて • jaxrsコード作成 • ServletとOpen Liberty サンプルコードの稼働
  3. 4 事前準備 ◼ JDKの導入 – JDK 17以上の導入をお願いします。JDKを導入したら環境変数:JAVA_HOMEにJDKを導入先を設定してくださ い。 – IBM

    Semeru Runtimes : https://developer.ibm.com/languages/java/semeru-runtimes/ – 環境変数の設定は以下のサイトを参照してください。 • https://pc-karuma.net/display-environment-variables-in-windows-11/ • ユーザー環境変数は、以下の様になります。 – JAVA_HOME=C:¥Program Files¥Semeru¥jdk-17.0.3.7-openj9 ◼ VSCodeの導入 – VSCodeのダウンロード:https://code.visualstudio.com/ – VSCodeを事前にセットしておいてください。以下のサイトを参考にして導入してください。また、日本語化ま でしておくと便利です。 • https://codezine.jp/article/detail/16467
  4. 7 エンタープライズJavaの種類 7 Spring Framework / Spring Boot MicroProfile Java

    EE Jakarta EE (Servelt/jaxrs) by Oracle by Red Hat by Red Hat kumuluzEE WebSphere traditional
  5. 8 Java EE / Jakarta EE ◼ Java EE (Java

    Enterprise Edition) – Oracle主導のJCP(Java Community Process)で策定されていたエンタープライズJavaの標準仕様 – 2015年のJava EE 8が最後の仕様となった – 2016年より,OracleのJava仕様にたいする活動低下により,更新が停滞 ◼ Jakarta EE(Eclipse) – Eclipse Foundationに移管され,コミュニティ主導で策定されるエンタープライズJavaの仕様 – IBM / Oracle / Red Hat / Fujitsu など,主要なJava関連ベンダーの多くが参画 – 2019年:Jakarta EE 8 Java EE 8と同等の仕様 / Jakarta EEによる策定・公開プロセスの元での再定義 – 2020年:Jakarta EE 9 商標上の問題があるjavax名前空間からjakarta名前空間への移行 – 2021年:Jakarta EE 9.1 Java SE 11に対応 – 2022年:Jakarta EE 10 新しい機能を追加した新バージョン 8
  6. 14 VSCodeへの取り込みと起動 ◼ 手順 – zipを好きな場所に解凍して、 VSCodeのエクスプローラーからフォルダーを追加 – LIBERTY DASHBOARDからStartを実行

    • JAV_HOMEが正しく設定されていないとエラーになる • 初回は構成を行うので非常に時間がかかる – 以下が表示されたら正常完了。 一旦、stopしておく。 14
  7. 16 WebSphere Libertyの開発 ◼ Open Liberty – オープンソースとして開発 / GitHub上でソースを公開・問題管理

    https://openliberty.io/ https://github.com/openliberty/ – 無償で利用可能 / 商業利用しやすいEPL(Eclipse Public License)で公開 ◼ WebSphere Liberty(WAS Liberty) – 製品としてIBMからのサポートを提供 – Open Libertyとバージョンは完全に同期・新機能は同じタイミングで製品版でもサポート – 製品固有の機能は(安定化されたものを除いて)順次オープンソース化している 16
  8. 17 【参考】WAS Libertyのメリット 1 7 1 モジュール化されたランタイム 2 軽量、高速起動 5

    あなたのアプリに “ちょうどいい” • 機能をFeature として モジュール化 • 必要な機能だけを有効化 自分のアプリにとって 必要十分な環境を構築! 4 新しい機能、欲しい機能が いま使える Servlet JSP JDBC SSL JAX-RS session Database JSON <featureManager> <feature>jsp-2.3</feature> <feature>jdbc-4.1</feature> <feature>jaxrs-2.0</feature> <feature>sessionDatabase-1.0</feature> <feature>ssl-1.0</feature> </featureManager> • オープンソース OpenLiberty で開発 https://openliberty.io/ • 市場の要求、技術動向を取り込み、毎月リリース • Jakarta EE 8 も、世界最速でサポート • 数十MBのメモリ消費 • 100MB以下のランタイム • わずか 数秒で 即時起動 3 シンプル構成 自動化/コンテナ化に最適 • ZIPを展開するたけの導入 • 構成ファイルは1つだけ • アプリケーションは 配置するだけでデプロイ完了 • 公式コンテナイメージも RedHat UBIベースで毎月リリース • Transformation Advisor、 Kabanero など 多用なコンテナ開発支援ツール 需要に応じて 変化する環境に最適 • 多用なフレームワークをサポート 機能追加も再起動不要、動的に反映 6 安心の ” ZERO Migration Policy ” • 新しいバージョンの仕様が提供されても 旧来バージョンのモジュールも提供を継続 • 構成ファイルのバージョンを変更しなければ 古いバージョンのFeatureをそのまま利用可能 クラウドネイティブ・アプリケーション Jakarta EE 8 FullProfile / WebProfile ミッション・クリティカル・アプリケーション Eclipse MircroProfile 3、SpringBoot ✓ 従来型WebSphereからの国内移行実績も多数!
  9. 18 LibertyならPlatform as Codeが簡単に実現 開発環境 実働環境 コード作成 ビルド ZIP展開 実行

    WebSphere Libertyの 開発と実行 コード作成 ビルド 実行 または サーバー構成 導入可能 ZIP ランタイム (MavenがD/L) ビルド・ツール 実行可能 JAR or アプリ
  10. 19 Maven Libertyプラグイン ◼ Javaのビルドツールのデファクトスタンダード「Maven」でLiberty環境をビルド 1 9 ├── pom.xml ├──

    src │ ├── main │ │ ├── java │ │ │ └── jp │ │ │ └── test │ │ │ └── HelloServlet.java │ │ ├── liberty │ │ │ └── config │ │ │ ├── jvm.options │ │ │ └── server.xml │ │ └── webapp │ │ ├── WEB-INF │ │ │ └── web.xml │ │ └── index.html │ └── test │ └── java │ └── jp │ └── test │ ├── ApplicationTest.java │ └── it │ └── EndpointIT.java └── target ├── LibertySample.war ├── LibertySample.zip プロジェクト構成ファイル アプリケーションの Javaソースファイル アプリケーションの Webコンテンツ アプリケーションを実行する Libertyサーバーの構成ファイル アプリケーションWARファイル アプリ+Liberty+構成ファイルのZIP ビルド <plugin> <groupId>io.openliberty.tools</groupId> <artifactId>liberty-maven-plugin</artifactId> <version>3.2</version> <configuration> <serverName>guideServer</serverName> </configuration> </plugin> アプリケーションをビルドするだけでなく WAS Liberty環境をまるごと生成することができる (Liberty本体もMavenがリポジトリから取得)
  11. 20 簡潔なLibertyの構成ファイル ◼ デフォルトから変更するものだけを記述する簡潔な構成ファイル ◼ 環境依存性のない可搬性のある構成ファイルで,配布可能なコードとして管理できる server.xml jvm.options server.env <server>

    <featureManager> <feature>jaxrs-2.1</feature> </featureManager> <valiable name="http.port" defaultValue="8080" /> <httpEndpoint host="*" httpPort="${http.port}" id="defaultHttpEndpoint" /> <applicationManager autoExpand="true"/> <webApplication id="RestfulTest" location="RestfulTest.war" contextRoot="/" /> </server> -Xmx1024m -verbose:gc -Dexample.system.property=ExampleValue WLP_OUTPUT_DIR=/work/wlp-out
  12. 24 サンプルコード ◼ HelloDojo.java 24 package com.demo.rest; import jakarta.ws.rs.Path; import

    jakarta.ws.rs.GET; @Path("hello") public class HelloDojo { static int count=0; @GET public String hello() { count++; return "Hello Dojo, Liberty Tool! Tool! You are " + count; } } ・赤字が追記する部分 ・コードアシスト機能: Ctrl + Space ・終わったらCtrl + s でセーブ
  13. 26 Webサービスの振り返り ◼ リソース指向 – リソースは Web で共有する任意のデータ – リソースは一意な

    URI を持つ • 例:http://host.jp/jaxrs/employee/E220 ◼ リソースに対する操作を HTTP メソッド で表現 – GET 取得 – POST 追加、(更新) – PUT 更新 – DELETE 削除 ◼ Stateless な呼び出しプロトコル 26 Employee サービス 社員 ID=E63 氏名=… 所属=… ……=… GET …/employee?country=jp 社員 ID=E220 氏名=… 所属=… ……=… 社員 ID=E250 氏名=… 所属=… ……=… 200 OK GET …/employee/E220 200 OK ID=E220 氏名=… 一覧 POST …/employee/E250 200 OK ID=E250 氏名=… GET …/employee/E250 200 OK ID=E250 氏名=… クライアント ある社員の 情報を取得 別の社員の 情報を取得 社員の情報を 更新 jp の社員を 照会
  14. 27 クラス説明 ◼ RestApplication クラス – Applicationを継承。jaxrsアプリ構成のクラス – Java EE/Jakarta

    EE環境では処理を記述しなくてよい ◼ HelloDojo クラス – HTTP要求を受け付けるリソースクラス – このクラスに処理を記述していく
  15. 28 リソースクラス ◼ HTTPメソッドの指定 – @GET、@POST、@PUT、@DELETE など ◼ 入力データの形式 –

    @Consumes() @Consumes(“application/json”)など。HTTP リクエストの "Content-Type" ヘッダー – @Produces() @Produces(“application/x-www-form-urlencoded”)など。HTTPリクエストの"Accept" ヘッ ダー ◼ データの取得 – @QueryParam URI 照会パラメーターの値 – @PathParam URI のパス・パラメーターの値 – @HeaderParamヘッダーの値 – @CookieParam クッキーの値 – @FormParam フォーム・パラメーターの値 ◼ 出力データ – return で指定 28
  16. 29 サンプルコード2 ◼ HelloDojo2.java 29 package com.demo.rest; import jakarta.ws.rs.Path; import

    jakarta.ws.rs.QueryParam; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.GET; @Path("hello2") public class HelloDojo2 { @GET @Path("{comp}") public String hello( @PathParam("comp") String comp, @QueryParam("name") String name ) { return "Hello Dojo! You are " + name + " from " + comp; } } ← URLのパスを取得”/hello2/xxx”のxxx部分がマッチ ← 上記URLのパスを変数にセット ← URLのパラメター(?以降)を変数にセット
  17. 34 Serveltを見てみよう ◼ HelloServelt.java 34 package com.demo.rest; import java.io.IOException; import

    java.io.PrintWriter; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet("/HelloServelt") public class HelloServelt extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { String name = request.getParameter("name"); PrintWriter out = response.getWriter(); out.println("<html> <head> <title>Hello World!</title> </head>"); out.println("<body> <h1>Hello World!</h1> <p>First Servlet</p> " + name); out.println("</body></html>"); } }
  18. 35 Servletのコードと実行 ◼ Servletコード – HttpServlet を継承 – GET処理は、doGet(HttpServletRequest request,

    HttpServletResponse response) – POST処理は、doPost(HttpServletRequest request, HttpServletResponse response) ◼ 実行 – http://localhost:9080/dojo-hello/HelloServelt?name=mizuno 35
  19. 40 参考リンク集 ◼ VSCode – VSCode • https://azure.microsoft.com/ja-jp/products/visual-studio-code • https://code.visualstudio.com/

    – Liberty Tools for VSCode : • https://marketplace.visualstudio.com/items?itemName=Open-Liberty.liberty-dev-vscode-ext ◼ Liberty – Open Liberty : https://openliberty.io/ – Japan WebSphere User Group (日本WebSphereユーザーグループ) • https://ibm.biz/JapanWebSphereUG • ここに過去資料が多数あります – Liberty Tools : https://ibm.biz/JapanWebSphereUG – ユーザーガイド:https://github.com/OpenLiberty/liberty-tools-vscode/blob/HEAD/docs/user-guide.md 40