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

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

More about Java Serialization

# About Serialization interface

There is a brief introduction on [baeldung](https://www.baeldung.com/java-serialization) to discuss on Serialization interface. Which includes

1. The fact that **all non static fields** of serializable class must be serializable
1. How to save/load object instance
1. Define custom steps on save/load object instance
1. The function of field “serialVersionUID”
1. The function of keyword “transient”

# About writeReplace() and readResolve() function

## Example
Ple

元記事を表示

可変長引数にリストを渡すときの罠

# なにこれ?
Javaではメソッド定義で可変長引数を設定できますが、その引数にリストを渡すときは注意しないといけないよという話です。

# そもそも可変長引数とは?
メソッドの引数として個数が任意のものです。
例えばString.formatでは以下のように第1引数に書式文字列、第2引数に書式指示子(%s, %dとか)によって参照される引数を渡しますが、この第2引数は要素数が可変です。
“`java
public static String format(String format, Object… args)
“`
このため、以下のように第2引数以降は好きな数だけ引数を渡せます。
“`java:sample.java
public class Main {
public static void main(String[] args) {
System.out.println(String.format(“メッセージです”));

System.out.println(String.format(“%s宛のメッセージです

元記事を表示

Java on Azure 実践開発【App Service デプロイ用スクリプトを利用したサーバーサイドビルド】

## はじめに

ポリシー上、GitHubを使えない企業様は多いのではないでしょうか。また、ソースコードを外部に配置することになんとなく嫌な気持ちになるエンジニアの方もいらっしゃるのではないでしょうか。
かといって、ローカルでビルドサーバーをもつのも、管理が大変ですよね。「App Service をホストしておくだけで、デプロイまで完結できればいいのに」なんて思っている方も少なくないのではないでしょうか。

そんな皆様に、本記事では、App Service をホストしておくだけで、デプロイまで完結させる方法をご紹介します。

## App Service

Azure App Service とは、Web アプリケーションやREST API、モバイルバックエンドをホストするための PaaS サービスです。

公式サイト: 『[App Service](https://azure.microsoft.com/ja-jp/services/app-service/)』

## App Service へのデプロイ方法

Azure App Service には、色々なデプロイ方法があります

元記事を表示

Springboot csvファイル出力 (単体テスト有り)

# 概要
SpringBootでcsvファイルを出力します。
csv出力機能はjackson-dataformats-textというライブラリを使います。
テストはJunit5とMockitoを使います。

# 成果物
ボタンを押すとcsvファイルがダウンロードされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/1b04ca0b-fc7d-cb9f-2329-3f44171d280c.png)

csvの中身
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/f6f579d8-2029-1080-14c0-b9d1c4b4227b.png)

# 動作環境
OS:Windows10
IDE:IntelliJ Community or CodeSpace
Javaバージョン:11(pom.xmlでバージョン変えればok、17は確認済み)
Spring bo

元記事を表示

ABC259A~Dの解答[Java]

## はじめに
今回はA~Cがコンテスト中に解けて、コンテスト後にDも解けたのでDまで解説しようと思います。
なお、ライブラリはABC258のものと同じですのでメソッドの中身が気になる場合は258の記事をご参照ください。

では、解説していきます。

## A – Growth Record
問題文は[こちら](https://atcoder.jp/contests/abc259/tasks/abc259_a)

文章、制約を読み込んでみましょう。

「高橋君はN歳になった」と書いてあり、その時の身長はT[cm]だと記述してあります。
また、それ以下の文章を要約すると「0~X歳まで身長がD[cm]ずつ伸び続け、それ以降はずっと変化していない」ということを言っています。

ここで制約に着目すると、MMならX

元記事を表示

DbUnit使い方メモ

# DbUnitとは
– Java でデータベースのテストを行うためのフレームワーク
– JUnit でテストを実行する前にデータベースにテストデータを登録したり、テスト後のデータベースの状態が期待通りか検証したりできたりする
– テストデータや期待値は XML、CSV、Excel 形式で定義できる
– 結構昔からあるけど、2022年現在も Java でデータベースのテストをする場合は DbUnit が現役らしい[^1]

[^1]: [DbUnitを試してみる – CLOVER?](https://kazuhira-r.hatenablog.com/entry/2022/04/13/015738)

# 環境
OS とか Java とかのバージョン。

“`
>gradle –version

————————————————————
Gradle 7.4.2
————————————————————

Build tim

元記事を表示

RxJavaでFlowableを使って流量制限

RxJava の Flowable を使った流量制限(Backpressure)の方法について調べる機会があったので、その時に分かったことをまとめる。
(意外と欲しい日本語情報少なかったので)

## Observable と Flowable

RxJavaでは上流と下流で分けて考え、
Java8に導入された Stream の終端操作とそれ以外の処理のような形で書くことができる。
例えば並列実行で使用する Observable は以下のような感じで記載できる。

“`java
final Observable observable = Observable.create(emitter -> {
try {
for (int i = 0; i < 10; i++) { emitter.onNext(i); } emitter.onComplete(); } catch (Throwable t) { emitter.onError(t); } }); observable.forEach(System.ou

元記事を表示

GraalVMでネイティブイメージを作成 on Windows

# 概要
GraalVMを使うとJavaアプリケーションをネイティブイメージ化できます。(JVM不要で実行できる)
パフォーマンスなどJVMで実行するのとかなり異なる特性を持ちますが、ここでは触れません。
Windowsでビルドを試したので、その手順だけ書きます。

# 環境
* Windows 11
* Java 17
* Gradle 7.4(Kotlin DSL)

# 手順

## Javaアプリケーションを書く
もちろんビルド対象のアプリケーションを書く必要があります。試すだけならHello worldでいいですが、私は(機能限定版ですが)tailコマンドを作ってみました。

https://github.com/dhirabayashi/mytail

## Visual Studioをインストールする
ネイティブイメージ化はGraalVMからC++のコンパイラを呼んで実行されるようです。なのでそのためのコンパイラが必要です。
コンパイラはいくつかあると思いますが、Visual Studioをインストールするのがいいようです。

現時点で最新版のVisual Studio

元記事を表示

JUnit 単体テストの概要

# はじめに
業務で使用しているJUnitについて備忘録も兼ね、まとめていきたいと思います。
内容が多いため、何章かに分けてまとめていく予定です。
今回は、まずJUuitの内容に入る前に単体テストについてまとめていきたいと思います。

# JUnitシリーズ 項目表

| NO     | タイトル |
| —- | ——————- |
| その1 | [JUnit 単体テストの概要](https://qiita.com/ryo0527/items/70550e0a556975a593f5) |
| その2 | JUnit 環境の準備 (現在執筆中)          |

※ 新しい記事が作成できましたら、表は更新します。

# 単体テストとは
テストには、単体テストや結合テスト、総合テストなど様々なフェーズがあります。
各テストにおいて、目的や役割がそれぞれ定められています。
今回は、その中でも単体テストに焦点を当て、まとめていきたいと思います。

単体テストとは、モジュール(部品)単位でプログラムが正常に動作するかを検証する

元記事を表示

SpringBootのお勉強

# 概要

以前、業務でSpring Bootを触る機会があったため、社内wikiに備忘録的にメモを残していました。
オープンな場に残しておこうと思い、ここに書いておきます。

## Spring Bootとは

* Spring Framework一族のひとり
* 簡単な設定で使えるSpring
* Webコンテナを内包する
* Webコンテナをjarに含めるので、jar単体でWebアプリとして成立する(スタンドアロン)

## 環境構築

* Eclipse or IntelliJ IDEA Community EditionにSTS(Spring tool suite)のプラグインを入れる
* Spring Starter Projectを作成する
* ウィザードに従う
* とりあえずweb -> Spring webを入れておけばおk

## 実践

### AutoConfigure

* Bean定義自動設定
* `@SpringBootApplication`
* ↑のアノテーションに`@SpringBootConfiguratio

元記事を表示

static修飾子の使い方(Java)

【目的】
staticについて理解を深めるための投稿。

【この記事でやりたいこと】
staticを利用して、Sample2クラスで定義したnameという変数(“hello”)をSample1クラスで使いたい。

【事前知識(そもそもstaticとは?)】
クラスをインスタンス化せずに、直接的にメソッドや変数にアクセスするために必要なもの。

【利用するクラス】
○Sample1クラス
○Sample2クラス

【検証】
Sample1クラス
“`Java
public class Sample1 {
public static void main(String[] args) {
//①static String name = “hello”を利用した場合(※今回の目的)
System.out.println(Sample2.name);

//②String name = “hello”を利用した場合 
Sample2 sample2 = new Sample2();
System.out.prin

元記事を表示

org.thymeleaf.exceptions.TemplateInputException: Error resolving template, template might not exist or might not be accessible by any of the configured Template Resolvers

Spring bootでプログラムを書いていてハマったメモ。

プログラムを実行し、入り口URLにアクセスしたところ、表題のエラーメッセージが表示された。
コントローラーのソースを見ても、

return “uploadForm”;

おかしな値は返していない。

src/main/resources/templatesフォルダを作成し、その中に、ちゃんとHTMLファイルを置いている。ファイル名はuploadForm.htm 。

uploadForm.htm …

**そこだ!**

uploadForm.html

とリネームすると、期待した動作となった。

今時、拡張子をhtmとするやつなどいない。**加齢臭あふれる間違い**だった。

以上。

元記事を表示

【Java】Spring Data JPAでN+1問題が起きないコーディングをしよう。

# N+1問題とは
**1対多**の関係にある2テーブルの情報を紐づけて取得する際に、必要以上にSQLが実行されてしまうこと。
  
  対象テーブル(School)
  関連テーブル(Student)

具体的には、対象テーブル(School)に紐づく**関連テーブル(Student)を取得するSQL**が必要以上の回数で実行されてしまう。

# SQLでN+1問題を解説

1つのSchoolに対して、複数のStudentが紐づく。
|Schoolテーブル|
|—-|
|id|
|name|

|Studentテーブル|
|—-|
|id|
|name|
|school_id ****|

JOINを使えば、全Schoolとそれに紐づくStudentを1つのSQLで取得できる?
“`sql
SELECT * FROM School sc JOIN Student st ON sc.id = st.school_id;
“`
これで話は終わり…ではなく、N+1問題の場合はどういうSQLになるかというと、次のようなSQLとなる。
“`sql
— 最初に、全

元記事を表示

アノテーションベースの MyBatis で one-to-one / one-to-many のテーブルを1クエリでとってくる方法

積年の疑問が晴れた。が、だいぶゴツい。

## サマリ

– one-to-many のときは、@One アノテーションに columnPrefix / resultMap を使う
– many-to-many のときは、@Many アノテーションでおなじようにすればできるはず(未検証)

## 背景

### 過去、アノテーションベースでは N+1 問題が回避不可だった

https://qiita.com/d-yosh/items/a2bec9718bccfe15a6ae#one-many

> しかし、@Oneや@Manyでは上記と同じことを実現できず、必ず他の select を実行するしかありません。
select を利用する方法は N+1 問題が起きてしまうのが嫌で、個人的にはあまり使っていなかったので、ここはちょっとデメリットかなと思いました。

## mybatis-3.5.5 で解消した模様
mybatis-3.5.5 で `@One` `@Many` に columnPrefix を指定できるようになった。
これにより、N + 1 問題を発生させずに、1クエリで on

元記事を表示

HottyDB(検索エンジン+レコメンドエンジン+RDBMS)を個人開発するために読んだ書籍紹介!

# この記事の概要
筆者は、HottyDBという検索エンジンとレコメンドエンジンの機能を搭載したRDBMS(リレーショナルデータベース)を個人開発しています。
この記事では、HottyDBを開発するにあたって勉強した書籍を紹介したいと思います!

ちなみに、HottyDBについて詳しく解説した記事もアップしていますので、こちらもあわせてご覧ください!

https://qiita.com/toru1055/items/0fe400989373823e9c78

# 読んだ本を紹介

## ざっくり分類すると、
読んだ本をざっくりと分類するとこんな感じになります。

| 分類 | 説明 |
| — | — |
| データベースの基礎 | データベースの実装方法の大枠を掴む |
| データベースの実装 | データベースの実装方法の詳細 |
| コンパイラ系 | データベースはSQLで操作するので、SQLを解釈するためにコンパイラの知識も必要 |
| Java | Javaによるマルチスレッドプログラミングやネットワークプログラミングの方法を勉強|
| アルゴリズムとデータ構造 |

元記事を表示

Eclipseで構築したサーバーが起動しないときの対処法

古い環境で需要のある内容ではないですが、かなりハマったので残しておきます。

# 開発環境
macOS Monterey 12.3.1
Eclipse 2019-12 (4.14.0)
Tomcat v8.0

# 概要
環境構築中、Eclipseでサーバーを構築し、起動させるとすぐにエラーメッセージがコンソール上に表示されました。
“`text:コンソール
重大: Begin event threw exception [火 7 05 15:48:49 JST 2022]
警告: Catalina.start using conf/server.xml: Error at (21, 76) : org.apache.catalina.startup.VersionLoggerListener [火 7 05 15:48:49 JST 2022]
重大: Begin event threw exception [火 7 05 15:48:49 JST 2022]
警告: Catalina.start using conf/server.xml: Error at (21, 76) :

元記事を表示

JUnit5の@BeforeEachと@AfterEachが実行されない

# 問題
JUnit5でテスト実行時に`@BeforeEach`アノテーションと`@AfterEach`アノテーションのついたメソッドが実行されないことがあった。

# 解決策
下記リンクの回答で解決。

https://stackoverflow.com/questions/49441049/junit-5-does-not-execute-method-annotated-with-beforeeach

>Your init() method is not invoked because you have not instructed Maven Surefire to use the JUnit Platform Surefire Provider.
>Thus, surprisingly your test is not even being run with JUnit. Instead, it is being run with Maven Surefire’s support for what they call POJO Tests.
>Adding the foll

元記事を表示

LDAP再認証

概要 : SOS用ユーザのLDAP認証が失敗した際に認証を救済する。

処理概要: 1. LDAP検索用ユーザが認証したユーザの組織情報の検索を行う。
      2. 検索結果により、正しい組織情報を用いて再度認証を行う。

前提条件: LDAP検索用ユーザがLDAPサーバ側に用意されている事。

※ 戻り値によりエラー内容を識別しているため、当処理は必ず例外処理内に記述してください。

※ LDAPサーバのURI,ポート,ドメイン,組織情報等については各自設定をお願いいたします。

※ FRONT_SGはxmlファイルです。
  xmlファイルのタグ参照は必須ではないため、
  各プロパティに直接値を設定してください。

・ LDAP認証プロパティ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1339882/67759b5d-713b-4f71-10eb-e9501fca71f4.png)

・ソース

public static int authenticationLD

元記事を表示

JavaによるSwingを用いたオセロゲームの作成

## 環境
Eclipse IDE 2022-03 (4.23.0)
MacBook Pro 2020
macOS Monterey バージョン12.4

## 使用技術
Java (11.0.14.1)
Swing

## プログラムの概要
ローカルのPC上で動作するオセロゲームアプリケーション。
プログラムで動作するコンピュータが相手となる。

## 機能
– オセロゲームの基本的なアクション。(コマの配置、パス)
– 難易度の選択

## 工夫した点
#### コンピュータがコマを置く場所を探索する際の動き
##### ①最初に考えたプログラム
自分の駒が置いてあるマスの周りにある敵の駒を探し、敵の駒があればその場所から再度周りの敵のコマ探す
##### ②工夫したプログラム
自分の駒が置いてあるマスの座標を取得し、周囲に敵の駒があった場合にその方向のマスの座標を連続してリストとして取得し最終地点に空きマスがあるか判定する

①の場合、コードを見たときに直感的にわかりにくくバグの確認などが難しくなる可能性があったため、工夫をしました。

元記事を表示

個人開発で、検索エンジン+レコメンド機能つきRDBMS:「HottyDB(α版)」を開発しました!

# この記事の概要
個人開発で **HottyDB** という検索エンジンとレコメンドエンジンの機能を搭載したRDBMSを開発し、α版を公開しました!

#### [>> HottyDBの公式サイト](https://hottydb.gitlab.io/site/)
https://hottydb.gitlab.io/site/

ので、この記事では**HottyDB**の特徴的な機能やその使い方について紹介したいと思います!

# HottyDBとは?
![logo](https://hottydb.gitlab.io/site/facebook_cover_photo_2.png)
HottyDBとは、検索エンジンとレコメンドエンジンの機能を搭載したRDBMS(リレーショナルデータベース)です。
SQLを用いた通常のデータ操作に加え、文書の全文検索や検索結果の機械学習ランキング(MLR)・アイテムレコメンデーションのロジックなどを全て1つのソフトウェアで担います。
1つのソフトウェアでこれらを実現することで、面倒なデータ伝送システムの構築を一切不要にし、利用者は機械学習などの知

元記事を表示

OTHERカテゴリの最新記事