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

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

初心者から始めるJava、式と演算子 2

#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
**間違えた**ものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

#環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#演算子
前回は、加算と連結に使う+、代入に使う=を扱った。Javaの演算子はたくさんあるが、今回は代表的なものを扱う。以下リスト。

**1.乗算(*),除算(/),剰余(%)**
**2.等価(==)と不等価(!=)**
**3.インクリメント(++)とデクリメント(–)、またその前置後置**

#乗算・除算・剰余
Javaにおいて(僕が知るに少なくともPythonも)、乗算の場合に×でなく*を使う。除算は÷でなく/、そして剰余(余りの数を出す)は%を使う。

除算と剰余において、0で割ることは許されていない(0除算)。コンパイルの際にはエラーとして出てこないが、実行の

元記事を表示

【Data Base】busy状態が頻発したケーススタディ

#事象
初めての新規開発案件で、自分の製造した機能でbusy状態のエラーログが頻発してしまった。

##原因
調査の結果、原因は他機能同士でデッドロックが発生してしまうことに起因していた。

##調査方法
悲観ロックをかける順序を洗い出した。
例)昇格機能:対象の社員を確認 → 所属する店長グループを確定 → 配属エリアの選定 → 配属店舗の選定
       t_staff → t_maneger_group → t_area → t_shop
  退職機能:所属店舗の確認 → 対象社員の上長を確認 → 対象社員の削除
       t_shop → t_manger_group → t_staff

(無理に例えると分かりにくい気もするけど、せっかく書いたし残します。)

##対策
テーブルをidなどで管理して、ロックする順序をプロジェクト全体で統一するのが一般的だよね~との事。

###最後に。
ある程度、デッドロックが原因であることは当たりがついていたが、それを起こしている機能がなかなか見つからずに困り果てていた。
やむを得ず先輩に助力を求めたところ、あっさりと原因の機能を見つ

元記事を表示

AWS Lambda で Javaを使う ーEclipse準備編

##やりたいこと
AWS Lambdaで実行するJavaを実装する

##目次
・Eclipse準備編(今回)
・登録実行編(次回以降)
・実装編 – EC2を定時に止める/立ち上げる
・実装編 – CloudWatchの引数を確認する

## Eclipse準備編
まずは、開発環境を整える。
AWS Toolkit for Eclipseというのが準備されているので、それを利用する。
https://docs.aws.amazon.com/ja_jp/toolkit-for-eclipse/v1/user-guide/setup-install.html

↑に従うと
Eclipse→[Help] →[Install New Software] からインストールできるはずなのだけど、
ネットワークの問題なのかなんなのかうんともすんとも言わなかった。

ので、↓の「Drag and Drop Install」からインストールした。
https://marketplace.eclipse.org/marketplace-client-intro?mpc_install=907

とりあ

元記事を表示

モンティ・ホール問題の検証

# はじめに
モンティ・ホール問題とは――――[Wikipedia](https://ja.wikipedia.org/wiki/モンティ・ホール問題)によれば
> プレーヤーの前に閉じた3つのドアがあって、1つのドアの後ろには景品の新車が、2つのドアの後ろには、はずれを意味するヤギがいる。プレーヤーは新車のドアを当てると新車がもらえる。プレーヤーが1つのドアを選択した後、司会のモンティが残りのドアのうちヤギがいるドアを開けてヤギを見せる。
ここでプレーヤーは、最初に選んだドアを、残っている開けられていないドアに変更してもよいと言われる。
ここでプレーヤーはドアを変更すべきだろうか?

という問題だそうです。(※但し、モンティは外れの場所を知っていて、必ずヤギのいる場所を開ける。)
一見ドアを変えても変えなくても確率は変わらないように見えますが、実は**変えたほうがプレイヤーに有利**なのだそうです。今回はこの実験を大量に試行して結果を比較したいと思います。
言語はいつも安心のJava ~~(自分が好きなだけ)~~ を使用します。
# 要件
– ドアの数をNUMBER_DOORSとし

元記事を表示

初心者から始めるJava、式と演算子 1

追記:2020/3/4 参考書籍を追記
#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
**間違えた**ものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

#環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#式とは
小さいころから四則演算を行い、式を読むことには慣れていると思うが、同じ電子演算機である電卓とプログラムとでは違う部分もあるので、注意が必要。

Javaにおいて「式」は以下の二つで構成される。

1、**演算の仕方【演算子】(Operator)**
ex) +(足す)、-(引く)、*(掛ける)、/(割る) etc…

