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

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

[Docker][Java] Java プロセスのコンテナで jstat が採れない

docker コンテナで動かしている Java プロセスの jstat を採る話。

以下のように実行してみると。。

“`
$ docker exec -t –user 1000 {container-id} jstat -gc 1
“`

こんなエラーになりました。

“`
sun.jvmstat.monitor.MonitorException: 1 not found
at jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local.PerfDataBuffer.(PerfDataBuffer.java:84)
at jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local.LocalMonitoredVm.(LocalMonitoredVm.java:68)
at jdk.internal.jvmstat/sun.jvmstat.perfdata.moni

元記事を表示

例外の学習

https://qiita.com/ts7i/items/d7f6c1cd5a14e55943d4

## 理解が深まったところ

– 多段の呼び出し階層への対応

### 検査例外

>Exceptionクラス配下のRuntime Exception以外のクラスが対象。
Javaがコンパイル時に検査を行う例外なので、try-catchで例外ハンドリングを行わないといけない。
何故このような仕様になっているかというと、検査例外は基本的に正しいプログラムを書いていても避けられない例外だからです。
例えば、ファイルが壊れたりしているとIOExceptionが起きますが、どれだけ頑張ってプログラムを書いてもファイルが壊れていたら防ぎようがありません。
同様にDB障害などでSQLExceptionが発生するのもプログラムではどうしようもありません。
そういった例外たちを集めて、「お前らがハンドリングを忘れないようにtry-catchの記述を強制させてやるぜ~」ってJavaがドヤ顔しているのが検査例外だと思えば良いでしょう。

検査例外とは、呼び出し元に何らかの対処を強制する例外である。
対処し

元記事を表示

サーブレットJSPについて

## サーブレットJSPの基本を学ぶ。

サーブレットJSP、業務でがっつり使ているが、UI的な。動的な画面表示のようなことは全くイメージもついていないので、ここで触っておく。

>TomcatにはWebサーバー機能はありますが、ApacheのWebサーバーとしての性能(高速処理、安定性)と同等にはなりません。
>WebサーバーとしてならApacheを使うのが一般的です。
>そこでHTMLや画像などの静的なコンテンツは処理速度が高速なApacheに処理させ、Javaサーブレットで作成された動的コンテンツをTomcatに処理させます。

まずは、ApatcheとApatche Tomcatの違いについてだが、Apatcheは静的コンテンツなどの配信や、動的リクエストの振り分け?などに特化しており、Tomcatは。その動的リクエストをうまくさばくことができるものである。名前は似ているが、やっていることは別物であることは覚えたい。
TomcatにもApatcheの機能があるということで、覚えやすくなるのではと思う。
### 全体のイメージ図

![image.png](https://qi

元記事を表示

Java開発環境を構築

## Java実行環境を構築

### Javaをインストールする

まずはJavaをインストールする。職場で使用しているので、Amazon Corretto 11 をインストールする。
公式のドキュメントから、Windows_×64のJDK .msiをダウンロード。

https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/windows-7-install.html

※自動でJAVA_HOMEとPATHを通してくれているようだ。

もし、PATHが通っていなかったらPATHを通す。

https://www.javadrive.jp/start/install/index4.html#section3

https://qiita.com/sta/items/63e1048025d1830d12fd

インストールされているかを確認。

“`cmd
C:\Users\User1>java –version
openjdk 11.0.13 2021-10-19 LTS
OpenJDK Runtime En

元記事を表示

staticメソッドで非staticなDIオブジェクトを使いたい

# はじめに
staticメソッド内でmybatis用のmapper interfaceを@Autowiredして使いたかった時の話。
もちろんそのままだとstaticメソッドから非staticメソッドの参照だしそもそもinterfaceだしで使うことは出来ないので、回避策が必要。

# NGパターン
“`MyMapper.java
package com.my.mapper;

public interface PhoneInfoMapper {
int selectByHogeHuga(String hogeFuga);
}
“`
“`MyMapper.xml


【Java】正規表現で最後にマッチした文字列のみを置換する方法

正規表現で最初にマッチした文字列のみを置換する方法としてreplaceFirstメソッドが存在するが、最後にマッチした文字列のみを置換するreplaceLastメソッドはない。
探してみたところ、replaceFirstを応用して自作している人がいた為、使わせていただいた。

“`java:replace.java
public static void main(String[] args) throws Exception {

String str = “hoge 0123 PIYO 4567 hoge 890 FUGA”;

// 小文字アルファベットの1回以上の繰り返しを””abc””に置換
String result1 = replaceLast(str, “[a-z]+”, “abc”);

System.out.println( result1 ); // hoge 0123 PIYO 4567 abc 890 FUGA
}

