JAVA関連のことを調べてみた2022年12月10日

JAVA関連のことを調べてみた2022年12月10日
目次

【J】「JavaScriptとJavaは別物」は全人類の共通認識ではない

全人類の認識になれと100億年前から言ってる

## 正しい認識

– JavaもJavaScriptも「プログラミング言語の名前」
– この2つは**別のプログラミング言語**
– **JavaScriptは「JavaのScript」ではない**

## Javaとは?

– 汎用プログラミング言語。
– “Javaが動く仮想マシン”で動作する仕組みなのでいろんな機械で共通のプログラムを動かせる
– 例えば、Windows実行ファイルの.exeはMacでは基本的に動かないが、JavaのプログラムはWindowsで動くJavaの仮想マシン・Macで動くJavaの仮想マシンの両方で動くのでWindowsでもMacでも動くと言える
– なんならカーナビとかでも動いた覚えがあるぞ?

## JavaScriptとは?

– webサイトでよく動いてるプログラミング言語。
– ブラウザ上で処理されるのでまあ「いろんな機械で共通のプログラムを動かせる」という共通点があるかもしれない。

## なんでJavaScriptに”Java”がついているの?

**Javaの勢いに乗じよう

元記事を表示

Java製のバリデーションライブラリYAVI(ヤバイ)を使ってみた[API導入編]