2、**演算の対象【オペランド】(Operand)**
ex) 1 + 2 における1と2

#式の実践
プログラムでは同じ+を、「文字列の連結」と「演算」の両方に使うことができる。文字列は””で囲われた中身

元記事を表示

Micronaut(Java)でBean Validationを追加する

# Micronautで自作のBean Validationを使いたい
業務で自作のバリデーターを作る必要が出てきて、新しいフレームワークなので全然資料がない && Java初心者 で結構苦労しました。

結果的には期待する動作をするものが出来たのでメモします。

# 経緯
現在のタスクで、入力バリデーションとしてよくあるこのような実装が必要になりました。

1. リクエストの特定のパラメータが、指定の正規表現にマッチしてるか確認
2. していなければ特定のエラーメッセージを持ったエラーレスポンスを返す

素?のMicronautなら `Pattern(regexp = “パターン”, message=”メッセージ”)` で実現できると思いますが、現在のプロジェクトではアノテーション別にハンドラで処理をしており、この実装だと不都合でした。

# 実装

**2020/03/04追記 Validatorクラスにに `@Singleton` を付ける必要があり、加筆しました。**

### アノテーション + バリデーター
EmployeeNumber フィールドに対して、以下のいずれか

元記事を表示

Java AtomicLongを使ったシングルスレッド保証(kafka参考)

KafkaConsumer の `poll()`辺りののソースコード見ていたら、AtomicLongを使ってシングルスレッド保証をしていた。
考え方が綺麗だったので、自分でも試したやつを乗っけておく。

