JJUG CCC 2021 Spring トーク一覧

採択 50 min

Kotlin for Databases

hiqinternat Victor Durán hiqinternat

Presentation Type: Standard
Level: Beginner
Categories: Others
Agree to publish your session to JJUG YouTube channel after conference: Yes

Abstract
The first section will take around twenty minutes
The talk with start with some basic theoretical knowledge about SQL and ACID, NoSQL and BASE, a little bit of database history, where are we standing in 2021,
how the ORM impacted Java and how they look in Kotlin. There will be some mention to the future fibers and how that will impact the current work of synchronous drivers vs asynchronous db drivers. The goal in this part is to give the tools to chose the right tool (SQL or NoSQL) for the right problem. Also if the developer really need an ORM, and that case how to chose the right ORM (Hibernate, Expect, etc.)

The second section will take twenty minutes, leaving ten minutes for questions.
Tto show the audience the code with Kotlin syntax, the differences with Java, and the trade-offs of connecting to a database with Kotlin following different approaches:

  • Server (Postgres or MySQL)
  • Embedded (SQLite)
  • Asynchronous drivers (r2dbc and reactive)
  • Kotlin Frameworks (Expect ORM and Xodus DB)

All the code examples will be available on github.

採択 50 min

JDK 16 で導入された JEP 396 にご注意!!

Yoshiro Tokumasu

Presentation Type [Standard]:
Level [Intermediate]:
Categories [Java SE]:
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes]:

Abstract:
JDK 16 で導入された JEP (JDK Enhancement Proposal) のうち、JEP 396 : Strongly Encapsulate JDK Internals by Default による影響は十分に評価・準備することをお勧めします。
本セッションでは、JEP 396での変更点や影響、その背景を解説すると共に、アプリケーションでの評価・確認する際のポイントをご紹介します。

採択 50 min

ソフトウェアアーキテクチャの選び方

nrslib 成瀬 允宣 nrslib

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: Standard
Level [Choose either from Beginner / Intermediate / Advanced]: Advanced
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: Java SE
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: No

Abstract:
ソフトウェアはその生涯において、さまざまな要求を突き付けられます。
要求に応え続けるために必要なことは、コードをシンプルに保つことです。
ソフトウェアアーキテクチャは抽象化と問題の分割によって複雑性を減らし、コードをシンプルに保つことに貢献します。
ソフトウェアが中長期的に利用されることを前提とするのであれば、ソフトウェアアーキテクチャの理念やそれ自体を採用することは検討すべき事柄です。

しかしながら、ここにひとつの問題があります。
それはソフトウェアアーキテクチャが単一でないことです。

日夜進歩しつづけるソフトウェア開発の世界では、多くのソフトウェアアーキテクチャが生まれつづけています。
それらの中から、チームやソフトウェアの目的やライフサイクルに最適なものを選定するのは容易なことではありません。

そこで本トークでは「ソフトウェアアーキテクチャの選定」をテーマに、ソフトウェアアーキテクチャの特徴や実装例を紹介しながら、どういった観点で選定をしているかについてお話します。
本トークで取り上げる主なソフトウェアアーキテクチャは次のとおりです。

  • レイヤードアーキテクチャ
  • ヘキサゴナルアーキテクチャ
  • オニオンアーキテクチャ
  • クリーンアーキテクチャ
  • ADOP

※サンプルコードは Spring Boot を予定しています。

採択 50 min

Java8〜16におけるバイトコード生成の変化

Kengo_toda Kengo TODA Kengo_toda

Presentation Type: Standard

Level: Advanced

Categories: Others(バイトコードの話なのでJVMとしても良いが、どちらかと言えばコンパイラ寄り)

カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference: Yes

Abstract:
Javaの進化が速くなった200X年、多くのJavaユーザはその恩恵に預かっていた。しかしバイトコードを扱うツールの開発者たちは、コロコロ変わるコンパイラの挙動に四苦八苦していた!
各種OSSのチケットから、変化の内容や開発コミュニティ間の議論をご紹介するセッション。JEPの裏話などお好きな方に。

採択 50 min

Fly like a rocket with Helidon

bercut2000 Fly like a rocket with Helidon bercut2000

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: Standard
Level [Choose either from Beginner / Intermediate / Advanced]: Beginner
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: Server-side
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: Yes

Fly like a rocket with Helidon
Good news, everyone! Helidon got a jet engine! Now Helidon is packed with modern, high-tech, James Bond-level features and it flies like a rocket! Also, thanks to a nicely crafted fitness plan, the weight has been reduced and concentration increased - resulting in less RAM consumption and faster waking. Come to my live coding session to learn about all of the new features added in Helidon 2.3.0 such as full GraalVM native image support (including DB drivers), MicroProfile Reactive Streams and Reactive Stream Operators, Helidon DB Client, HTTP Client in Helidon SE. I will also be demonstrating our GraphQL support and Micronaut integrations, as well as the command line tool and live-reloading feature which will nitro-boost your development process. And there will be some new announcements!