この記事は筆者の[ソロ Advent Calender 2022](https://qiita.com/advent-calendar/2022/panda) 10日目の記事です。

前回までにJava製のバリデーションライブラリであるYAVI(ヤバイ)の使い方を紹介しましたが、せっかくなのでもう少し実践的に簡単なAPIを作成してみましたのでその紹介です。

前回の記事は[こちら](https://qiita.com/JY8752/private/d59c76c2574d2782088b)

今回までの成果物はこちらです

https://github.com/JY8752/YAVI-demo

# 準備
今回はSpringを使用しますのでSpring Initializerでプロジェクトを作成します。
全体的な構成は以下のようなものを作っていこうと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551753/a936f365-cb70-5bdc-24e1-da7975191

元記事を表示

【Kotlin】動的プロキシでsuspend関数を実装する

この記事はKotlin Advent Calendar 2022の5日目の記事になりました。

https://qiita.com/advent-calendar/2022/kotlin

# TL;DR
– インターフェース定義が`suspend`関数かつ`InvocationHandler.invoke`関数内でも`suspend`関数を呼び出したい場合、素直に書くと`invoke`関数が非`suspend`関数なためコンパイルエラーになる
– `suspend () -> …`が`(Continuation<*>) -> …`にキャストでき、`Continuation`も`args`から取得できることを利用すれば、この問題は回避できる

# 前置き
動的プロキシを知っている方は読み飛ばして頂いて大丈夫です。

## 動的プロキシとは
動的プロキシとは、指定されたインタフェースを実行時に実装するような機能です。

例えば以下のようなことができます。

“`kotlin
interface Foo {
fun foo(): String
}

object FooP

元記事を表示

SpringBoot + MySQLで作成したTodoリストに「完了」「未完了」ボタンを実装する!

# はじめに
SpringBoot + MySQLで作成したTodoリストアプリケーションに、Todoの状態を完了、未完了に切り替える機能を実装していく。(初学者なので備忘録)

ゴールは、**リストのtrue/falseを変更し、データベースを更新する**こと。

参考にさせていただいた記事では1度完了にしたTodoは未完了にはできなかったので、完了・未完了を切り替えられるように実装した。
参考にさせていただいた記事:https://qiita.com/morioheisei/items/52d722eeee919f3a1552

# 開発環境
“`
OS:macOS Ventura 13.0.1
“`
“`
openjdk version “11.0.16” 2022-07-19 LTS
OpenJDK Runtime Environment (build 11.0.16+8-LTS)
OpenJDK 64-Bit Server VM (build 11.0.16+8-LTS, mixed mode)
“`
“`
mysql Ver 14.14 Distrib 5.6.

元記事を表示

GitHub Actionを利用して、リリースタグを作成した後自動的にGoogle Cloud App Engineデプロイする

## はじめに
株式会社ピーアールオー(あったらいいな!を作ります) Advent Calendar 2022の10日目になります。
前日は「[Salesforce]問い合わせページにWeb-to-リードを設定する 」でした。
さらに7日目は「SpringBoot MVCで簡単なWEBアプリを実装してみる」でしたので、今回は実際作ったWEBアプリをGoogle Cloud App Engineにデプロイしようと思っています。

## 事前準備
まずはJavaベースのWEBアプリを用意する必要があります。今回はSpringBootのかわりに、[Quarkus](https://quarkus.io)を利用します。
Quarkusコマンドを利用するので、[Quarkusコマンドのインストール方法](https://quarkus.io/guides/cli-tooling)はこちらになります。

Quarkusコマンドをインストール完了後、`quarkus create app`のコマンドでアプリを作成します。

“`bash
quarkus create app medium-demo

元記事を表示

Javaオーバーロード 型は数で認識されるのか順番で認識されるのか

# はじめに
スクールでメソッドやコンストラクタを呼び出す際、引数名と型が違えば同名のメソッドやコンストラクタを定義して呼び出せる`オーバーロード`を学習しました。その際に出てきた疑問を整理して以下の例題で検証してみました。

“`java
public class Overload {
//引数なし
public void sayHello() {
System.out.println(“こんにちは!”);
}
//引数name
public void sayHello(String name) {
System.out.println(“こんにちは!私の名前は” + name + “です。”);
}
//引数name, hobby
public void sayHello(String name, String hobby) {
System.out.println(“こんにちは!私の名前は” + name + “です。趣味は” + hobby + “です。”);
}

public static void main(String[] args) {
//Overload

元記事を表示

Jakarta EE10でもUberJarでお気軽開発をする〜Payara編〜

# はじめに

本記事はMDC Advent Calendar 2022の10日目の記事です。

https://qiita.com/advent-calendar/2022/mdc

Jakarta EE10でもUberJarを使って開発するぞ、ということで前回はOpen Libertyをターゲットに動作確認しました。

https://qiita.com/omix222/items/b748df83ae9a652719f2

今回は前回使ったソースコードをベースに修正していくことでPayaraに対応していきたいと思います。

# Payaraとは

Payaraは、GlassFish Serverのオープンソース版から派生したJava EE、Jakarta EE準拠のアプリケーションサーバーです。OSS版、エンタープライズ版がありますが、今回はOSS版を使っていきます。

日本ではサムライズムさんが代理店対応を行っています。

Payara Server & Payara Micro

# Open Liberty → Payara対応

まず、PayaraでJakartaEE1

元記事を表示

JavaとgRPCで2Dバーチャルオフィスっぽい何かを作る ②gRPC bidirectional streaming

:::note info
この記事は [TLB Enjoy Developers Advent Calendar 2022](https://qiita.com/advent-calendar/2022/tlb-enjoy) 9日目の記事です。
:::

## 概要
前回に引き続き、2Dバーチャルオフィスっぽいツールを作っていきます。
[JavaとgRPCで2Dバーチャルオフィスっぽい何かを作る ①概要編](https://qiita.com/kdr250/items/7a82ceaea3ae4a0ec917)

## 今回の目的
今回はgRPCの双方向通信を用いてプレイヤー同士が位置を共有する方法について書きます。
調べたところ同期方式にもいくつかの選択肢があるようですが、今回は**非同期でクライアントからサーバーに位置を送信する**ような方式を選択しました。多人数が接続する上に対戦する訳ではないので、厳密な同期は不要と判断したからです。

また同期間隔について、多人数参加型のオンラインゲームなどでは1フレーム事に同期を取っているわけではなく、数フレームごとに同期を取ることでわずかな

元記事を表示

Jakarta EE10でもUberJarでお気軽開発をする〜Open Liberty編〜

# はじめに

本記事はMDC Advent Calendar 2022の9日目の記事です。

https://qiita.com/advent-calendar/2022/mdc

SpringBootでのアプリケーション開発ではビルド後に java -jarで簡単にアプリ起動することができますが、Jakarta EE(JavaEE)ではそのようには出来ません。

アプリケーションサーバーの準備不要で、java -jar実行でまるっと起動させる仕組みをUberJarと呼びます。前にはWildflyでUberJarする方法を取り上げました。

https://qiita.com/omix222/items/8d9a5411d6c1228ab3f1

今回は先日リリースされたJakarta EE10記念として、Jakarta EE10に対応したアプリケーションサーバーでのUberJar化の方法を紹介したいと思います。

各種アプリケーションサーバーで違いをみながら説明するのが面白いと思ったのですが、下記始めるとかなり長くなってしまったので、シリーズ化します。初回はOpen Liberty

元記事を表示

緊急退避:見かけたjarファイルをOpenShift にデプロイする

『アプリケーションをOpenShiftで動かす』事について、より理解を深めていかなくてはと課題を感じている今日この頃。
勉強して分かったことを記事にして共有したいなと思い準備していたのですが、想像していた以上に奥が深かったことに気がついきました。

深く踏み込むにも、OpenShiftへのアプリケーションのデプロイって、色々な内部処理がされていて、それがはたしてアプリケーション実行環境やフレームワークの機能なのか、OpenShiftが提供する機能なのか、そのどちらによって、実現されているのかがとらえきれず、今回は、ちゃんとした事はかけないと挫けました(汗)

もともとは、javaのソースコードの状態から、OpenShiftへコンテナをローンチするプロセスをしっかり理解したかったのですが、、、
興味のポイントとしては、java言語で書かれたコードの場合、javaのコンパイルが必要となるので、コンテナをビルドをする前に、javaのコード達はどういう状態になってなくてはならないのか。加えて、コンテナ化するために、どういったファイルや設定を用意しなくてはならないのかというのが気になっていました

元記事を表示

JavaでPDFからPDFA、PDFAからPDFに変換する方法

PDF/A(Portable Document Format Archivable)は、保存用のファイル形式です。文書の保存期間に関わらず、文書の詳細を保存し、まったく同じように再現することができます。時には、長期的な文書アーカイブの目的で、PDFをPDF/Aに変換する必要があるかもしれません。この記事では、無料の[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)を使用して**PDFをPDF/Aに、またはPDF/AをPDFに変換する方法**を説明します。

– **[PDFをPDF/Aに変換する](#pdfをpdfaに変換する)**
– **[PDF/AをPDFに変換する](#pdfaをpdfに変換する)**

## 【依存関係の追加】
この方法は、無料のFree Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。

### 1. Maven
Maven を使用している場合、プロジェクトの pom.xml ファイ

元記事を表示

JavaでPDFの添付ファイルを追加、抽出、削除する方法

PDFは汎用的なファイル形式です。そのページ上に表示される内容に加えて、保存容器としても使用することができます。他のファイルを添付して、後で取り出すことができます。外部リンクを使用するよりもPDFにファイルを添付することの利点は、PDFを別の場所に移動しても添付ファイルが一緒に移動することです。今回は、無料の[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)を使って、Javaで**PDF文書に添付ファイルを追加、抽出、削除する方法**を紹介します。

– **[PDFに添付ファイルを追加する](#pdfに添付ファイルを追加する)**
– **[PDFから添付ファイルを抽出する](#pdfから添付ファイルを抽出する)**
– **[PDFの添付ファイルを削除する](#pdfの添付ファイルを削除する)**

## 【依存関係の追加】
この方法は、無料のFree Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。

#

元記事を表示

Spring Boot 3.0 で入った RFC7807 サポートを色々試す

先日、Spring Boot 3.0 が[GA](https://spring.io/blog/2022/11/24/spring-boot-3-0-goes-ga)になりました。実に5年ぶりのメジャーバージョンアップだったようです。めでたいですね。
Java17&Java EE9やGraalVMによるnativeイメージサポートなど大きな機能強化以外にも様々な新機能が入っています。
この記事では、CHANGELOGで見つけたちょっと変わり種n機能 RFC7807サポートについて試した結果を紹介します。

## RFC7807 とは?
[RFC 7807 Probrem Detail for HTTP APIs](https://www.rfc-editor.org/rfc/rfc7807)

HTTP APIのエラーレスポンス形式を標準化したRFCです。REST APIを作るたびにエラー形式考えるのがめんどくさい人のための標準仕様になります。 “`application/problem+json“` で以下のようなレスポンスを返却します。
“`json
{
“ty

元記事を表示

ChatGPTにMinecraftのMODを作ってもらう(後編)

ChatGPTにMODを作ってもらおうと思います。前編はChatGPTに任せきりにしてめちゃめちゃだったので、後編では人力で手直ししていこうと思います。結論から申し上げますと動くようにはなりましたが工業要素はゼロです。

# IronGeneratorTileEntityの実装
ChatGPTは`IronGeneratorTileEntity`クラスを`IronGenerator`クラスの内部クラスとして実装してくれました。そのままでも支障は特にありません。
Forgeを導入した開発環境ではデコンパイルし難読化解除した(確か)Minecraftのコードを読むことができます。Minecraftの内部実装では`TileEntity`の子クラスや孫クラスは内部クラスとして実装されてはいませんでした。何となく統一した方が良いような気がしたので、内部クラスとして実装するのはやめることにします。

“`java:IronGeneratorTileEntity.java
public class IronGeneratorTileEntity extends TileEntityLockable

元記事を表示

Kotlin エンジニアが Java を書き直して感じたことまとめ

【完走賞】MxShun ひとりマラソン ? Advent Calendar 2022 毎週金曜日は Kotlin の記事を書こう!2記事目です。

1年あまりサーバサイド Kotlin を書いていましたが、この度の転職で Java8 時代のシステム保守も行うようになりました。
Kotlin エンジニアのバックグラウンドを持つ私が、改めて Java を書き始めて感じたことをまとめます。

### 1. 基本ミュータブルで怖い + 都度 `final` を付けるの面倒
Kotlin のクラス・関数・変数はデフォルトで `final`、つまり不変で継承不可です。スコープは最小限でイミュータブルに保つという思想から来ているのでしょうか。コードの見通しのたてやすさから私もこの思想を好みます。

他方、Java は気にしないとミュータブルで継承可能です。都度 `final` を付ける必要があるので書くのも面倒ですし、かなり冗長です。
って言うか、型宣言や末尾の `;` がないのも改めて素敵ですね。

“`kotlin
// in Kotlin
companion object {
pri

元記事を表示

Java製のバリデーションライブラリYAVI(ヤバイ)を使ってみた[応用編]

この記事は筆者の[ソロ Advent Calender 2022](https://qiita.com/advent-calendar/2022/panda) 9日目の記事です。

前回Java製のバリデーションライブラリであるYAVI(ヤバイ)の基本的な使い方を紹介しましたが、今回はもう少しYAVIで用意されている機能を紹介していきます。

前回の記事は[こちら](https://qiita.com/JY8752/private/e72d228eb49a42c3cbb0)

今回までの成果物はこちらです

https://github.com/JY8752/YAVI-demo

# バリデーション結果の結合(Combining validation results)
YAVIはApplicative Functorと呼ばれる関数型プログラミングの概念をサポートしています。筆者は関数型のプログラミング言語の経験がないのでここら辺の詳しい概念は今回は説明いたしませんが、YAVIでは一連の検証処理の一部または全部が失敗したとしても全ての検証結果(ConstraintViolation)を蓄

元記事を表示

IntelliJの実行構成をいじってアプリ起動前に息抜きする

## 初めに

突然ですが、ビルドしてアプリが実行されるまでって暇ですよね、、、?
その間にいろんな情報を得たい
息抜きしたい…
僕のようなエンジニアに向けて書いています。

## 起動バナー
これは普通のSpring Boot。
![スクリーンショット 2022-12-08 23.33.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408705/3a1b4b4e-96ba-46ef-b96e-2b915ee41208.png)

## 今回やるバナー
起動時に今現在の天気を出力してみる。。。(京都旅行したい。。。)
![スクリーンショット 2022-12-08 23.33.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408705/5b3d7c54-be29-2111-f3f1-7a856eb2f4c4.png)

見切れてるけど毎回違うモンスターの画像を出力したり。。。
![スクリーンショット 20

元記事を表示

Javaで何か作ってみる(2022/12/8 Day49)

## 今日やった事
– オブジェクト指向の動画教材を見た。(**J2-03_カプセル化** まで見た。)
## 参考にしたもの
– [Spring 入門 ~ SpringBoot 2 を使ってお問い合わせアプリとToDoアプリを作る ~](https://www.udemy.com/course/java_spring_beginner/)
– [【超初心者も必見】Javaプログラミングの「オブジェクト指向」が絶対理解できる講座【プロ講師が丁寧解説】](https://www.udemy.com/course/uz-java-obj/)
## 所感
– private、protected、publicを意識するの、久しぶりだなと思った。
– C#をやってた頃は、privateを多用していた気がする。
– アクセス制御は、適切に出来るようになりたいなと思った。
## 明日の予定
– 引き続き、動画教材を進めていく。

元記事を表示

JettyでmTLSを使う

本記事は[FOLIO Advent Calendar 2022](https://adventar.org/calendars/7813)の8日目です

# mTLSとは?

mTLS(mutual tls,相互TLS)とは、サーバーだけでなくクライアントについても証明書による検証を行う通信方式。
一般的なWebサイトではクライアントの正当性を証明する必要性は少ないが、エンタープライズレベルのセキュリティーが必要とされるケースなどで使用される。とくにゼロトラストなどのバズワードと一緒に使うと効果が大きい。

# 使用するツール

* Java
* OpenSSL
* Jetty
* Google HTTP Client

# 証明書の作成

サーバー・クライアント双方にオレオレ証明書を作成する。
Javaを使う場合一般的にはkeytoolで直接証明書を作成することが多いが、筆者はkeytoolが嫌いなためopensslを使用する(そのほうが応用も効くと思う)。

## CA証明書の作成

“`
openssl req \
-new \
-x509 \
-new

元記事を表示

Java Bronzeをオンラインで受験してみた

# Java Bronzeをオンラインで受験してみました
Java Bronzeは、SilverやGoldとは違い、唯一オンラインでも受験可能な試験です。

試験前にJava Bronzeについて色々調べてみましたが多くの記事には「__オンライン受験はできるが、英語での試験になる__」と書かれていました。

英語での試験でも特に抵抗はなかったのでオンライン受験を選びました。(__実際はしっかり日本語でも対応していましたのでご安心ください__)

## 受験準備
私は受験しよう!と決めた日の前日に準備し始めました。

試験チケットのようなものがメールで発行されて、チケット番号を入れると試験が受けられる、という流れでした。

いざチケットを買って送られてきたメールを見ると、英語で「もしかしたらチケット発行まで3日かかるかも⭐︎」と書かれていて「え…明日受けられないかもしれない泣」と落ち込みましたが、1時間後くらいにちゃんとチケット発行のメールが届きました?

## いざ受験!…とその前に
オンライン試験は、時間も指定できますのでお好きな時間に受けちゃってください!

でもその前に、、、カン

元記事を表示

OTHERカテゴリの最新記事