(参考:[KafkaConsumerのpoll()部分](https://github.com/apache/kafka/blob/2.3/clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java))

“`block-release.java

import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicInteger;

public class Main {

private static final Long NO_CURRENT_THREAD = -1L;
private static final AtomicLong curr

元記事を表示

Azure Cosmos DB Java SDK で ドキュメントがすでにあれば更新、存在しなければ新規作成

“`java

package com.microsoft.azure.documentdb.sample;

import java.util.Date;
import java.util.Iterator;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.microsoft.azure.documentdb.ConnectionMode;
import com.microsoft.azure.documentdb.ConnectionPolicy;
import com.microsoft.azure.documentdb.ConsistencyLevel;
import com.microsoft.azure.documentdb.Document;
import com.microsoft.azure.documentdb.DocumentClient;
import com.microsoft.azure.documentdb.FeedOptions;
import

元記事を表示

TeamCityビルドエージェントコンテナにJDKを追加する

## 目的

自分の環境にあったビルドエージェント環境のコンテナを用意できる。

## ビルドエージェント構成方針

ビルドエージェントの構成は2つの方針がある。

#### 1:リッチなビルドエージェント

ビルドエージェントは無料枠では2つまでなので、小さなプロジェクトユースでは(費用を払わない限り)1つのエージェントに複数のビルド環境をもたせたいだろう。
おそらく、個人ユースでもおおよそ同じと思う。

#### 2:最小限のビルドエージェント

ビルドエージェントを最小限にすることで、ビルド環境のセットアップは簡単に済ませることができるし、Dockerfileも小さくて済む。
反面、エージェントの管理を手動で行わなければならない。

## ベース検討

特に要件がない場合には、[通常のエージェントコンテナ](https://github.com/JetBrains/teamcity-docker-agent)を出発点として作業するのがいいだろう。.NETビルドやDockerデプロイ用の環境セットアップもなされているようだ。
一方、ハードなプロジェクトユースでコンテナを少しでも小さ

元記事を表示

MyBatis(Mapper XML)でオブジェクトをPostgreSQLにJSONとして格納する方法

# やりたいこと
Spring + Mybatis(Mapper XMLでSQL文を定義)なときに、ObjectをPostgreSQLにJSONB型として格納したい

# やり方
今回は2つ取り上げます。
## まず思いつく方法
Java側で一旦Stringにして、格納するSQL文の中でJSONBにキャストします。Object→Stringには`com.fasterxml.jackson.databind.ObjectMapper`を利用します。

“`java:SQL呼び出す側
Object data = hoge(); //格納したいデータ
ObjectMapper mapper = new ObjectMapper();
String objectJSON = mapper.writeValueAsString(data)
sqlClient.insert(objectJSON)
“`

“`xml:MapperXML

insert into hogetable (data) values (#{objectJSON}::

元記事を表示

Spring Boot + Spring Data JPA で宣言的トランザクションによるDB制御をするサンプルコード

## 概要

– Spring Boot + Spring Data JPA (Java Persistence API) を使用して @Transactional アノテーションによる宣言的トランザクションなデータベース制御をするサンプルコードを示す
– Spring Framework や Hibernate ORM のデバッグログ等を出力してトランザクション処理の流れ (JpaTransactionManager, EntityManager, コミット, ロールバック) を確認する

## 動作確認環境

– Java 11 (AdoptOpenJDK 11.0.6+10)
– Gradle 6.2.1
– Spring Boot 2.2.4
– Spring Data JPA 2.2.4
– Spring Web MVC 5.2.3
– Java Persistence API (Jakarta Persistence API 2.2.3)
– Hibernate ORM 5.4.10.Final
– H2 Database 1.4.200

## ソースコード

### ソ

元記事を表示

Spring MVC の正式名称は Spring Web MVC

正式名称: Spring Web MVC
通称: Spring MVC

どっちがどっちなのか忘れてしまうので公式資料を参照する。

Spring Framework 5.2.4 のドキュメントより。

[Web on Servlet Stack](https://docs.spring.io/spring/docs/5.2.4.RELEASE/spring-framework-reference/web.html)

> The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more commonly known as “Spring MVC”.

元記事を表示

初心者から始めるJava、変数と型

追記:2020/3/4 参考書籍を追記
#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては
**間違ったもの**が中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

#環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#変数とは
変数(Variable)とは、コンピュータが持つメモリを利用して、必要な値を記憶しておくための仕組み。**「格納するための箱」**として例えられる。

変数を扱うにあたっての必須ルール
**1、変数の[名前]を決めて**
**2、変数の[型]を指定してから**
**3、変数を[宣言]してから使う**

変数の命名に使うことのできる文字・数字の組み合わせを**識別子(Identifier)**と呼ぶ。ただし、Javaの規則により識別子になれない名前も存在する。

#1、識別子のルール
以下は間違った例と、その理由。

“`Ja

元記事を表示

外部ライブラリの入れ方

外部ライブラリを入れる方法がわからなかったので、備忘録的なメモとして残しておきます。

# 環境
 Windows7
 Adopt Open JDK1.8

# 方法
 まず使用したい外部ライブラリのjarファイルをダウンロードしてきてください。

 次にそのダウンロードしてきたファイルをAdopt Open JDK1.8のフォルダ内のjre¥lib¥extフォルダにダウンロードしたjarファイルを配置することで使えるようになります。

 import文が必要なら適宜ソースにimportして使ってください。

# 終わりに
 検索してもそのままズバリを書いている方法がなかなか出てこなかったので書きました。
 もし間違いなどがありましたら指摘していただければ幸いです。

元記事を表示

Retrieve the first day of week in current locale(今日は何曜日?)

Some places(country) start the week with Sunday, some with Monday, maybe some with others, IDK,
some this magic let java library find the right one for us.
現地の週の始まりの曜日を計算する(月曜だったり日曜だったり、他もあり)

“`
DayOfWeek firstDayOfWeek = WeekFields.of(locale).getFirstDayOfWeek();
LocalDate firstDay = today.with(TemporalAdjusters.previousOrSame(firstDayOfWeek));
“`

*only serve as memo so actual syntax may break

元記事を表示

【Gradle】jarファイル内にクラスファイルが存在しなかった話

## 事象
下記のようなbuild.gradleファイルを用いてビルドを行った際に、jarファイルが生成されるが、その中身にクラスファイルが存在していませんでした。

“`gradle:build.gradle
apply plugin: ‘java’

group = ‘com.test.foo’
version = ‘1.0.0’

sourceCompatibility = ‘1.8’
targetCompatibility = ‘1.8’

compileJava {
options.encoding = ‘UTF-8’
}

repositories {
mavenCentral()
}

dependencies {
implementation(‘org.slf4j:slf4j-api:1.7.21’)

testCompile ‘junit:junit:4.12’
testCompile ‘org.hamcrest:hamcrest-library:1.3’
}
“`

## 原因と解決策
今回の事象の原因は、javaファ

元記事を表示

bitFlyer Lightning エラーコード集

bitFlyer Lightning エラーコード集

bitFlyer LightningのAPIを叩いていて発生したエラーコードとその対応策をまとめる

1. {“status”:-100,”error_message”:”Invalid product”,”data”:null}

  【原因】リクエストヘッダにコンテンツタイプの指定なし

  privateAPIを利用する際、リクエストボディにJSON形式の値を詰めると思うが、その値がどのような形式かを明示的に指定してやる必要がある

“`
connection = (HttpURLConnection) url.openConnection();
(中略)
connection.setRequestProperty(“Content-Type”, “application/json; charset=utf-8”);
“`

元記事を表示

BeamのDoFn/SimpleFunction/SerializableFunction

DoFn/SimpleFunction/SerializableFunctionは、Beamの抽象クラス/インターフェイスです。
機能が似ており、時々忘れるのでメモです。

# [DoFn](https://beam.apache.org/releases/javadoc/2.15.0/org/apache/beam/sdk/transforms/DoFn.html)
## 説明
ParDo.ofの引数に指定してTransformを定義するためのクラスです。
アノテーションを設定し制御することが出来ます。

* ProcessElement
* 入力から出力の変換処理(任意の数の出力)。
* StartBundle/FinishBundle
* [bundle](https://beam.apache.org/documentation/runtime/model/)単位の処理
* Setup/Teardown

DoFnが満たすべき性質などについて、ParDoの[ドキュメント](https://beam.apache.org/releases/javadoc/2.15.0/or

元記事を表示

[Ubuntu]Nukkitのサーバーを立てる

NukkitをUbuntuで立てます
半分前記事のコピーです

##サーバー環境
・ConoHa VPS
・OS Ubuntu 18.04
・メモリ 512MB
・ストレージ SSD 20GB
・CPU 1core

##Javaインストール
Nukkitの動作にはJavaが必要です
今回は例として`openjdk-11-jre`をインストールします

“`
$ sudo apt-get install openjdk-11-jre
“`

##ポート開放
今回は例として19132ポート。
コマンドで打つべきなのは`#`とか`$`が先頭についてる奴だけです
つまり下で`Rules updated`って書いてあるのは打たなくていいんですわよ

“`
$ ufw allow 19132/udp
Rules updated
“`
##ユーザー作成
今回は例として`nukkit`という名前のユーザーを作ります

“`
$ adduser nukkit
Adding user `nukkit’ …
Adding new group `nukkit’ (1004) …
Addin

元記事を表示

【2020年度版】Struts2の入門系記事まとめ

# はじめに
業務系プロジェクトでは未だに現役で動いていることもあるStruts2さん。
2020年のこのご時世にまさか自分が触ることになろうとは…。

まったく触ったことがないのでHelloWorldをやってみた。
割と最近まとめてくれている優しい方がいたので触る分には困らなかった。
参考になった記事を紹介する。

## 自分のスペック
* Java経験が4年くらい
* Webシステム開発は1年くらい
(SpringBootは分かる。新人の頃にSpringMVCも使っていたがよくわからない)
* ぶっちゃけサーブレットとJSPはあんまり分からない

APIの開発はできるけど、テンプレートを使うやり方がよく分かってない。

## 環境情報
* Windos10
* Eclipse : 2019-12(Pleiades All in One)
* XAMPP : XAMPP for Windows 7.3.11
* Java : 1.8.0_221
* Struts : 2.5.22(最新)

## 参考記事集
* [【超初心者向け】Struts2超入門 – 2018年版 – Qii

元記事を表示

OTHERカテゴリの最新記事