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

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

Open LibertyとMicroProfile Reactive MessagingでKafkaのイベントを読み取る

Javaのアプリケーションサーバである [Open Liberty](https://openliberty.io/) では、MicroProfile Reactive Messagingと呼ばれる仕様のAPIを使うことでイベント処理することが可能です。

この記事ではMicroProfile Reactive MessagingでApache Kafkaのイベントを読み取って処理するConsumerを実装してみます。イベントの送信については別の記事で紹介する予定です。

![スクリーンショット 2022-11-06 21.54.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137947/9c45c24e-f10a-88e9-365f-d921de83f121.png)

## 本記事で使用するコンポーネント

本記事では以下のコンポーネント・バージョンを使用します。
今後のバージョンアップで動作しない可能性がありますので、本番投入する際には事前に手元で動作確認することをお勧めします。

|コン

元記事を表示

Box SDKでBox APIを使ってみる

# 概要
Boxに対して別のシステムからファイルのアップロード、削除やコラボレータの追加、削除などの操作をしたい場合に、BoxのAPIを利用しやすい形で提供しているBox SDKの使い方について記載したいと思います。

# Box SDKの準備
Box SDKは公式に各種言語向けに提供されています。今回はJavaSDKを使用しましたので、記事中のコードもJavaで記載しています。基本的には各操作に関して考え方は同じになると思います。
[SDKとツール \- Box開発者向けドキュメントポータル](https://ja.developer.box.com/sdks-and-tools/)

## インストール
SDKはMavenやGradleから入手することができます。[Box Java SDK](http://opensource.box.com/box-java-sdk/)
以下はMavenの例。
“`XML

com.box
box-java-sdk

元記事を表示

Service と Dao(DB処理) と Entity ざっくりまとめ

Java のDB処理で `Service` , `Dao` (Data Accesss Object) を使ったときのはなし
`Service` と `DAO` と `Entity` の関係をざっくりまとめる
細かいことは気にしない!!いったんは流れが分かればOK!!!!
説明で使ってるサンプルプロジェクトのおおもとは GitHub [java-webapp-clump](https://github.com/sueasen/java-webapp-clump) にあります
ここでは DB接続 の方法として以下の2つでやってみる
– JDBC (Java Database Connectivity)
昔から使われてるDB接続方法(DB処理を実行するための 標準仕様)
– JPA (Java Persistence API) :
開発でよく使われるDB接続方法(DB処理を実行するための ORM (Object-Relational Mapping) の仕様)
# DB接続のORM の FW (フレームワーク) はいろいろある...ここではJPA標準の Eclip

元記事を表示

【eclipse】Springスタータープロジェクトの名前をリファクタリング(変更)した際に出現するエラーの解消方法

## 前置き
プロジェクト名を変更しようと、以下キャプチャから修正したところ
多数のファイルで見慣れないコンパイルエラーが出現。
ググっても中々解決策を見つけられず意外と手こずったので、もし同じような事象で
困っている方がいたら、解決手段の一つとして参考にしていただけたらと思います。
![20221106-223259.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/dd9f8921-7cb1-e77a-06f2-e01fa5d7c527.png)

## 結論
自動生成されるsettings.gradleファイルの内容を修正する事で解決できる。
![20221106-233406.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/d966f8eb-ef99-15a3-332b-dd78b59444f5.png)
以下キャプチャの”(シングルクォーテーション)内の値が古いプロジェクト名のままに

元記事を表示

【Java】コレクションの要素を削除するArrayListのremoveメソッドとIterator(イテレータ)のremoveメソッドの違い

**概要**
ArrayListの要素を削除するときの、下記2種類のremove()メソッドの挙動の違いを理解することを目的とし、Java API等の言語仕様説明を交えながらサンプルコードを動かします。
– ArrayListクラスのremove()メソッド
– ArrayListクラスのiterator()メソッドから取得したイテレータのremove()メソッド

実用性よりは知識を深めることに重点を置いた内容となっています。

**対象**
– オブジェクト指向の入門レベルを一通り学び終えている人
– ループでArrayListの要素を思った通りに要素を削除できなかった人
– 拡張for文でコレクションの要素を削除しようとしたら謎のエラーが出た人
– イテレータをあまり使ったことがない人
– 何となくでも「イテレータとは、ポインタとかカーソルとか矢印みたいに、コレクションの要素を指し示す何かそういうやつ」と分かっている人

## 1. コレクションの要素を削除するメソッドremove

ArrayList\クラスをはじめとするCollection\を実装するクラスでは、

元記事を表示

JdbcTemplateはSQLインジェクション対策できているのか

## これは何?
SpringBatchプロジェクトにおいて、JdbcTemplateを使ってDBアクセス処理を書いていた際、「これってちゃんとSQLインジェクション対策できてるの?」という問いが生まれました。

公式を読んでみても「されてるよ!」という明言が見つからなかったため、ライブラリの中身まで確認し、調査してみました。

## 想定読者
* JdbcTemplateってSQLインジェクションされてるのか不安な人
* SpringBatch実装したことがある人
* 検証にはSpringBatchプロジェクトを利用しています。ステップやジョブの概念など、細かいものは省きます。

## 結論
**出来てる**と思って問題ないと思います。検証に利用したバージョンとメソッドは以下。
※調査内容が膨大になるので、今回一つのメソッドのみで検証しました。
※鵜呑みにはせず、ご自身のプロジェクト内で議論/検討/判断のうえ利用するようにしてくださいね。

### Version

spring-boot-starter-batch:2.7.0
内部的にはspring-jdbc:5.3.23が呼

元記事を表示

ABC276A~Eの解答[Java]

## はじめに
今回はコンテスト中にA~Eが解けたので、それをそのまま説明しようかと思います。

では、見ていきましょう。

## A – Rightmost
問題文は[こちら](https://atcoder.jp/contests/abc276/tasks/abc276_a)

StringのlastIndexOfを使いました。
“`A.java
class Main{

static final boolean autoFlush = false;
static final Library System = new Library(java.lang.System.in,java.lang.System.out,java.lang.System.err,autoFlush);

public static void main(String[] args){

//Sの受け取り
String S = System.in.next();
//aのindexを調べる
int ans = S.lastIndexOf(“a”);
//見つからなかったら-1

元記事を表示

Java Gold SE 11を受けての感想

# Java Gold SE 11の概要
## Java Gold SE 11(以下Java Gold)とは
Java Gold SE 11とは、オラクル認定資格の一つで、
* Java Bronze
* Java Silver
* Java Gold
の3つの試験の一番難しい資格のことです。
受けるにはJava Silverに合格していることが必要です。

## Java Goldの試験範囲
Java Goldの試験範囲は、以下の項目です。
細かい説明は[こちらのURL](https://www.oracle.com/jp/education/certification/1z0-816-jpn-31705-ja.html “Java SE 11 Programmer II (1Z0-816-JPN) 試験”)を参照してください。
* Javaの基礎
* 例外処理とアサーション
* Javaのインタフェース
* 汎用とコレクション
* 関数型インタフェースとラムダ式
* JavaストリームAPI
* 組込み関数型インタフェース
* ストリームに対するラムダ演算
* モジュール型アプリケ

元記事を表示

SpringBoot2.7以降のAutoConfigurationについて検証

# 概要

SpringBoot2.7にて、auto configuration されるライブラリ作成方法について、公式が推奨する方法が変わった。
– [SpringBoot2.7のリリースノート](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes#building-jars-with-maven-shade-plugin-and-gradle-shadow-plugin)
– [公式ドキュメント](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.developing-auto-configuration)

ここでは、推奨方法に従って auto configuration されるライブラリを作成し、それを実際に使ってみる。
ライブラリの機能としては、`/ping`エンドポイントにGETリクエストしたら `hello world`を返却するものを作る。

# ライブ

元記事を表示

SpringBootServletInitializerがTomcatで実行される仕組み

# 概要
Spring BootアプリをTomcatにデプロイして実行する場合、SpringBootServletInitializerを継承したクラスを作成することで実現するが、Servlet仕様でもないSpringBootServletInitializerを継承したクラスがなぜTomcatで実行されるのかについて述べる。

# Servlet仕様との紐づけ
ずばりSpring Webに含まれるServletContainerInitializerを実装したSpringServletContainerInitializerの仕業だ。以下がそのクラスだ。
“`java:SpringServletContainerInitializer.java
package org.springframework.web;

import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Serv

元記事を表示

IntelliJ IDEA (Windows, Java) & WSL2 開発環境構築(2022.11)

# なぜ IntelliJ IDEA & WSL2 なのか

1. VS Code や Eclipse ではなく IntelliJ IDEA で開発したいため
– Java の開発体験が良いと複数人から聞いている
2. Windows 上ではなく使い慣れた WSL2 上で開発したいため
– PowerShell? Git BASH? ご冗談でしょう?

少し検索したんですが絶妙に参考になる記事が存在しなかったため書き起こします。なお、現状 Windows 側の IntelliJ IDEA と JDK (WSL2) の組み合わせでの開発は発展途上感覚があり、他の選択肢の可能性も排除しない方が良さそうです。

## 既知の不具合

:::note warn
動作が極端に重い現象が発生しており、原因調査中です。Indexing が重いような気がしています。NFS でマウントされていて I/O が遅いんですかね。 **現状(最新版の?)IntelliJ IDEA & WSL2 は選択肢に入らない可能性があります。** 以下に記載する対策のいずれかを取る必要があります。公式サイト

元記事を表示

HTTPURLConnection で Jenkins を shutdown する

https://qiita.com/nururuv/items/b269af6ac5ac472ceab1
https://qiita.com/satosystems/items/ad49cefa837e80c5083b
https://qiita.com/naginx/items/21e77c67f02a1ae65a29
HttpURLConnection timeout settings
https://stackoverflow.com/questions/2799938/httpurlconnection-timeout-settings

“`java
URL url = new URL(“http://example.com”);
URLConnection conn = url.openConnection();
conn.setRequestProperty(“Authorization”, “Basic ” + Base64.encodeToString(“username:password”.getBytes(), Base64.NO_WRAP));
// conn

元記事を表示

Junit4 の framework で 複数テストを行う

## Junit4 の framework で遊んでみた

[このレポジトリ](https://github.com/junit-team/junit4/tree/main/src/main/java/junit/framework) に、Junit3 ライクなテストライブラリが入っている。しかし、このライブラリでは複数テストの実行は行えなさそうなので、それを実現してみた(tearDown や setUp関数のような関数を見れば、カスタマイズ向けなライブラリな感じもしなくはないが・・・)。

ここでは、test から始まるメソッドでテストを複数個行えるようにコードの改造を行なった。以下のコードが動くようになるのが目標。

“`diff_java
import junit.framework.Assert;
import junit.framework.TestCase;
import junit.framework.TestResult;

public class Sample {

public static class MathTest extends TestCase {

元記事を表示

gradle init で作ったプロジェクトをEclipseにインポートするとテストクラスがバージョン不一致エラー

# 事象
gradle init でJavaプロジェクトを作成しEclipseにインポートすると、spockのテストクラスでエラーが出たのでこの対応記録です。
依存関係のgroovyバージョンとEclipseのgroovyバージョンを合わせることで解消できました。

# 環境

* 環境変数のgradleバージョン
“`bash
$ gradle -v

————————————————————
Gradle 7.5.1
————————————————————

Build time: 2022-08-05 21:17:56 UTC
Revision: d1daa0cbf1a0103000b71484e1dbfe096e095918

Kotlin: 1.6.21
Groovy: 3.0.10
Ant: Apache Ant(TM) version 1.10.11 com

元記事を表示

Junit4 で どうしても アノテーションなしでテストしたい場合 (Maven, Gradle などは未使用)

## JUnit4 でどうしてもアノテーションなしでテストしたい場合
ここでは、Maven や Gradle なしで 素のJava で、アノテーションなしで Junit を使うコードを書きます。
Junit4 の内部構造を知る上で、ライブラリの使い方が載っていなかったので、記事にしました(コメントを読めば分かるんですが・・・)。

まずは、[Junit4 の src/main/java](https://github.com/junit-team/junit4/tree/main/src/main/java) の下の `junit` フォルダをプロジェクトの配下に置きます。
そして、テストを行いたいファイルで まず TestCase を継承したテストクラスを作成します。

“`java
import junit.framework.Assert;
import junit.framework.TestCase;
import junit.framework.TestResult;

public class Hoge {
public static class HogeTest

元記事を表示

入力した約数を全部列挙するプログラム 線形探索と改良版の2パターン(Java)

最近約数を全部列挙するプログラムをjavaで書く方法を2通り思いついたのでそれを書いていきたいと思います。(今後自分が競プロとか参加した時にどこかで使う機会もありそうだなと思ったのでメモとしての役割もありますが)
# そもそも約数って何?(一一”)
数学において整数 N の約数とは、N を割り切る整数またはそれらの集合のことである。(wikipediaより)

https://ja.wikipedia.org/wiki/%E7%B4%84%E6%95%B0

約数って何?って聞かれたときにこう答えられたらかっこいいですね。僕は「6÷2って整数で割り切れるよね?じゃこの時2は6の約数なんよね」といったノリで答えてしまいそうな気がします。
プログラム的には、数字a,b(0 < aかつ0 < b <= a)があり、a%b == 0 になる時bはaの約数と言えますね。 これを頭に入れてとりあえず組んでいきます。 # パターン1:とりあえず線形探索 ```Java:Divisor.java import java.util.*; public class Divisor { public

元記事を表示

【Java SE11 Gold】コンパイルエラーと実行時エラーの見分け方

## 前書き
:::note info
この記事は約5分で読めます
 Javaの基礎を習得している方向けの内容となっております
:::

Java Goldの勉強中に

「これはコンパイルエラーなのか?」「文法ミス以外にも結構コンパイラーでチェックしてくれるんだ!」

とコンパイルエラーのことで理解するのに時間がかかっていたので、今回は

コンパイルエラーと実行時エラーの違いと見分け方について解説していきます

勉強する中で疑問に思ったことや理解できなかったことを記事にして、

他の人や未来の自分が見返せるようにしていきたいと思います。

## 違い
エラーには、大きく分けて2種類あります。

1. コンパイルエラー
1. 実行時エラー

まず最初は、この区別をしっかりつけることが重要になります。

__コンパイルエラー__
>プログラミング言語で記述されたソースコードを機械語のコードに変換(コンパイル)する際に、何らかの致命的な問題が発生して失敗・中断すること。主な原因はプログラムを記述する際の記述ミスによるものが多い

__実行時エラー__
>コンピュータプログラムの実行時に発生す

元記事を表示

Mac の Homebrew で複数バージョンの Java を利用する

# 概要

Mac の Homebrew で複数バージョンの Java を利用するときのメモ。
なお、複数バージョンの Java を利用する方法としては jEnv を使う手もある。しかし毎回なにで Java を入れているのか忘れて「Homebrew かな?それとも別の何か…?」と混乱するので、もう Homebrew を使うことにした。

# 既存の Java をアンインストールする場合

Mac から既存の Java をアンインストールしたい場合は以下のようにする。
公式では以下のコマンドが推奨されている。

“`bash
$ sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
$ sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefPane
$ sudo rm -fr ~/Library/Application\ Support/Oracle/Java
“`

しかしこれだけでは JDK までは削除できない。
以下のコマンドで場所を確認

元記事を表示

#5 Springで画面の入力値を受け取り表示する

# #5 Springで画面の入力値を受け取り表示する
今回は画面から入力された値を別画面に表示していきたいと思います。

# 前回まで
今回はH2データベースを利用しますが、必要な設定は前回の記事を見てください!

https://qiita.com/Jackoguro/items/25ea687b526da1b4267d

# 前提条件
この記事はSpringの最低限の知識が必要になります。
また、なるべく分かりやすく書くつもりですが、この記事の目的は自分の勉強のアウトプットであるため、所々説明は省略します。

# 構築環境
1. 各バージョン
Spring Boot ver 2.7.5

2. 依存関係
依存関係は前回の記事と一緒です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884987/5f49ffae-5b2a-5ccf-5357-ff8a7e2a6b4e.png)

# 成果物
![image.png](https://qiita-image-store.s3.ap

元記事を表示

未だにNPEを出すエンジニアが反省する備忘録

Javaにおける[NPE(Null Pointer Exception)](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/NullPointerException.html)は「nullのオブジェクトを使おうとしてるぞ」という例外です。例えば`myNote.getLines()`という文はコンパイル時にエラーを出しません。ただ、`myNote==null`の時に`null.getLines()`を実行することになり「nullにgetLines()なんてメソッドはない」という原因でNPEが投げられます。

Javaの参照型オブジェクトは全てnullが入りうるのですが、それを利用すると例外が出ます。危ない。「[null安全](https://atmarkit.itmedia.co.jp/ait/articles/1803/15/news012.html)」という言葉があるくらいですから、丁重に扱うべきでしょう。

nullを安全に扱う方法や仕組みは色々ありますが主に[Optional](https://docs.oracle.

元記事を表示

OTHERカテゴリの最新記事