- 1. Azure WebAppsへのwarデプロイ(maven)
- 2. Docker 上で入門する Apache Hadoop
- 3. Javaでファイルのハッシュ値を返却するサンプルプログラム
- 4. Shortの比較でNullPointerExceptionになって知ったオートボクシング
- 5. javaのclassファイルを逆コンパイルする方法
- 6. createSelectSql
- 7. Mavenのversionに日付とその日のビルド番号を自動的に付与する
- 8. エラー:Gradle sync failed: Cause: invalid type code: 85 の対応[AndroidStudio]
- 9. mac上のqemuでARM-cpuな環境を作ってjavaを動かす【結果→失敗】
- 10. イメージファイル重ね合わせ
- 11. WSL Ubuntu18.04にJavaをインストールする
- 12. 【Java】Optional覚書
- 13. Slack に Java のライブラリがどのようなリクエストを投げているかを調べるため Charles を使って HTTP トレースをとった話
- 14. Windows+VS CodeでSpring Boot環境を作る
- 15. spock のセットアップとかの実行順まとめ
- 16. 【Java】HTTPステータス 400 – Bad Requestの「リクエストヘッダが長すぎます」問題を解決
- 17. java・JDKのバージョン管理 ベストプラクティス
- 18. Spring-Securityの新規登録とログイン(JPA)
- 19. Win10上でJavaとmysqlのWebシステム構築手順
- 20. Kotlin Coroutineのサンプルをコマンドラインから実行する方法
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`に書いておきますが、基本的に手動でバージョンを上げなければなりません。
でも、日付やタイムスタンプ、ビルド番号を付与したいって言われたら?
`pom.xml`をshスクリプトとかで書き換える?マルチモジュールのとき、大変すぎない?
`mvn versions:set -DnewVersion=whatever`で毎回一斉に書き換える?
手間が増えるよね?結局ビルドにスクリプトが必要になっちゃう?JenkinsとかCIツールだったらプラグインで出来るみたいだけど・・・
なお、ここでやりたいのは、Arfictの生成物であるファイル名をどうにかしたいのではなく、Artifactのバージョンそのものを付ける方法の話です。
# Goal
`mvn install`などで、モジュールの`version`に自動的に日付とビルド番号を付与する。
例)`0.0.1.20200401-2`自前でスクリプトなどを書かずに実現すること。
なお、一部にCIの機能を使うことは許容する。
・・・どういうことかというと、とりあえず
エラー: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(
WSL Ubuntu18.04にJavaをインストールする
##環境
・ホストOS: Windows10 Home
・仮想OS: WSL Ubuntu18.04 lts
(windows10に導入したwslを利用してUbuntu18.04を導入しています)##概要
・Javaをubuntu18.04にインストールする。##手順
① パッケージのアップデート
“`
$ sudo apt update
“`② OPEN JREをインストールする
“`
$ sudo apt-get install default-jre
“`JREがインストールできているか下記のコマンドで確認します
“`
$ java –version
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)
“`
【Java】Optional覚書
# レガシーコードとは縁のないOptional
最近初めて業務で使ってうれしくなっちゃったので、次からも使えるように使用例のメモです。2019年の完全新規案件でJava1.6を強制されることのある現場に在籍しています。
この期に及んでJava8に触れる機会があまりありません。
そんな中で「Java8からはnullチェックが簡単に書けるらしい」というJava8登場時に聞いた情報で書きました。
一応複数のサイトを確認して書いていますが、マサカリとか改善方法とかがありましたら、ぜひコメントをお願い致します。
(私のコードレビューが可能なレビュアーが案件に不在のため)(他のメンバーのレビューは私がしています)## `get`について
使いどころがわからなかったので、使っていません。
いくつかサイトを見ると「`get`使うな論」を見かけたので、逆に正解だったのでは?感ある。# 注意
「Optionalは単純に従来のnullチェックを置換できる」は正しい認識ではありませんでした。
「Optionalを使うとnullチェック忘れの可能性撲滅のためにnullチェックを強制できる」が正しいで
Slack に Java のライブラリがどのようなリクエストを投げているかを調べるため Charles を使って HTTP トレースをとった話
# 概要
レガシーの Java アプリケーションが slack-api を使って通知していましたが、2020 年 3 月初旬になったら通知に失敗するようになりました。
Mac でトラブルシュートをするため、通知に失敗しているリクエストのペイロードがどのような内容であるかを確かめたいと考えました。
[Fiddler](https://qiita.com/yut-nagase/items/19be8d4df706f8373ff0) を使ってトレースを取ろうとしましたが、乗ってきてくれないので、[Charles](https://www.charlesproxy.com/) を使うことに。
curl では、[こちら](https://www.yoheim.net/blog.php?q=20180308) を参考に、localhost:8888 へのプロキシを -x で指定すると、Chales でログが取得できました。“`.sh
curl -x localhost:8888 -X POST –data-urlencode “payload={\”channel\”: \”#genera
Windows+VS CodeでSpring Boot環境を作る
# やりたいこと
WindowsでSpring Bootを動かす環境を作りたい。
せっかくWindowsでやるならWSL上で作ってそれをVS Codeでよしなに開発するのが今風な気がするのでそれを目指す。
まずはWindows上のみで動かし、そのあとWSL上で動かす。# やったこと
## Windows上のみで動かす
### OpenJDKのインストール
http://jdk.java.net/14/ からWindows用のJDKをzipでダウンロードして展開する。
出来たフォルダを適当なパスへ移動する。今回は`C:\Program Files\Java\jdk-14`以下に置いた。また、システム環境変数に下記を設定する。
変数|値
—|—
JAVA_HOME|C:\Program Files\Java\jdk-14
Path|先頭に %JAVA_HOME%bin を追加### VS Codeの設定
#### 拡張機能のインストール
下記をインストールした。– Language Support for Java(TM) by Red Hat
– htt
spock のセットアップとかの実行順まとめ
まわり見てるとちょいちょいこれでハマっている人がいるので、躓かなくなると良いなと思ってまとめ
さっと
## spock
細かい説明は省きますが、setup cleanup がいくつかと、where というテストデータ定義をする箇所があります結論をさっと
表と絵で定義 | タイミング | 備考
:– | :– | :–
setupSpec | テスト [クラス] の最初で [一回] 動く | static 相当
setup | テスト [データ] [ごと] に最初に動く |
cleanup | テスト [データ] [ごと] に最後に動く |
cleanupSpec | テスト [クラス] の最後で [一回] 動く | static 相当
where | テスト [メ
【Java】HTTPステータス 400 – Bad Requestの「リクエストヘッダが長すぎます」問題を解決
##はじめに
![スクリーンショット 2020-04-01 18.33.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486824/56d8461e-7eb7-462d-2de5-271fcf63e2e1.png)
上のような問題がでました。どういう状況の中で出たかというと
#####Tomcatでサーバーを立ち上げようとしていたときに出ました。完全に初歩ですね。RailsでRails sするときに謎のエラーが出る感じです。
サーバーに関してはそんなに知識を持ってなかったので、解決するのにちょっと戸惑いました。解決策を共有したいと思います。
作業環境
・Tomcatバージョン:8.5参考記事:[Tomcat: Request Header too large? Resolved!](https://thewebspark.com/2017/12/06/tomcat-request-header-too-large-resolved/)
##結論
###「maxHttpHe
java・JDKのバージョン管理 ベストプラクティス
# scala・javaのバージョン管理 ベストプラクティス
## 背景
jdk 1.8.0 系のプロジェクトと個人で、最新のjavaとscalaを使用する際にバージョンの切替が必要になりました。
昔`jEnv`を使用していたのですが、設定が複雑だったので見直したところ [sdkman](https://sdkman.io/) というバージョン管理ツールがありとても使いやすかったのでご紹介します。## [sdkman](https://sdkman.io/) インストール方法
**sdkman インストール方法**“`
curl -s “https://get.sdkman.io” | bash
source “$HOME/.sdkman/bin/sdkman-init.sh”
“`“`
➜ ~ sdk list java
================================================================================
Available Java Versio
Spring-Securityの新規登録とログイン(JPA)
#SpringSecurityの設定でハマった
タイトル通りです。初めてSpringSecurityを使って認証処理をしようとしたのですが、見事にハマりました。
参考URLは[こちら](https://qiita.com/a-pompom/items/80b3f4bb6414e8678829)と[こちら](https://qiita.com/sukezane/items/93f9155b5a4fa1976247)です。まずはプロジェクト作成。環境は以下。
Javaバージョン:1.8
FW:Springboot(gradle)
DB:MySQL(アクセスはJPA)
他:WebとかlombokとかThymeleafとか入れてます。
#まずはログイン画面を表示
“`java:LoginController
package com.example.demo.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotatio
Win10上でJavaとmysqlのWebシステム構築手順
#Overview
今回は一般的な開発環境を作ります。
本番のシステムの場合は適切なセキュリティ対策を行うする必要があります。
##概要
– Mysql
– ダウンロード
– インストール
– 設定
– Java
– Download
– 展開するフォルダー
– Tomcat
– ダウンロード
– 展開するフォルダー
– IDE
– ダウンロード
– インストール
– 設定など
– テスト
– サーバーにデプロイ
– DBと接続# MYSQL
###ダウンロード
https://dev.mysql.com/downloads/installer/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546056/d1dd52e4-13da-03cb-dfd8-c80614a0f464.png)
次の画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.ama
Kotlin Coroutineのサンプルをコマンドラインから実行する方法
## やりたいこと
みんな最初に実行する以下のコードをコマンドラインでビルドして実行する。“`kotlin
import kotlinx.coroutines.*
fun main() {
GlobalScope.launch { // launch a new coroutine in background and continue
delay(1000L) // non-blocking delay for 1 second (default time unit is ms)
println(“World!”) // print after delay
}
println(“Hello,”) // main thread continues while coroutine is delayed
Thread.sleep(2000L) // block main thread for 2 seconds to keep JVM alive
}
“`## 前提条件
– MacOS
– Javaインストール済