public static String replaceLast(String str, String

元記事を表示

Stream/Optionalで例外をthrow出来ないからと処理を解体された話

# はじめに
上流のアーキテクチャをされている方が非検査例外から検査例外に変更したのを機に、投稿者の実装処理内のラムダ式を全部for文に変更して、動作チェックをこっちにぶん投げてきたので、小さなの抵抗と後学のためにラムダ式の検査例外を非検査化する方法を調べた際のメモです

# 前提
Javaのラムダ式にて検査例外(Exceptionを継承した例外)を処理した場合
“` java
private void func1() throws java.io.IOException {
java.util.List.of(1, 2, 3)
// 例外が実際に発生した場合の想定
.forEach(e -> {
throw new java.io.IOException();
});

java.util.Optional.ofNullable(“val”)
// 例外が実際に発生した場合の想定
.map(val -> {
throw new java.io.IOException();
});
}
“`
この場合だ

元記事を表示

コンピュータとオセロ対戦52 ~ネットワーククラス~

https://qiita.com/tt_and_tk/items/068f2afde6db637e189f

[前回](https://qiita.com/tt_and_tk/items/5249541e6bdf307c28ad)

# 今回の目標
ネットワーククラスを作成する。
# ここから本編
## 現在のディレクトリ構成

“`
MyNet2
├── Matrix.java
├── actFunc
│   └── 活性化関数クラス
├── layer
│   └── 層クラス
├── network
│   └── ネットワーククラス
└── tests
└── テストクラス
“`

## 修正点
全ての層で共通するデータ型を使用するため、ConvとMaxPoolingのforwardメソッドを変更しました。
また、二次元と四次元の相互変換のため、MatrixクラスにtoMatrix4dメソッドを、Matrix4dクラスにflattenメソッドをそれぞれ追加しました。

“`Conv.java
/**
* Doing forward propag

元記事を表示

Nablarch Webアプリケーションのデバッグ方法について

# はじめに
こんばんわ、きりです。
本記事は[Nablarchを使ってみよう](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17)のサブ記事として作成しております。

[Nablarchを使ったWebアプリケーションの作成](https://qiita.com/kirin1218/items/c537cb8a444ee59763cd)にて、NablarchのWebアプリケーションのテンプレートプロジェクトをダウンロードし、実行までを行いました。

今回は開発作業のお友達、デバッグの方法を整理します。
いくつか方法はあると思いますが、今回は
* waittコマンドを使ったデバッグ
* tomcatを利用したデバッグ

について整理します。

本記事以外のコンテンツは[こちら](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17#nablarch%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%

元記事を表示

Effective Java 第3版まとめ(項目4)

# 項目4.privateのコンストラクタでインスタンス化不可能を強制する

## 書かれている内容

* ユーティリティクラスは、インスタンス化されるようには設計されていない(インスタンスには意味がない)
* 明示的なコンストラクタがなければ、コンパイラはデフォルトコンストラクタを提供する
* ユーザにとってこのコンストラクタは、他のコンストラクタと区別がつかない
* 抽象クラスもうまくいかない。サブクラスを作成できるし、サブクラスをインスタンス化できる。継承するために設計されていると誤解される
* privateのコンストラクタでインスタンス化できないようになる
* privateのコンストラクタでAssertionErrorをthrowすることで、クラス内から誤って呼び出された場合の保険となる

元記事を表示

JUnit5(概要〜チュートリアル)

# はじめに
Junit5のユーザーガイドをベースにテストコードを書きました。
内容は、概要把握とチュートリアルレベルになります。

# 実行環境
OS:Mac
JUnit:JUnit5.8.2
Java:Amazon Corretto 8
Gradle:Gradle6.8
IDE:IntelliJ IDEA 2022.1 Community

# Junit5とは
現在リリースされている最新のJUnitです。
JUnit5は大きく分けて以下のサブプロジェクトから構成されています。

以下、ユーザーガイドより

## JUnit Platform
JVM上でテストフレームワークを起動するための基盤です。
このプラットフォーム上で動作するテストフレームワークを開発するためのTestEngine APIが定義されています。
加えて、コマンドラインからプラットフォームを起動するためのConsole Launcherや、
GradleとMaven用のビルドプラグイン、 JUnit 4ベースのテストランナーなどが提供されており、
あらゆるTestEngineを実行できるようになっています。

#

元記事を表示

Spring Bootを2.6にアップデートするとKarateテストが落ちる。その原因と対策

# 問題が置きた環境
– JDK 17
– Spring Boot 2.6.6
– Karate 1.0.0

# 現象
Spring Boot 2.4だったアプリを2.6にアップデートしました。

そうすると2.4では通っていたテストで次のような例外が発生しました。

“`bash
java.lang.NoSuchMethodError: ‘io.micrometer.core.instrument.TimeGauge$Builder io.micrometer.core.instrument.TimeGauge.builder(java.lang.String, java.util.function.Supplier, java.util.concurrent.TimeUnit)’

at org.springframework.boot.actuate.metrics.startup.StartupTimeMetricsListener.registerGauge(StartupTimeMetricsListener.java:119)
at org.springframe

元記事を表示

(Java)Value Objectの値がnull可の場合のString型変換のより良い対処法

こんにちは!株式会社OPTiMに所属しています川田剣士です。本記事ではOPTiMでアルバイトをしていてかなり悩んだ課題について共有しようかなと思います。テーマはValue Objectの値がnullの場合のString型変換についてです。では、よろしくお願いいたします。

# 目次
[背景](#背景)
[課題1.urlがnullの時にNullPointExceptionが生じる](#課題1urlがnullの時にnullpointexceptionが生じる)
・[対処法1.String.valueOf()を利用する](#対処法1stringvalueofを利用する)
・[対処法2.Objects.toString()を利用する](#対処法2objectstostringを利用する)
・[課題1の結論](#課題1の結論)
[課題2.null時にnullが挿入されない](#課題2null時にnullが挿入されない)
・[対処法1.文字列”null”が渡された場合、ExampleUrlのvalueにnullを渡すよう実装する](#対処法1文字列nullが渡された場合exampleurlのval

元記事を表示

【初心者】Java?JDK?JRE?JVM 違いを理解したい

# はじめに
僕は Javaと聞いて Oracle? 組み込み?脆弱性対応?などのキーワードが浮かびます。
JDK・JRE・JVM の区別もついてないですが、Java を触る必要があるため、これを機に理解したいと思います。

# Javaを第三者に一言で説明したい
– Javaとは、サン・マイクロシステムズ社が開発したプログラム言語

# ざっくりまとめると
![スライド1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474478/c9570e18-c73d-4dce-75d4-e29e5de88bd5.jpeg)

![スライド2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474478/5491e51a-226a-d9b6-9d4d-7777a21859ac.jpeg)

# 用語
– Java SE
– Java Platform, Standard Edition の略。Java で使用される API

元記事を表示

「Stringを==とequalsで比較する際の違いを教えてください」と面接官に言われたら

面接官「Stringを==とequalsで比較する際の違いを教えてください」

自分「== はインスタンスの同一性を比較する一方、equalsはObjectによって定義されたメソッドで、同値性の比較に使われます。」

自分「従ってStringを比較するとき、==では同じ文字列でも違うインスンスの場合にfalseが返って来てしまうことがあるため、通常はequalsを使用します。」

面接官「はい、完璧です。」

自分「より詳細に言うと、Stringを定数として使用する場合はJVMのLDC命令によって定数プールからインスタンスが確保されるため、これら定数プールの文字列を比較する場合は==でもtrueが返ってきます。」

自分「逆に、文字列をプログラムで動的に構築する場合は定数プールとは関係ない全く新しいStringインスタンスが構築されるため、==はfalseとなります。」

面接「なるほど。」

## String Constant Pool(文字列定数プールとは)

Javaで文字列リテラルを表現する場合、文字列は定数プールから確保される。これにより、同じ文字列が登場した場合にメモリ

元記事を表示

Effective Java 第3版まとめ(項目3)

# 項目3.privateのコンストラクタかenum型でシングルトン特性を強制する

## はじめに

* シングルトンは一度しかインスタンスが作成されないクラス
* シングルトンにすることでテストを困難にする

## 実装方法

### その1

コンストラクタをprivateにし、インスタンスへのアクセスを提供するためのpublic static finalなメンバーを公開する

* 長所
* クラスがシングルトンであることがAPIから明らか
* 単純である
* 短所
* リフレクションによりprivateコンストラクタを呼び出せてしまう
* シリアライズ可能にするには、Serializableを実装するだけでなく、インスタンスフィールドをtransientと宣言し、readResolveメソッドを提供しなければならない

### その2

コンストラクタをprivateにし、publicなstaticファクトリメソッドを公開する

* 長所
* APIを変更せずに振る舞いこを変えることができる
* ジェネリックのシングルトンファクト

元記事を表示

Rust初心者にとってEnumは難しい!JavaのEnumと何が違うの?

# ことのあらまし

Rust入門してもうすぐ2週間のみゆきです。

Rustの列挙型は集合論では直和集合、Tagged-Union と言われたり、列挙子に値を持てる点がJavaやC#といった他の言語の列挙型と違う点と解説されています。

なんとなく雰囲気が違うのは感じ取れるのですが、私の頭では理解が追い付いてないです。

特に、RustのEnumが値を持てる点で、「そういえばJavaのenumも高機能でどんな値でも(自作型でも配列でも)持つことができたはず!」ということを思い出しました。

では、両者は一体何が違うのか実際に書いて比較してみました。

※勢いで書いているので間違ったことを書いているかもしれません ><

# Rust と Java の Enum を比較

まず、確認の意味も含めて単純なenumでJavaとRustを比較してみます。

“`rust:Rust
enum Hoge {
V1,
V2,
}

// 使い方
let hoge: Hoge = Hoge::V1;
“`
“`java:Java
enum Hoge {
V1, //ordinal(

元記事を表示

AWS Cloud9でJavaの開発環境を構築する

# 背景・目的
– KDAを試すにあたり、[必要なJavaの環境](https://docs.aws.amazon.com/ja_jp/kinesisanalytics/latest/java/getting-started.html)を準備します。
– 以前、[AWS Clou9を試してみた](https://qiita.com/zumax/items/312d20594b7eecbd533d)で構築した環境を利用します。

# 実践
## Javaのバージョンを確認
– 現在のバージョンを確認します。
– すでに、Java11が入っています。
“`
$ java –version
openjdk 11.0.14.1 2022-02-08 LTS
OpenJDK Runtime Environment Corretto-11.0.14.10.1 (build 11.0.14.1+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.14.10.1 (build 11.0.14.1+10-LTS, mixed mode)
$
“`
##

元記事を表示

Effective Java 第3版まとめ(項目2)

# 項目2.多くのコンストラクタパラメータに直面したときにはビルダーを検討する

## 書かれている内容

* staticファクトリメソッドとコンストラクタは、多くのオプションパラメータに対しては、どちらもうまく対応できない
* テレスコーピング・コンストラクタ・パターンは、コードを書くのが困難になり、加えてそのコードを読むのはさらに困難になる
* JavaBeansパターンは生成過程の途中で不整合な状態にあるかもしれない
* JavaBeansパターンはクラスを不変にする可能性を排除してしまう
* ビルダーはテレスコーピング・コンストラクタ・パターンの安全性とJavaBeansパターンの可読性を組み合わせている

## 個人の見解

ビルダーを検討しないといけないようなオプションパラメータが多い状況は、オブジェクトの責務が大きすぎるように思う。
まずはオブジェクト指向エクササイズの「1つのクラスにつきインスタンス変数は2つまでにすること」を心がけた上で、選択肢の1つとしたい。

## オブジェクト指向エクササイズとは

### 9つのルール

1. 1つのメソッドにつきインデントは

元記事を表示

テンプレートメソッドとは

## 概要
テンプレートメソッドとはOOPの代表的なデザインパターンの一つで、

CSVインポートとXMLインポートなど、**大まかな流れは似てるけど細かいところが違う処理**を複数作成する必要があるときに、
– 一つのクラス内で各ステップをメソッド化し、同じクラス内の別のメソッドでそれらを順番に実行するようにする
– 上記のクラスの子クラスでメソッドの内容を適宜上書きすることでいろいろな仕様に対応できるようにする

というものです。特に親クラスの「それらを順番に実行する」メソッドが「テンプレートメソッド」と呼ばれます。

親クラスが「我々を呼ばないでください、我々が呼びます」と言っているという意味で「ハリウッド原則」と呼ばれることもあるようです。

これはデザインパターンを知らなくても似たようなことをやったことがある人が多いのではないかなと思います。

## 埋め込み方法
### 親クラス
– 必要なステップをそれぞれメソッドに格納する。
– テンプレートメソッド内で上記の処理を実行する。
– 絶対上書きしてほしいメソッドは抽象メソッドにする。
– 上書きしなくてもいいメソッドはデフ

元記事を表示

OTHERカテゴリの最新記事