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

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

時々Thread.dumpStackデバッグ

# TL;DR

Javaでデバッグの方法はいろいろあるけど、`Thread#dumpStack`を使う(スタックトレースを表示する)、みたいなことも知っておくと便利ですよ、ということで。

# デバッグ方法?

Javaアプリケーションのデバッグって、どんな感じでやっているでしょうか?

– `System.out.println`でしょ
– 各種ログライブラリで、ふつうにログ埋め込みますよ
– IDEのデバッガー使ってます

まあ、いろいろあるんじゃないかと思います。

デバッガーも使うけど、めんどうな時は`System.out.println`してる、みたいなこともあるでしょう。

# スタックトレースを使う

確認したい内容によっては、スタックトレースを表示すると楽に情報が見れることがあります。

たとえば、

– ある処理の呼び出しを、どういう経路で、誰が行っているか知りたい
– 共通的な処理を入れ込んだ時に、ちゃんと呼び出しが行われているか知りたい

などなど。

前者は、「これ、誰が呼び出してるんだろう?」とか「なんでこの処理が呼び出されたんだろう?」ということを確認

元記事を表示

1から考えて作ってみた指スマゲーム

#目次
1. はじめに
2. 指スマとは
3. ルール説明
4. 環境
5. コード
6. まとめ
7. 参考文献

#はじめに
 どうもプログラミング学習初心者のものです。
自分は今Java言語を使ってプログラミング学習をしているのですが、**何か自分でプログラムを作ってみたい**と思い立ち、かといって大それたものは作れないので何か遊び的なものをプログラム上で動かしてみようと思い、ふと浮かんだ**「指スマ」**にしようとしました。