Abstract:

採択 50 min

Migrate Spring Boot app to Quarkus. Stage unlocked

vilojona Jonathan Vila vilojona

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: Standard
Level [Choose either from Beginner / Intermediate / Advanced]: Intermediate
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: Java SE, Cloud, JVM
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: Yes

Abstract:
Have you heard about Quarkus ? for sure you have, a new super fast, super light framework to develop cloud native and GraalVM compatible apps. But, is that easy to go the Quarkus way ? is it hard to migrate an existing app ? For sure in a hello world demo this will look fantastic ( they all look that way don’t they ? ) but, in a real app, is that nice ? is that easy ? is that fun ? In this session I will show my experience from scratch migrating an app to Quarkus, using different technologies as Hibernate, Prometheus, Rest, … and also how you can check your current app and see how easy is to migrate using a foss app to analyse it.

Prepare for a journey of reality, failures, and experiences on the universe of Quarkus , at a ludicrous speed.

採択 50 min

JFR などのツールを用いて FullGC の原因を特定する流れ

takaichi00 髙市 智章 takaichi00

Presentation Type [Standard]:
Level [Intermediate]:
Categories [Tools]:
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes]:

Abstract:

本セッションでは、JUGナイトセミナーの LT 大会で発表させていただいた「検証では成功した Java のパッチが商用でコケた件」(https://speakerdeck.com/takaichi00/jugnaitosemina-jian-zheng-dehacheng-gong-sita-java-falsepatutigashang-yong-dekoketajian) で取り上げた、FullGC が発生するアプリケーションをより詳しく調査する流れを説明するセッションにしようと思います。

調査にあたっては、JFR, Memory Analyzer, Visual VM などのツールを用います。まず JFR を用いて FullGC が発生している原因を特定し、Memory Analyzer や Visual VM を用いて多角的な視点から更に詳細な原因を特定していく流れを想定しています。全体の大まかな流れは以下の GitHub でも公開しています。

https://github.com/Takaichi00/jfr-sample

これらのツールは普段の開発業務ではあまり使う機会がなかったのですが、Java のシステム運用や性能問題を解決する際、非常に役に立つと思いこのプロポーザルを提出しました。

セッションの対象者としては以下を想定しています。
・JFR などのツールは聞いたことがあるが使ったことがない、これから使ってみたいので概要を知りたいという方
・プログラミング言語としての Java だけではなく、JVM / GC / Heap / Stack / Thread などの技術にも触れてみたいという方

採択 50 min

Spockで学ぶテスト駆動開発のコツ

tyonekubo 米久保 剛 tyonekubo

Presentation Type [BeginnerSpeaker]:
Level [Beginner]:
Categories [Others]:
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes]:

Abstract:
ユニットテストを書くことは普及しましたが、テストファーストで進めることが難しい、テスト駆動開発(TDD)でインクリメンタルに開発のワークフローを回すことができない、といった課題をよく聞きます。
そのような悩みを抱えるJavaエンジニアを対象に、Spockという使いやすいテスティングフレームワークを使ってTDDを実践していくための基本的な知識やプラクティス、パターンをご紹介したいと思います。

採択 50 min

PostgreSQLの行レベルセキュリティとSpringAOPでマルチテナントのDB共有をセキュアにする

little_hand_s 松岡(@little_hand_s) little_hand_s

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: Standard
Level [Choose either from Beginner / Intermediate / Advanced]: Intermediate
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: Server-side
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: Yes

Abstract:
Webアプリケーションにおいて、マルチテナント型、つまり複数のユーザー組織がアプリケーションとデータベースを共有する構成にすることがあります。この構成の持つリスクとして、万が一バグにより他テナントの情報が見えてしまうとそれは情報漏洩となり、重大なインシデントとなってしまうことがあります。この重要性を考えると、「気を付けて実装する」だけではなく、仕組みで漏洩を防ぐような対策には価値があります。

そこで、今回はPostgresSQLの行レベルセキュリティと、SpringAOPによる処理を組み合わせて、ログインしているテナントのデータにしかアクセスできなくする仕組みを実現しました。
導入にあたり考慮した複数の選択肢、乗り越えたいくつかの壁についてご紹介します。
同様の課題を抱えている方の参考にしていただけるような情報をお伝えしたいと思います。

採択 50 min

Framewars: the battle between NoSQL and Java in the cloud a

Otavio Santana

Title: Framewars: the battle between NoSQL and Java in the cloud arena.

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: Standard
Level [Choose either from Beginner / Intermediate / Advanced]:
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]:
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]:

