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

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

【JUnit】JUnitとは何?から始める方向け記事

# JUnitをこれから使う方へ
自分自身、初めて仕事でJUnitを使うことになった時に苦しんだ経験があるので今回の投稿をしようと考えました。
## 1. JUnitとは
まず初めに単体テストについて説明します。
単体テストとは、作成した一つ一つの機能に対して正常に動作するかを確かめるために作成するテストを指します。
別名「ユニットテスト」「プログラムテスト」とも言います。
他にも**結合テスト**、**システムテスト**、**運用テスト**等があります。

単体テストの中でもJUnitはJavaで単体テストを実施するためのテスティングフレームワークです。

JUnitのメリットとしては以下が挙げられます。
▪単体テストを行うためのテストコードを簡単に生成できる
▪作成済みテストコードを用いて何度でも簡単にリグレッションテスト*1ができる
▪誰もが同じテストを実施できるようになる
▪独自にテストコードを作成する手間が省ける

*1.回帰テスト、退行テストとも呼ばれ、プログラムの一部分を変更したことで、ほかの箇所に不具合が出ていないかを確認するためのテストです

以上に挙げた通り、JUn

元記事を表示

【Java】JVMにおけるメモリ管理とガベージコレクションについて

# 初めに
組み込み系エンジニアの友人と飲んでいた際、C言語ではメモリをユーザが意図的に開放しないとメモリリークが起きるということを教えてもらいました。
自分は普段Javaを書いてますが、メモリを意識してコーディングをしたことはほとんどありません。どのような仕組みになっているのか気になったため、Javaにおけるメモリ管理について調べてみました。

# Javaではメモリ管理は誰がやってるの?
CやC++ではユーザが意図的にメモリ管理をする必要がありました。JavaではJVMがその役割を担っています。メモリの使用や解放を自動で行ってくれるため、ユーザがメモリを意識せずにコーディングできるというわけです。

# メモリの種類
Javaプログラムが実行されると、Javaのプロセスにメモリが割り与えられます。そのメモリ領域は以下の4つの領域に分けられます。
* ヒープ領域
* スタック領域
* メタスペース
* ネイティブメモリ(※JVMではなくOSが管理する領域)

|領域|用途・特徴|
|–|–|
|ヒープ領域|生成されたインスタンスの情報が保存される領域。|
|スタック領域|実行中の

元記事を表示

AtCoder ABC 327 の A,B,C だけやってみた (Java)