#指スマとは
 指スマを知らない人に向けて説明してと言われても自分で簡単に説明ができないので、[weblio](https://www.weblio.jp/content/指スマ”weblio”)サイトで引用した説明を下記に載せておきました。
「数人で行われるゲームの一つで、参加者が自身の手のひらを向かい合わせにして握りこんだ状態から、掛け声に合わせて一斉に親指を立てた数を「親」が当てるというもののこと。「親」の予想した数は掛け声と共に言われる。フジテレビの番組SMAP×SMAPで指スマと呼ばれたことから定着した名前であ

元記事を表示

念のためもう一度トルコ語(等)で起こる問題について整理する

Qiita Advent Calendar 2020の[Java Advent Calendar](https://qiita.com/advent-calendar/2020/java)の12月7日のエントリです。

トルコ語問題については、ご存知の方はご存知だと思いますが、聞いたことがない人にはなかなか理解できない問題なので2020年の今、もう一回おさらいしておくのもいいかと思い書いています。(ほかにネタがなかった、とも言う。)
# トルコ語の何が特殊なのか
トルコ語には、dotted-iとdotless-iの二つのアルファベットがあります。

https://en.wikipedia.org/wiki/Dotted_and_dotless_I

通常私たちは「i」の大文字が「I」であり、「I」の小文字が「i」であると理解しています。しかし、トルコ語ロケール(とアゼルバイジャン語ロケール)では「I」はドットなしIであるとみなされ、その小文字は「ı」になります。逆に「i」の大文字はドットありの「İ」なのです。

このため、以下のようなことが起こります。

元記事を表示

【ダレトク】Java 版 Minecraft のコマンドの境地 NBT を頼りに、ついでに IT 用語に触れる記事

# はじめに
この記事は IT 用語に触れる記事です。マイクラ好きな人が多いみたいなので、マイクラを頼りに IT の勉強でもしてみませんか?
楽しいマイクラの NBT とは何なのかを考えながらコマンドへの恐怖心を無くし、そのついでに IT 用語を少しかじって成長して行く。そんな感じの無駄話がツマッタ記事を載せておきます。
(マイクラのコマンドを求めてる方は、この記事では紹介していないので、いつか書くかもしれない別の記事をお待ちください。)

この記事の中では、以下の IT 用語の一端に触れることができます。

– JSON
– API

この記事は10分程度で読めます。

#1. NBT とは
入り口はマイクラからにして、まずは NBT について紹介します。NBT は Named Binary Tag の略で、極論を言ってしまうとユニクロへ行ったときに新品の靴下に付いてる “タグ” と同じです。靴下のサイズとか値段とかメーカーとか色々な「情報」がタグに書かれています。それです。
マイクラで NBT という単語を使うタイミングは2種類くらいあります。1つはコマンドで「データタグ」を入力す

元記事を表示

Java・SpringBoot】宣言的トランザクション処理(SpringBootアプリケーション実践編20)

ホーム画面からユーザー一覧画面に遷移し、ユーザーの詳細を表示するアプリケーションを作成して、Spring JDBCの使い方について学びます⭐️
今回はトランザクションの基本的な処理である**宣言的トランザクション**を学びます^^
構成は前回/これまでの記事を参考にしてください

⭐️前回の記事

[【Java・SpringBoot】NamedParameterJdbcTemplateでCRUD操作(SpringBootアプリケーション実践編19)](https://qiita.com/suema0331/items/d7ccfd5aa2c983edbeab)

#Springでのトランザクション
* トランザクションとは、**関連する複数の処理を大きな1つの処理として扱う**こと
* →関連した処理が正常に完了しない場合、すべての**変更が取り消され、データの不整合を防ぐ**ことができる!
* **宣言的トランザクション**(実践ではこれを使う)
* あるメソッドを呼び出したときにトランザクション処理する
* **@Transactionalアノテーション*

元記事を表示

Quarkusについて調べてみたらハマった話

今年も参加してみました。
滑り込みアウトですが、[ALH Advent Calendar 2020]()の6日目です。

前日は[「なんかDB遅いな。調べておいて~」って振られた時に見ること](https://qiita.com/wol/items/2555f9dd359198c9ca69)-wolさんでした。

# Quarkusとは何ぞや
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297163/78ad5c3b-debe-f3c1-4c6c-725dae428cfd.png)

## きっかけ
普段、マイクロサービスやコンテナ周りの技術習得を目指し勉強しているのですが、Kubernetes向け軽量コンテナを実現するスタックとしてRedHatが何か作っているらしいぞ、という情報を耳にしたため調べてみました。

## Quarkus
[Quarkus – SUPERSONIC SUBATOMIC JAVA](https://quarkus.io/)
名前からしてそそられますね。

元記事を表示

「Factoryクラスでドメインオブジェクトを生成する」という規約をArchUnitでテストする

[「Factoryメソッドでドメインオブジェクトを生成する」という規約をArchUnitでテストする](https://qiita.com/logy0704/items/9985402e1e8bb8bcd326)の続き。

「ドメインオブジェクトの生成を責務とするFactoryクラスが存在するかどうか」テストしてみる。

## テスト対象のイメージ

“`java

public class Hoge {
Hoge() {}
}

public class HogeFactory {
public Hoge create() {
return new Hoge();
}
}

“`
## テストコード

“`java

@AnalyzeClasses(packages = “com.example”)
public class DomainObjectTest {

@ArchTest
static ArchRule domain_object_has_no_public_constructors =
c

元記事を表示

jarファイル内の一部を差し替える方法

# はじめに
jarファイル内の一部を、再ビルドすること無く差し替えたい場合の解決方法を記載します。

# 環境
OS:macOS Catalina 10.15.6
jar:14.0.2

# 手順
1. jarファイルを解凍する。
* `jar xvf hoge.jar`
* x:解凍
* v:冗長に解凍結果を表示する。
* f:ファイルの指定
2. 古いjarファイルを削除する。
* `rm -rf app.jar`
3. ファイルを差し替える。
* macOSの場合は、DS_Storeも不要なので削除する。
* `find . -name “.DS_Store” | xargs rm`
4. 再アーカイブする。
* `jar cmf0 META-INF/MANIFEST.MF ../app.jar *`
* c:アーカイブの作成
* m:マニフェストの指定
* 0:圧縮なし

# 参考
* https://stackoverflow.com/questions/6629361/how-could-i-repack-a-j

元記事を表示

Servlet + JasperReports で動的に PDF を作成して Web サイトに表示してみるメモ

先日、[Servlet + Apache FOP ネタ](https://qiita.com/yamachan360/items/c028911b3eab49d0a281) とか [その続編](https://qiita.com/yamachan360/items/c985e7ad89d471db64df) とか投稿したのですが、知り合いから「[Jasper](https://www.jaspersoft.com/) 良さげだよ」との情報をいただきまして。ググったら情報多い!主流はコッチだったか… と。

既に日本語の情報は十分にある気もするので、備忘録として、簡単な実施メモにまとめてみました。

# JasperReports 概要

まず Jasper 系の PDF (帳票) 生成に関して、以下が理解の助けになりました。

* [JasperReportsとiReportで帳票の常識を理解しよう (1/4)](https://www.atmarkit.co.jp/ait/articles/1012/01/news143.html)
* [JavaでPDFのテンプレートを作成し、帳票

元記事を表示

Java SE8 Silverを受験するなら知っておくべきこと

#はじめに
 Java SE8 Silverの資格を受験してきました。
 試験を振り返って、これから受験する・受験を考えている方のために自分が書けることがあるのではないかと思い、筆を執った次第です。

#受験者のバックグラウンド
 私は先月からJavaの研修を受けているプログラミング初学者です。
 資格の取得をひとつの区切りとして、DBの学習に移る予定です。

#Java SE8 Silver 試験とは
 この記事はJava Silver SE8を受験しようという方向けに書いていますので、資格そのものの説明はOracleのJavaSE8認定資格公式ページより概要を抜粋するに留めます。

> Oracle Certified Java Programmer, Silver SE 8 認定資格は、Javaアプリケーション開発に必要とされる基本的なプログラミング知識を有し、上級者の指導のもとで開発作業を行うことができる開発初心者向け資格です。日常的なプログラミング・スキルだけでなく、さまざまなプロジェクトで発生する状況への対応能力も評価することを目的としています。
出展:[Java SE 8

元記事を表示

【Java】文字列の一部を抜き出す

#プログラミング勉強日記
2020年12月6日
文字列の一部を抜き出せるsubstringメソッドについて学んだので使い方をまとめる。

#substringメソッドとは
 substringメソッドは文字列の一部を取得するためのメソッドである。文字列のbegin+1~end文字目を抜き出すことを抜き出すことができる。引数endを省略するともでき、省略した場合はbegin+1文字目から最後の文字列の末尾まで抜き出す。新しい文字列を返している。

“`java
public String substring(int begin [,int end])
// begin:開始位置
// end:終了位置
“`

#サンプルコード

“`java
public class Main {
public static void main(String[] args) {
String str = “Good Morning Everyone.”; // String型の変数strに文字を代入
System.out.println(str.substring(5

元記事を表示

SIM Toolkitを使ったSIMアプレットを触ってみる

本記事は[NTTコミュニケーションズ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/nttcom) 6日目の記事です。
昨日は@khrdさんの[KindでVirtualClusterを試そう](https://qiita.com/khrd/items/f1fb4360ebe4aabe72ca)でした。

## はじめに
フルMVNOを提供している事業者の説明の中には「SIMアプレットを活用して機能を拡張する」というような文言が書いてあります。
本記事ではこのSIMアプレットに着目し、概要とSIMアプレット開発について見ていきます。

## SIM Toolkitとは
SIM ToolkitはSIMカード上で動作するアプリケーション(アプレット)に対して端末やネットワークと対話するための仕組みを提供しています。

対話とは具体的に言うと、

– SIMが持つ情報を端末に表示する
– ユーザーがSIMに情報を入力する
– SIMがネットワーク経由でSMSを送受信する

などが挙げられます。

このSIM Toolk

元記事を表示

【Java・SpringBoot】NamedParameterJdbcTemplateでCRUD操作(SpringBootアプリケーション実践編19)

ホーム画面からユーザー一覧画面に遷移し、ユーザーの詳細を表示するアプリケーションを作成して、Spring JDBCの使い方について学びます⭐️
今回はNamedParameterJdbcTemplateでの基本的なCRUD操作を学びます^^
構成は前回/これまでの記事を参考にしてください

⭐️前回の記事
[【Java・SpringBoot】RowCallbackHandlerでコールバック / CSV出力機能(SpringBootアプリケーション実践編18)](https://qiita.com/suema0331/items/e3ca75dff8e9118772bc)

#NamedParameterJdbcTemplate
* **JdbcTemplate**では、`PreparedStatment`を使う際に、メソッドの引数の順番に注意を払う必要があったが、**NamedParameterJdbcTemplate**では不要。

#リポジトリークラスを追加
* リポジトリークラスでは、UserDaoインターフェースをimplements

###NamedJdbcTemplat

元記事を表示

VSCode拡張 Tomcat for Java でDocker上のTomcat を登録できない時の対処法

## これは何
vscodeでtomcatの開発環境を構築する際,**Tomcat for Java**にDocker上のtomcatを登録できずハマったときのメモ.

## 環境
– Windows10pro
– Docker Engine – Community Version: 19.03.13
– WSL2
– 使用イメージ tomcat:9.0.40-jdk11-openjdk-buster
– Visual Studio Code 1.51.1
– Tomcat for Java v0.11.3
– Remote Development v0.20.0

## 現象
Tomcat: Add Tomcat serverでtomcatのインストールされているディレクトリである**/usr/local/tomcat**を指定するも,うんともすんとも言わない.permissionの問題だと思い chmod で権限の変更を試みるものの,改善しない.

## 原因と暫定対処
現時点では不明
私の環境では**devcontainer.json**に以下

元記事を表示

人事システム「COMPANY」のバッチ処理の裏(側) の話 – 番外編

せっかく [人事システム「COMPANY」のバッチ処理の裏(側) の話](https://qiita.com/e99h2121/items/d9a83a6e47a53dcfbfbd) を書いたのでこいつが如何なるやつかをもう少し書いておきたくなりました。

[Develop fun!を体現する Works Human Intelligence Advent Calendar 2020](https://qiita.com/advent-calendar/2020/whi)
[Develop fun!を体現する Works Human Intelligence #2 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/whi-2)
Works Human Intelligence アドベントカレンダー 12/5 の記事の補足です。

## キューはどこからやってくるのでしょう

[人事システム「COMPANY」のバッチ処理の裏(側) の話](https://qiita.com/e99h2121/items/d9a83a

元記事を表示

英語のテックジョークで使えそうなワード

#良さげなワード
arrays(配列)-> a raise(昇給)
bugs(バグ) -> bugs(虫)
dark(IDEなどのダークモード) -> dark(暗闇)
table(DB table) -> table(机)
server(サーバ) -> server(レストラン店員)
cache(キャッシュ) -> cash(現金)
Java(プログラミング言語) -> java(コーヒー)

#今日の名言
I hope my death makes more cents than my life.(私はこの人生よりも硬貨な死を望む)
※ make cents(小金を稼ぐ)とmake sense(意味をなす)をかけている

-アーサー(映画ジョーカーの主人公)

元記事を表示

【Spring Tool Suite 4】スペースとかタブを可視化する

#初めに
以下のコードをご覧ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/904115/f46d7db7-1315-d49e-19bf-d19736b45424.png)

コンパイルすると、、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/904115/3dc73f9f-9d8d-1340-84ca-a2034cb71006.png)
ギャ
全角スペースがありました、、、、
しかも、エラーの^位置がずれている、、、、、、

前回の記事[【Java】Spring Tool Suite(STS) インストールからHello World出力まで](https://qiita.com/eikichichichi/items/00b1dde73dba42cb0fa2)
で導入したSTSでは一応全角スペースがあることを教えてくれます(優しい!)。
![image.png](https

元記事を表示

「Factoryメソッドでドメインオブジェクトを生成する」という規約をArchUnitでテストする

## 概要

ドメインオブジェクト自体が複雑になってくると、その生成ロジックも同じく複雑になりやすい。

複雑化したドメインオブジェクトの生成ロジックをクライアント側にもたせると、ドメインが流出してしまう懸念がある。

上記の課題を解決するには、以下のような解決策が考えられる。

* ドメインオブジェクト自身にFactoryメソッドをもたせる
* ドメインオブジェクトの生成を責務とするFactoryクラスを用意する

今回は「ドメインオブジェクト自身にFactoryメソッドをもたせる」ことをArchUnitを使用して機械的にチェックしてみる。

## 実行環境
“`
// build.gradle

dependencies {
testImplementation ‘com.tngtech.archunit:archunit-junit5:0.14.1’
}

test {
useJUnitPlatform()
}
“`

## テスト対象のイメージ

“`java
// Hoge.java

public class Hoge {

public Ho

元記事を表示

Spring Boot / Java を約 1 年間しっかり学んでみて

この記事は[ぷりぷりあぷりけーしょんず Advent Calendar 2020](https://qiita.com/advent-calendar/2020/ppap)の6日目の記事です。

## 背景
研修時代でも Spring Boot や Java は触ってきましたが、業務でしっかり触ったことはなく、業務を通して学んだことや参考書・勉強会で学んだことを本記事でアウトプットしていこうと思います。
自分のローカル環境における Spring Boot / Java のバージョンは以下となります。

* Spring Boot … 2.3.1
* Java … 14

そのバージョンならではの技術にも触れていこうと思っています。

## Spring Boot
### v2.3
個人開発でもよく使用していた Spring Boot フレームワークですが、今年の 2 月に 2.3 がリリースされたことをうけ、[JJUG](https://www.java-users.jp/page/about/) でオンライン勉強会が開かれました。
その際の勉強会で魅力的な機能が豊富にあり、個

元記事を表示

JavaのエンジニアがPHPで開発するときに知ってるといいこと

[Phoneappli Advent Calender 2020](https://qiita.com/advent-calendar/2020/pa_engineers) の6日目
昨日の@teino_ponytailさんの[「HTTP/3ってなに?」](https://qiita.com/teino_ponytail/items/6db84334c23ae9f2549f)を見て、

「あ、Advent Calendarってそういう感じでやるんだ」
と初めて知った、ITリテラシーの低い人です。

仕事でウェブ系開発やるようになって、PHPもやらされるようになりました。
PHPってwebの情報多いし、コピペで簡単に動くものが作れるし、適度に枯れた、
素晴らしい言語だと思います。

「でも、コピペでお金もらうのも仕事としてどうかな」

と思ったりして、言語仕様を調べたこともありました。
その時にJavaエンジニア視点で、PHPのおかしなところとか、
知らんかったことがけっこうあったので、そういうところをまとめました。

まとめたのが2018年なんで、今のPHP7には対応してないかもしれ

元記事を表示

OTHERカテゴリの最新記事