Abstract:
This lecture's objective is to make comparisons between points and weaknesses of Java frameworks that integrate with databases. On the one hand, the NoSQL MongoDB, Redis, Neo4J, and Cassandra, and on the other, the Java frameworks that integrate with them: Spring, Quarkus, Jakarta EE, Micronaut. The arena: the cloud!
In this ring, the one who best analyzes each tool's trade-offs wins, participates, and is the judge of this epic battle.

採択 50 min

Plug-in Architectures with the Java Module System

aalmiray Andres Almiray aalmiray

The Java Module System lays the foundation for building modularized applications on the JVM. It doesn’t concern itself though with resolving module versions and obtaining modules from repositories.

This is where Layrry comes in: an API and launcher for modularized Java applications which takes a descriptor of the module layer(s) to assemble, fetches the modules and starts up the application.

Join us for this session and learn how to:

  • Build Java applications using layers, e.g. providing isolation between different versions of one module.
  • Use jbang to launch your layered apps in no time.
  • Create plug-in based rich-client applications using Java and Layrry, allowing to – dynamically reconfigure and update your layer hierarchy, no restarts required.
  • Create your own customized Layrry launcher if needed

This session is code-centric! Be ready to see the Java Module System, Layrry, and Java in action!

Presentation Type: Standard
Level: Intermediate
Categories: Java SE
Agree to publish your session to JJUG YouTube channel after conference: Yes

採択 50 min

フロントエンド・バックエンド分離の道のり

masahiro kawakami

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: BeginnerSpeaker
Level [Choose either from Beginner / Intermediate / Advanced]: Intermediate
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: Others
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: Yes

Abstract:
近年バックエンド API 化は多くの事例が出始め、
・バックエンドが簡潔になり、再利用性が高まる
・フロントエンドとバックエンドを別チーム/並行で開発できる
・フロントエンド/バックエンドがそれぞれリリースでき、リリースが簡単になる
など大きなメリットがあります。

ただしレガシーシステムにおいては、フロントエンドとバックエンドの開発は分離されていないケースも珍しくありません。
当社でいえば、従来のシステムは初回のレンダリングをテンプレートエンジン (JSP) により HTML を生成し、
クライアント側での動作は JavaScript によって行われていました。
結果としてサーバー側の実装は HTML 生成にも関心を払わなければならず、複雑性と責務の曖昧さを許容せざるを得ない状況でした。
加えて、時代とともにリッチな UI が求められ、DOM 操作でその要求に応える辛さにも直面しています。

こういった課題からの脱却方法として Spring Boot によるAPI化と、 React による UI 構築の導入から進め、
フロントエンド・バックエンド開発の分離に向けて取り組むことにしました。

このトークでは我々のサービスに Spring Boot によるAPI化と、 React による UI 構築の導入を進める中で、
コストや課題といかに向き合い取り組んだかの経緯、プラクティス・得られたものをご紹介します。

採択 50 min

Jakarta REST in depth

khasunuma 蓮沼 賢志 khasunuma

Presentation Type [Standard]:
Level [Intermediate]:
Categories [Jakarta EE]:
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes]:

Abstract:
Jakarta REST (旧 JAX-RS) は、今日の Jakarta EE (旧 Java EE) および MicroProfile において重要な役割を果たす API です。RESTful Web Services 向けに開発された API ではありますが、広く HTTP リクエスト/レスポンス処理に適用できる、非常に汎用的な API となっています。このセッションでは、既に Jakarta REST (旧 JAX-RS) の経験がある方を対象に、最新の仕様に基づいてより深く理解するための手助けをすることを目的としています。

採択 50 min

GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?

Ho Chi To

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: BeginnerSpeaker
Level [Choose either from Beginner / Intermediate / Advanced]: Beginner
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: Cloud
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: No

Abstract:クラウドの発展形態として注視が必要な主要潮流である "サーバレス化" に対応できる、新しいJava実行環境 GraalVM の Navitve Build 機能を検証し、優位性を確認しました。
 加えて、サーバレス環境と試験ツールについて、広く使われている Knative および Gatling などを用いて検証環境を構築したので、使用感を報告します。

採択 50 min

レガシーなシステムにモダンなAPIを導入した話

Koji Kishiura

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: BeginnerSpeaker
Level [Choose either from Beginner / Intermediate / Advanced]: Intermediate
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: DevOps
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: Yes

