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

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

Java Gold SE8 に合格したお話

###はじめに
***
やっとこさ「Oracle Certified Java Programmer, Gold SE 8」を取得できました。
結果としては正答率87%でした。(65%以上で合格) 受ける前不安でしたが案外やれましたね…。

Javaの資格取るメリットとか、実際の試験に関する所感など書いていきます。

###Java Gold SE8 ってなんぞや?
***
Oracleが認定するJavaプログラマの資格です。Bronze、Silver、Goldと3つあり
難易度は[Bronze < Silver < Gold] となっています。
受験料は税込みで3万ペリカくらいします。 これじゃ地上に出られない!!
あとGoldには取得条件があり、事前にSilverの資格を取得していることが必要条件となります。

ちなみにSE8っていうのはJavaのバージョンのことを指しています。

###Goldをの資格を取得する(学習する)メリット
***
Javaのクラスやメソッドの具体的な使い方等を網羅している感じですね。
あと、「Stream API」<

EclipseでSpring pom.xmlでMaven構成問題

##開発環境
– Windows 10
– Eclipse Version: Oxygen.3a Release (4.7.3a)

##事象
>STSで新規作成したばかりのSpring Bootプロジェクトで、pom.xmlの1行目がエラーになる。
>![Maven構成問題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431046/1e745991-bfdf-a9c1-a355-08fdf5a17955.png)
>Eclipseは「pleiades-2019-03-java-win-64bit-jre_20190508」を使用。

>##原因
>maven-jar-pluginの現時点での最新版3.1.2のバグ?