# 詳細
[AtCoder ABC327](https://atcoder.jp/contests/abc327)
# A
## 問題
与えられた文字列の中に `ab` もしくは `ba` が含まれているか。
## コード
“`java
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
scanner.next();
String S = scanner.next();
scanner.close();
System.out.println(S.contains(“ab”) || S.contains(“ba”) ? “Yes” : “No”);

}
}
“`

# B
## 問題
与えられた整数を B として、
“`math
X^X = B
“`
となるような X を出力

元記事を表示

形式記述言語VDM++の制御構文(if文)をJava C# Re:Mind(自作言語)と比較

# はじめに
数学的形式手法VDM(Vienna Development Method)[^1]のオブジェクト指向拡張言語VDM++ですが、ロジックの実装も記述できる構文が用意されています。本記事ではVDM++の制御構文をJavaとC#そして自作言語のRe:Mind[^2] と比較してみます。

## この記事内容の作業目的
VDM++の下記の制御構文[^3][^4]についていくつかの記事に分割して比較検討します。VDMのような数学的形式手法を使わない場合は、一般的に自然言語の日本語で要求仕様が記述されているものと推察されます。本記事では数学的形式手法と自然言語の日本語記述とのはざまで、構造化された日本語が要求仕様記述に使えないか模索しています。

・ブロック文
・代入文
・**条件文** ←本記事対象
・ループ文
・call文
・return文
・コメント文
・例外

Re:MindはJavaやC#の経験者向けに設計された日本語プログラミング言語の一種で、ロジック仕様記述言語とトランスコンパイラ言語とで言語仕様を共有しています。
クラスの定義構文についてはこちらの記事[^5]を参照す

元記事を表示

形式記述言語VDM++の制御構文(ブロック文)をJava C# Re:Mind(自作言語)と比較

# はじめに
要求仕様記述段階での使用が主に想定されている数学的形式手法VDM(Vienna Development Method)[^1]のオブジェクト指向拡張言語VDM++ですが、ロジックの実装も記述できる構文が用意されています。本記事ではVDM++の制御構文(ブロック文)をJavaとC#そして自作言語のRe:Mind[^2] と比較してみます。

## この記事内容の作業目的
VDM++の下記の制御構文[^3][^4]についていくつかの記事に分割して比較検討します。

・**ブロック文** ←本記事対象
・コメント文
・代入文
・条件文
・ループ文
・call文
・return文
・例外処理

VDM++はオブジェクト指向言語的な言語要素を持ち、数学的形式手法言語の中では一般のプログラミング言語のオブジェクト指向言語に近い面があります。また、Re:MindはJavaやC#の経験者向けに設計された日本語プログラミング言語の一種で、自然言語の日本語で記述するよりは厳密な構造的な記述が可能です。クラスの定義構文の比較についてはこちらの記事[^5]を参照することができます。

## こ

元記事を表示

Oracle Database 23c Free – Developer Releaseをdockerから起動

従来、開発や検証用途のためdockerでOracleを起動するのはイメージビルドなど若干の手間が必要だったが https://container-registry.oracle.com/ords/ocr/ba/database/free のイメージ使用により非常に簡単になった。

たとえば、ちょっと試す分には以下で良い。さすがに初回はdocker pullにそれなりの時間は要するが。

“`
docker run –name myoracle -p 11521:1521 -e ORACLE_PWD=”a” container-registry.oracle.com/database/free:23.2.0.0
“`

以下は起動確認用のspringアプリケーション。

“`groovy:build.gradle
plugins {
id ‘java’
id ‘org.springframework.boot’ version ‘3.1.5’
id ‘io.spring.dependency-management’ version ‘1.1.3’
}

group =

元記事を表示

[リサーチ・メモ] spring-secueiryとVueを使用してログイン画面を作成する#2DB登録ユーザーでログインまで

## UserDetailsImplを作成する
※ユーザー情報を提供するインタフェースの実装
“`
public class UserDetailsImpl implements UserDetails {
private static final long serialVersionUID = 1L;
private String email;
private String password;
private Collection authorities;

public UserDetailsImpl(String email, String password, Collection authorities) {
this.email = email;
this.password = password;
this.authorities = authorities;
}

@Override
public Collection

元記事を表示

Udemy講座のお知らせとクーポンコードの発行(2023年11月分)

### 自己紹介

皆さん、こんにちは、Udemy講師の斉藤賢哉です。私はこれまで、25年以上に渡って企業システムの開発に携わってきました。特にアーキテクトとして、ミッションクリティカルなシステムの技術設計や、Javaフレームワーク開発などの豊富な経験を有しています。様々なセミナーでの登壇や雑誌への技術記事寄稿の実績があり、また以下のような書籍も執筆しています。
* [「マスタリング Java EE 5」(2007年)](https://amzn.asia/d/j0txqK5)
* [「アプリケーションアーキテクチャ設計パターン」(2017年)](https://amzn.asia/d/9avaCyF)

いずれも**Java EE**(**Jakarta EE**)を中心にした企業システム開発のための書籍です。中でも [「アプリケーションアーキテクチャ設計パターン」](https://amzn.asia/d/9avaCyF)は、(Javaに限定されない)比較的普遍的なテーマを扱っており、内容的にはまだまだ陳腐化していないため、興味のある方は是非手に取っていただけると幸いです(中級者向

元記事を表示

MyBatisでDBの共通カラムを設定する

## Aspectで値を設定する

Aspectを利用して、Mapperを実行する前にパラメータに値を設定する。
対象となるプロパティを共通仕様にして、これを拡張したものを利用すると良い。
今回は、以下のテーブル共通項目を自動で設定する仕様とする。

– 登録者
– 登録日時
– 更新者
– 更新日時
– バージョン

“`Java:MapperAspect

import java.lang.reflect.Method;
import java.util.Date;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.util.Reflectio

元記事を表示

Thymeleafでセレクトボックスを独自タグで実装する

## Dialectを利用して共通のセレクトボックスを実装する

### CustomDialect

AbstractProcessorDialectを継承したCustomDialectを作成する。
StandardDialect.PROCESSOR_PRECEDENCE+1を指定することで、Thymeleafの共通タグより生成順を1つ下げている。

“`java
public class CustomDialect extends AbstractProcessorDialect {

public CustomDialect() {
super(“CustomDialect”, “item”, StandardDialect.PROCESSOR_PRECEDENCE + 1);
}

@Override
public Set getProcessors(String dialectPrefix) {
Set processors = new HashSet<>();
processors.add(new Ite

元記事を表示

webjarsでプラグインを組み込む

gradleでプラグインを組み込む方法を記載します。
以下では、Bootstrap、Bootstrap-multiselectを組み込みます。
同時にHTML上でのバージョンの指定をwebjarsに依存させるため、webjars-locatorを利用します。
プラグイン情報は以下から検索することができます。

https://mvnrepository.com/

“`gradle
implementation ‘org.webjars:webjars-locator:0.42’

implementation ‘org.webjars.bower:bootstrap:4.5.3’

implementation ‘org.webjars.bower:bootstrap-multiselect:1.1.1’
“`

Thymeleafでは、以下のようにth:srcに指定します。
ソースの場所は、Eclipseのプロジェクトの「パッケージ・エクスプローラー」上でも確認することができます。

![bootstrap.png](https://qiit

元記事を表示

Singleton作成時の注意点

– 複数のクライアントが1つの同じオブジェクト インスタンスを共有するため、無状態(stateless)に設計する必要がある。
– 特定のクライアントに依存するフィールドがあってはならない。
– なるべく読むことだけが可能でなければならない。 **値を修正してはいけない。**
– フィールド**の代わりにJavaで共有されない、ローカル変数、パラメータ、Thread Localなどを使用しなければならない。**

<問題点>
例えば、以下のように状態を維持するフィールドを作ってしまうと、
stateful Service 1 で100、stateful Service 2 で200を注文しましたが、statefulService1が200を注文したと出てくる。
“`java
package hello.hellospring.singletone;

public class StatefulService {

// 状態を保つフィールド
private int price;

public void order(String name, int price

元記事を表示

Open Libertyで管理するDataSourceをSpring BootからJNDI参照する

Open Libertyで作成・管理されているDataSourceをSpring BootからJNDIで参照してデータベース操作に利用する方法を解説します。

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

|コンポーネント名|バージョン|
|:–|:–|
|JDK|OpenJDK 17.0.8 (IBM Semeru Runtime Open Edition)|
|Open Liberty|23.0.0.10|
|Spring Boot|3.1.5|

“`bash
$ java -version
openjdk version “17.0.8” 2023-07-18
IBM Semeru Runtime Open Edition 17.0.8.0 (build 17.0.8+7)
Eclipse OpenJ9 VM 17.0.8.0 (build openj9-0.40.0, JRE 17 Mac OS X amd64-64-Bit Compressed References 20230718_503 (JIT enabled, AOT enabled)
OpenJ9 – d1

元記事を表示

OpenFeignでDMM.comと通信する

## 目次
* [概要](#概要)
* [環境](#環境)
* [構成](#構成)
* [各種サービスの用意](#各種サービスの用意)
* [実装内容](#実装内容)
* [実行結果](#実行結果)
* [所感](#所感)
* [参考資料](#参考資料)

## 概要
OpenFeignを使用して、DMM.comと通信するアプリを作る一連について記載しています。
画面については、[ChatGPT](https://openai.com/chatgpt)にベースを作成してもらい、後は頑張って[Thymeleaf](https://www.thymeleaf.org/)化しました。
ソースコードだけ見たい方は[こちら](https://github.com/he23inw3/openfeign-example)から。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534209/9ae41b31-eddd-f28e-cf95-607360e51c2e.png)

## 環境
* Kotli

元記事を表示

【Java8→11】CookieのMax-Ageが返す値が異なる

日本語資料があまりなかったので。

JavaにはLTS(Long Term Support)というバージョンがあって、現在だとJava8, 11, 17, 21がLTSバージョンであり、サポート期間にあたります(サポート期間はディストリビューションに寄る)。そのため、Java8で動いているサービスというのも結構あります。しかし、サポート期間は無限ではないので、サポート期間のうちに最新のLTSに上げておくと、不安の種が1つ減ります。今回の話題はそんなJavaのバージョンを8から上げた時に見かけた現象を説明します。

# CookieのMax-Age

HTTPでは、サーバーとクライアントの情報のやり取りの機構の一つに[Cookie](https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies)というものがあります。サーバーがクライアントにクッキーを送ると、クライアントは次のリクエストの時に送られたクッキーを送り返すことで、サーバー側はそのリクエストがどのクライアントからきたかなどを把握することができるようになります。いわゆるセッションとい

元記事を表示

プロになるJava 学習記録

# プロになるJava 学習記録
## 第5章
### BigDecimal
少しわかったような気がした。

### ChatGPTに聞いてみた内容
BigDecimalは、Javaプログラミング言語で提供されている数値データ型の一つです。BigDecimalは、浮動小数点数の精度に関する問題を解決するために使用されます。通常、浮動小数点数を使用すると、小数点以下の桁数が制限され、丸め誤差が発生する可能性があります。しかし、BigDecimalは任意の精度の数値を扱うことができます。

以下は、BigDecimalの主な特徴と使用法の要約です:

高精度: BigDecimalは、任意の桁数の整数と小数点以下の桁を保持できます。これにより、非常に精密な計算を行うことができます。

丸め誤差の回避: 通常の浮動小数点数型(floatやdouble)は、丸め誤差が生じることがあります。BigDecimalはこれを回避し、正確な計算を提供します。

精度の設定: BigDecimalは、数値を保持する際に必要な桁数を指定できます。これにより、特定の精度で数値を表現することができます。

算術

元記事を表示

Leetcode 1441. Build an Array With Stack Operations

https://leetcode.com/problems/build-an-array-with-stack-operations/description/

“`java
class Solution {
public List buildArray(int[] target, int n) {
ArrayList result = new ArrayList<>();

int index = 0;
int currNum = 1;

while (index < target.length && currNum <= n) { int num = target[index]; if(num == currNum){ index++; currNum++; result.add("Push");

元記事を表示

【Java Silver】cloneメソッドをできるだけわかりやすく解説

Javasilver se11の勉強をしていて、黒本の総仕上げ問題②74問、79問(cloneメソッドの問題)で悩んだので簡単に整理してみようと思います。記事を書くのは初めてなので、温かい目で見ていただければ幸いです。

:::note info
書き方と簡単な仕様についての解説になっています
:::
# cloneメソッドとは
その名の通り、自分のクローンを作るメソッドになっています。
コード自体はとても簡単で分かりやすいですね。
“`html:cloneメソッド
int[] a1 = {100,200};
int[] b2 = a1.clone(); //100,200が入ってる
“`
cloneメソッドはObjectクラスのサブクラス(参照型)で利用できます。
intやdoubleなどのプリミティブ型は参照を代入できず、コンパイルエラーが発生します。
“`html:コンパイルエラー
int a1 = 100;
int b2 = a1.clone(); 
“`
Object型ですが、Stringクラスでは使えずコンパイルエラーが発生します。
“`html:コンパイルエラ

元記事を表示

JavaでPDFをSVGに変換

SVGとは「Scalable Vector Graphics( 拡大縮小可能なベクター画像)」を意味し、2ビットのベクター画像用に設計されたファイル形式です。ベクターグラフィックには、鮮明さを保ちながら自由に拡大縮小できるなど、多くの利点がある。SVG、PDFはすべてベクターグラフィックスのファイル形式である。 したがって、PDFがSVGに変換されたときに、その中の要素はほとんど失われません。 この記事では、Javaプログラムで**PDFをSVGに変換**する方法を紹介します。

– **[各PDFページをSVGファイルに変換](#各pdfページをsvgファイルに変換)**
– **[すべてのPDFページを1つのSVGファイルに変換](#すべてのpdfページを1つのsvgファイルに変換)**

この記事の変換方法では、無料のAPIであるFree Spire.PDF for Javaを使用する必要があります。[Free Spire.PDF for Javaの公式ウェブサイト](https://www.e-iceblue.com/Introduce/free-pdf-for-java.ht

元記事を表示

CheerpJ 3.0rc1を発表:テストと改善にご協力ください!

![rectangle_large_type_2_4dd6199b1fa4b96b1d836a2a998a4bd1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3486144/44102ca2-b436-0c88-a172-a20f64193c4e.jpeg)
本日、最初のCheerpJ 3.0リリース候補、バージョン3.0rc1のリリースを発表できることを嬉しく思います。

過去何年もの間、私たちのチームは、Javaアプリケーション、アプレット、ライブラリをモダンブラウザ上で実行するためのソリューションであるCheerpJのために、全く新しいアーキテクチャの開発に精力的に取り組んできました。

# 主なハイライト
世界中の何百もの組織による長年のCheerpJ 2.xの実世界での利用を活用し、我々のブラウザベースのx86仮想マシンであるCheerpXの開発から学んだ多くの教訓を活用して、我々はCheerpJの全面的な書き直しを行いました。

* さようならAOT、こんにちはJITコンパイル: Che

元記事を表示

OTHERカテゴリの最新記事