Abstract:
我々のプロダクトで課題となっていた運用稼働の増大を解決するための一環として、GraphQL の導入を決めました。
しかし、稼働実績の長いプロダクトというのは技術的負債が増えており、新しい技術を導入する際の壁になります。
Spring への GraphQL については、Spring Boot に graphql-spring-boot-starter を利用することで導入ができるのですが、
Spring Boot の一部の機能を制限しているようなシステムには graphql-spring-boot-starter は使用できず、導入事例も少ないため困難を伴いました。
今回私たちのチームでは Spring Boot の自動構成メカニズムを使用していないシステムへの GraphQL を導入を行いましたので、その導入事例についてご紹介したいと思います。

レガシーなシステムに苦労しつつも、少しでもモダンなシステムに近づけたいと考えている方の一助になればと思います。

採択 50 min

Java 開発者のための Kubernetes パッケージマネージャー: Helm

tsuyoshi_miyake 三宅 剛史 tsuyoshi_miyake

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: Standard
Level [Choose either from Beginner / Intermediate / Advanced]: Intermediate
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: DevOps
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: Yes

Abstract: Java のアプリケーションを実際に稼働させるためには古くは war ファイルを Tomcat にコピーするところから、uber jar の コンテナ化、Kubernetes でのデプロイが現在の主流でしょうか。ただ Kubernetes でのデプロイには Ingress、Service、Deployment、Secret、ConfigMap などシンプルなアプリケーションをデプロイするにも API オブジェクトの管理が煩雑になりがちです。本セッションではこの煩雑さを解消するために誕生した「Kubernetes のパッケージマネージャー」 Helm の概要と、実際に簡単な Java のアプリケーションや既存関係を Helm を使ってデプロイするデモをご紹介します。

採択 50 min

サーバーレスAPIをKotlinで開発してみよう!

bulbulpaul ポール bulbulpaul

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: Standard
Level [Choose either from Beginner / Intermediate / Advanced]: Intermediate
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: Server-side
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: Yes

Abstract:
KotlinはJVMで動作する静的型付けのオブジェクト指向プログラミング言語です。
近年はアプリケーションフレームワークでのサポートも増え、サーバーサイド開発においても利用される機会が増えています。
また、アプリケーションをクラウド環境で実行する機会も増えてきており、よりアプリケーション開発に集中できるサーバーレスの利用も進んで来ています。
その利用が進むKotlinとサーバーレスを活用してAPI開発をするにはどうするのか。
今回はAWS環境を対象にしたサーバーレスAPI開発やテストについてコードも交えて解説をします。

採択 50 min

オンライン広告入札システムとZGC

hiroisojp 磯田 浩靖 hiroisojp

Presentation Type: Standard
Level: Intermediate
Categories: Java SE
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference: Yes

Abstract:
秒間36万リクエストをさばくオンライン広告入札システムにおける、Zガベージ・コレクタ(ZGC)への取り組みについてお話しします。
オンライン広告入札システムではRTB(リアルタイムビッディング)という仕組みで広告入札が行われ、遅くとも100ミリ秒のレイテンシが求められます。

ZGCはスケーラブルな低レイテンシのガベージ・コレクタであり、オンライン広告入札システムとの相性はよいのではないかと考えました。
一方でZGCの利用事例について公開されているものは数が少なく、私達も既存のG1GCとの比較を試行錯誤しながら検証をしています。

そこで、このセッションでは次の内容についてご紹介し、ZGCの適用を試みた背景から結果について共有したいと考えています。

  • 低レイテンシが求められるオンライン広告入札システムの概要
  • ZGCについて
  • オンライン広告入札システムにおける、G1GCとZGCの差異(グラフ、ログなどで比較)
採択 50 min

Jakarta EE 9.1とパッケージ名変更のためのツールEclipse Transformerについて

三菱UFJインフォメーションテクノロジー 髙橋 博実

Presentation Type [Standard / BeginnerSpeaker / StepUp]: Standard
Level [Choose either from Beginner / Intermediate / Advanced]: Intermediate
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: Jakarta EE
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: No

Abstract:
昨年末にリリースされた、Jakarta EE 9と今年3月にリリースされる予定のJakarta EE 9.1の内容を共有するとともに、パッケージ名変更のためのツールとして公開されているEclipse Transformerについて調査した結果を共有します。

採択 50 min

今どき?のJavaにおける例外処理についての考察

masatsugumatsus 松下正嗣 masatsugumatsus

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: StepUp
Level [Choose either from Beginner / Intermediate / Advanced]: Beginner
Categories [Choose at least one from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: Server-side
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: Yes

Abstract:
サーバサイドWebアプリケーションにおける例外の扱い方について考察します。まずはJava言語におい想定していたと思われる非チェック例外とチェック例外の使いどころ、Springなどのフレームワークによる例外処理の思想の変更などを押さえた上で、例外的な状態をどのように扱うかについて考察します。特に関数型言語における例外状態の扱い方などを参考にしながら、今どきの例外処理についての私見を述べさせていただきます。