>##対処
>[npmrepository](https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin)で確認すると3.1.2が最新。
>![Mavenバージョン管理.png](https:

lombokでデフォルトコンストラクタが無くてNoSuchMethodException

凡ミスの記録。

lombokを使用して以下のコードを実行したところ、実行時エラーになった。

“`java
@Data
@AllArgsConstructor
public class Person {

“`

“`java
Caused by: java.lang.InstantiationException: kagamihoge.springbatchsample.Person
at java.base/java.lang.Class.newInstance(Class.java:571) ~[na:na]
at org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper.getBean(BeanWrapperFieldSetMapper.java:248) ~[spring-batch-infrastructure-4.2.1.RELEASE.jar:4.2.1.RELEASE]
… 53 common frames omitted
Caused by: java.la

Spring Boot 2 Filter内でSessionScopeBeanをDIする

# 前置き
最近Spring BootでWeb開発をしています。直接HttpSessionを利用する方法ではなく、できるだけ@SessionScopeでセッションを管理したいと思っています。Filter内で@SeesionScope Beanを参照する方法を調査しました。

# 構成
| 名前 | バージョン |
| ————- | ——————————– |
| macOS | Catalina 10.15.4 |
| IntelliJ IDEA | 2019.3.4 (Community Edition) |
| Java | “11.0.2” 2019-01-15 |
| Spring Boot | 2.2.6 |
| Kotlin | 1.3.71

ずんどこプログラム

“`ruby:filename.rb
package zundokoProgram;

import java.util.Random;

public class Zundoco_random {
public static void main(String[] args) {
Random random = new Random();
String[] zun_doko = { “ずん “, “どこ ” };
String zundoko = new String();

while (!(zundoko.equals(“ずん ずん ずん ずん どこ “))) {
zundoko = “”;
for (int i = 0; i < 5; i++) { String s = zun_doko[random.nextInt(2)]; // 変数sにランダムで選ばれた配列sh[0,1]のどちらか1文字が入る zundoko = zundoko.concat(s); // 変数scに変数sをくっつける } S

Javaでsuperメソッドを呼び出す

##はじめに
簡単なことからコツコツとjavaのアウトプットをします。
javaシルバーに合格することを目標に勉強中。

##superとは
スーパークラスのインスタンスや変数を参照する際に使用する。

##superを用いての親クラスメソッドの呼び出し方
super.メソッド名

##書いてみる
“`Main.java

//スーパークラス
class hoge {
public void print() {
System.out.println(“hello from スーパークラス”);
}
}

//子クラス
class huga extends hoge {
public void print() {
System.out.println(“hello from 子クラス”);
}

public void executePrint() {
//子クラスのprint
print();

//スーパークラスのprint
super.print();
}
}

public class Main {
public static void

javaで複数の例外をまとめてcatchする

javaで、複数の例外についてcatchして同じようにログ出力して上に投げるよいう処理をよく見ますが、
冗長で共通化したいなと思っていたので調べてみたらどうやらできるみたいです。[参考](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/language/catch-multiple.html)

“`java
catch (IOException ex) {
logger.log(ex);
throw ex;
} catch (SQLException ex) {
logger.log(ex);
throw ex;
}
“`

`|`で区切ってあげると下記のような書き方で共通化できます。
少し注意なのが、java7以降でしか使えないようですので、昔のバージョンで開発してる方はご注意ください。

“`java
catch (IOException | SQLException ex) {
logger.log(ex);
throw ex;
}
“`

パッケージ分けされたJavaのコードをコマンドで実行する

調べてもなかなか出てこなかったのでメモ。

# 実行コマンド

“`
$ javac -d /path/to/build/dir/ /path/to/javafiles
$ java -cp /path/to/classfiles/ main.Main
“`
# 例

こんな階層だったとします。

“`
.
└── src
├── app
│   └── App.java
└── hoge
├── Hoge.java
└── fuga
└── Fuga.java
“`

## コンパイル

全部コンパイルします。-d で生成ファイルの出力先のディレクトリを指定します。

“`
$ javac -d build src/*/*.java src/*/*/*.java
“`

こうなります。

“`
.
├── build
│   ├── app
│   │   └── App.class
│   └── hoge
│   ├── Hoge.class
│   └── fuga

flywayのflyway.configFileプロパティが消えてた。

DBのマイグレーションにflywayを使用しています。

flywayのバージョンを変更して、いつものようにコマンドを実行すると、エラーが出るようになりました。
実行できていたはずのコマンドがエラーになり困っていましたが、一先ず解決したので共有します。

原因:バージョンが変わったことでflyway.configFileが使用できなくなった。

エラーが発生した時のバージョンは以下です。
・Apache Maven 3.6.0
・flyway-maven-plugin 6.0.8 (4.1.0から変更)

“`console:エラー例
$ mvn -Dflyway.configFile=src/main/resources/application-local.yml flyway:info
[INFO] Scanning for projects…
[INFO]
[INFO] ————–< jp.co.hoge.hoge.app:hoge-hoge-app >—————
[INFO] Building hoge-hoge-app 0.1.0

「The Language Support for Java server crashed 5 times in the last 3 minutes. The server will not be restarted.」エラーで振り回された話

「The Language Support for Java server crashed 5 times in the last 3 minutes. The server will not be restarted.」
このエラーに振り回されたので、備忘録として残そうと思います。

自分メモなので適当

#始まり
Docker使ってJavaの環境を整えたいな…

せや、この記事参考にやってみよう!

![スクリーンショット 2020-04-03 20.38.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293066/4b4a5fd0-5482-1c86-0201-f0109302667b.png)

はい???できないんですがそれは。

#調べたら出てきた事
わからんのでエラー内容コピペで検索
これが出てきた。
http://wiki.tk2kpdn.com/language-suppo

Azure WebAppsへのwarデプロイ(maven)

#目的
GitActionsがプレビュー版となったため、mavenビルドをgitに行ってもらい、WebAppsにデプロイする

## 1:アプリ準備
まずは、Maven + TomcatのJavaアプリケーションを作成する

mavenは以下のように記述した

“` 1.8
1.8
1.8
DeployTest
MavenJsptest


javax.servlet
java

Docker 上で入門する Apache Hadoop

# はじめに
はじめての並列分散処理のフレームワークとして Apache Beam を利用しているのですが、この辺りの学習をするにあたっては MapReduce などの従来からの用語や概念も頻繁に登場します。そのため、Apache Hadoop に入門してみました。今回は、環境をできるだけ楽に構築できるように Docker を利用しています。

![1600px-Hadoop_logo_new.svg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244338/c15942bc-5683-6db4-27b6-f41c298e5358.png)

# Hadoop 概要
Hadoop は、大容量のデータを処理するための**分散処理のフレームワーク**です。通常は **Linux** 上で動作させます。スケールアウトに優れているため、処理するデータ量が増えたとしても、**サーバーの台数を追加することで性能を向上させることができます。**

Hadoop は、主に次の2つのシステムで構成されます。

– **

Javaでファイルのハッシュ値を返却するサンプルプログラム

javaでファイルのハッシュ値を返却するサンプルプログラムです。

“`java:SampleMain.java
package test;

public class SampleMain {

public static void main(String[] args) {
System.out.println(SampleHash
.getfileHash(“glassfish-5.0.1.zip”, SampleHash.SHA_512));
}
}
“`

“`java:SampleHash.java
package test;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.DigestInputStream;
import java.security.Messag

Shortの比較でNullPointerExceptionになって知ったオートボクシング

# ラッパークラスで値を比較するときは`equals`を使う
Stringの比較でよく言われています。
比較で`==`を使うと
ラッパーなどの**参照型の場合は参照先**を比較、**プリミティブ型の場合は値**を比較します。

“`java
String hoge = “hoge”;
String fuga = “hogehoge”;
fuga = fuga.substring(4); // << "hoge"になる // 参照先を比較するので「false」になる boolean isEqual1 = hoge == fuga; // 値を比較するので「true」になる boolean isEqual2 = hoge.equals(fuga); System.out.print(isEqual2); ``` # Shortを比較するのに`==`を使っても「-128~127」の範囲は値を比較してくれる うっかりShort(shortのラッパー)を`==`で比較していたけど途中まで気が付かなかった、気が付いたのは値が200ぐらいになった時。へぇー知らなかった・・・とはいえ`equa

javaのclassファイルを逆コンパイルする方法

– 環境
– Windows10 64bit バージョン1903
– Eclipse Version: 2019-12 (4.14)

# Javaのデコンパイラーをインストールする
1. [JAD Decompiler Download](http://www.javadecompilers.com/jad)から`Jad 1.5.8g for Windows 9x-NT-2000 on Intel platform.zip`をダウンロードする
2. zipを解凍する
3. zipから出てきた`jad.exe`を`$JAVA_HOME/bin`に格納する
– $JAVA_HOMEに入れないでPATHを通してもOK

“`bash:jadでヘルプ的なものが出ればOK
$ jad
Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov (jad@kpdus.com).
Usage: jad [option(s)]
Options: -a – generate JVM instructi

createSelectSql

“`java:
package createSelectSql;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Properties;

/**
* 指定したスキーマのselect文を出力する。
*/
public class CreateSelectSql {

public s

Mavenのversionに日付とその日のビルド番号を自動的に付与する

Mavenプロジェクトのversionは、基本的に`pom.xml`に書いておきますが、~~基本的に手動でバージョンを上げなければなりません。~~

**追記2020/04/03**
releaseプラグインを使えば、x.y.zのzは自動的にインクリメントしてくれるそうです。

でも、日付やタイムスタンプ、ビルド番号を付与したいって言われたら?

`pom.xml`をshスクリプトとかで書き換える?マルチモジュールのとき、大変すぎない?
`mvn versions:set -DnewVersion=whatever`で毎回一斉に書き換える?
手間が増えるよね?結局ビルドにスクリプトが必要になっちゃう?

JenkinsとかCIツールだったらプラグインで出来るみたいだけど・・・

なお、ここでやりたいのは、Arfictの生成物であるファイル名をどうにかしたいのではなく、Artifactのバージョンそのものを付ける方法の話です。

# Goal

`mvn install`などで、モジュールの`version`に自動的に日付とビルド番号を付与する。
例)`0.0.1.20200401-2`

エラー:Gradle sync failed: Cause: invalid type code: 85 の対応[AndroidStudio]

## 概要
– 2~3ヶ月ぶりにAndroidStudioを起動したら、既存、新規を含めてすべてのプロジェクトが動かなくなった件。

– 結論としてはJDKをAndroidStudio内蔵の物に変更したらエラーがなくなって動くようになった。

– イベントログに表示されていたエラーコードは以下になります。
“`Gradle sync failed: Cause: invalid type code: 85“`

## 引用情報
下記のサイトの内容を参考に対応をした。
[Gradle Sync Failed in Android Studio 3.6 Cause invalid type code :85](https://translate.googleusercontent.com/translate_c?depth=1&hl=ja&prev=search&rurl=translate.google.com&sl=en&sp=nmt4&u=https://stackoverflow.com/questions/60435743/gradle-sync-failed-in-andr

mac上のqemuでARM-cpuな環境を作ってjavaを動かす【結果→失敗】

## 本内容は結果として構築失敗です。備忘録として残します。
最終的にopenJDK(JRE)は動かせませんでした。

↓以下書こうとしてた内容

ちょっとARMなCPUでしか動かないバイナリがあり、それをmac上で動かしたかった。
まぁmacはIntelなので当然そのままでは無理。

なので、ARMが載ったPCとかを検討したが新規にインストとかするのがちょっとめんどくさいので、エミュを探すと
QEMUというものがあった。(ちなみにラズパイも所持しているがめんど(

## qemu arm [raspbian]
ということで構築。
最初はカーネルとかダウンロードして起動させようとしたがめちゃ大変&失敗したので割愛。

なのでこちらを使用させていただいた。
https://github.com/karaage0703/raspbian_on_qemu
https://qiita.com/karaage0703/items/366eb17906a3341f1999
こちらも参考にさせていただきました。ありがとうございます。

sshも使いたかったので、
`sudo raspi-conf

イメージファイル重ね合わせ

“`java

public class ImageTest {

public static void main(String[] args) throws IOException {
BufferedImage bufferedImage1 = ImageIO.read(new File(“C:\\image_test\\tree.jpg”));
BufferedImage bufferedImage2 = ImageIO.read(new File(“C:\\image_test\\star2.png”));

Graphics graphics1 = null;

try {
graphics1 = bufferedImage1.getGraphics();
int x = 2;
int y = 2;
graphics1.drawImage(bufferedImage2, x, y, null);

} finally {
graphics1.dispose();
}

ImageIO.write(