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

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

httpcore-4.4.5 で削除されたannotation ThreadSafe/NotThreadSafeの置換

httpcore-4.4.4 では使用可能だが httpcore-4.4.5 から削除されたannotation

`@ThreadSafe`, `@NotThreadSafe` に関する置換メモ。

Release Note:
https://archive.apache.org/dist/httpcomponents/httpcore/RELEASE_NOTES-4.4.x.txt

httpcore ThreadSafe class not found solution:

httpcomponents:httpcore ThreadSafe class not found solution

## 置換

@ThreadSafe class not found compilation error occurs after updating your org.apache.httpcomponents:httpcore dependency version to 4.4.11 or above.
@NotThreadSafe

“`

元記事を表示

Jenkinsを使って、Docker内でビルドしてからDocker imageを作成する。

# はじめに
Jenkinsを使って、Mavenコンテナ内でビルドしていました。
どうせならDocker imageまでも一気通貫でやりたくて作成。
思っていたよりも作成に時間がかかった。

# リポジトリ構成
“`
src
Dockerfile
Jenkinsfile
“`
gitリポジトリにソースと上記のファイルを格納しています。

# Dockerfile
“`
FROM tomcat:jdk14-openjdk

COPY target/*.war /usr/local/tomcat/webapps/
“`
ビルドでできたwarファイルをwebapps配下に格納しています。
コードと同じリポジトリで管理します。

# Jenkinsfile
“`
pipeline {
agent any
stages {
stage(‘delete_workspace’) {
steps {
deleteDir()
}
}
stage(‘

元記事を表示

Bio-Formats の使い方

[Bio-Formats](https://www.openmicroscopy.org/bio-formats/)の使い方です。

1) コマンドラインツールのダウンロード

“`bash
wget https://downloads.openmicroscopy.org/bio-formats/6.5.1/artifacts/bftools.zip
“`
解凍して、例えば、$HOME/bin/bftools とする

Path を通す

“`text:.bash_profile
(省略)
export PATH=$HOME/bin/bftools:$PATH
“`

2) ij.jar のダウンロード

“`bash
wget http://wsr.imagej.net/distros/linux/ij153-linux64-java8.zip
“`

解凍して、ij.jar を $HOME/bin/bftools に入れる

3) サンプルデータのダウンロード

“`bash
wget https://downloads.openmicroscopy.org/ima

元記事を表示

[Java]MinecraftのModを作成しよう 1.16.1【ブロックの追加】

(この記事は一連の解説記事の一つになります)

先頭記事:[入門編](https://qiita.com/koteko/items/8d32c8819e3f9e6a333a)
前の記事:[アイテムの追加](https://qiita.com/koteko/items/578c3cfdfd7ef71df9c1)
次の記事:

# ブロックの追加
ブロックの追加をします。1.14.4のときと少し書き方を変えました(バージョンアップによって実装の方法が変わったという意味ではないです)。

## ブロックの登録

“`
\src\main\java\jp\koteko\liveinwater\
├ block
│ └ Blocks.java
├ item
└ LiveInWater.java
“`

“`java:Blocks.java
package jp.koteko.liveinwater.block;

import jp.koteko.liveinwater.LiveInWater;
import net.minecraft.block.Abstra

元記事を表示

[Java]MinecraftのModを作成しよう 1.16.1【アイテムの追加】

(この記事は一連の解説記事の一つになります)

先頭記事:[入門編](https://qiita.com/koteko/items/8d32c8819e3f9e6a333a)
前の記事:[基本ファイル](https://qiita.com/koteko/items/6560128ebd320f2727ab)
次の記事:[ブロックの追加](https://qiita.com/koteko/items/fb057afa493fd2d648fc)

# アイテムの追加
まずは基本となるアイテムの追加を行っていきます。[1.14.4のとき](https://qiita.com/koteko/items/76910dbf9eb126bdfdf9)と少し書き方を変えました(バージョンアップによって実装の方法が変わったという意味ではないです)。

## アイテムの登録

“`
\src\main\java\jp\koteko\liveinwater\
├ item
│ └ Items.java
└ LiveInWater.java
“`

“`java:Items.jav

元記事を表示

51歳(現52)からのプログラミング 備忘 Path と File

忘れていたので確認しました。
java7以降のファイル操作は
1. java.nio.file.Pathsクラスのメソッドで、操作するファイルやディレクトリを指定し
2. java.nio.file.Filesクラスのメソッドで、ファイルやディレクトリを操作する

“`java
Path p1 = Paths.get (“sample.dat”); // Pathsメソッド
Boolean b = Files.isDirectory(p1); // Filesメソッド
System.out.println(b);
“`

元記事を表示

AWS で HTTPS 化したら WebSocket が 60秒で切断されるようになった

AWS で HTTPS 化したら作ったチャット機能の通信がすぐ切断されるようになった…

1分間くらい何もしないと切断。

ロードバランサーの設定が原因のようです。

アイドルタイムアウトの設定がデフォルトで60秒のため、何もしないと60秒で WebSocket は切断されます。

そこで設定変更。

1.AWSのコンソールから「EC2」→「ロードバランサー」
![キャプチャ001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666395/5bb0ac81-fc69-0d48-f0f3-0b282cf38df6.png)

2.「属性の編集」でアイドルタイムアウトの値を60秒から切断されたくない時間に変更
![キャプチャ002.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666395/9504a1c8-bdd5-cc44-cfb5-4404a1a98ef5.png)

3.完了。
![キャプチャ003.PNG](h

元記事を表示

現在日付をyyyyMMdd形式の文字列で取得する方法

現在日付をyyyyMMdd形式で取得するサンプルです。

SimpleDateFormatを使用します。
下記の形式でフォーマットを指定します。

#####SimpleDateFormat オブジェクト名 = new SimpleDateFormat(”フォーマットパターン”)

““java
import java.text.SimpleDateFormat;
import java.util.Calendar;

Calendar cl = Calendar.getInstance();

//日付をyyyyMMddの形で出力する
SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMdd”);
String str = sdf.format(cl.getTime());
System.out.println(str);

//日付をyyyy/MM/ddの形で出力する
SimpleDateFormat sdf1 = new SimpleDateFormat(“yyyy/MM/dd”);
Stri

元記事を表示

IntellijIDEAで、gradleでメインクラスを指定したjarを出力する方法

#目的
gradleプロジェクトを作成しjar出力をし、`java -jar ***.jar`を実行したときに
`***.jarにメイン・マニフェスト属性がありません`となってしまう。
これを解決するためにメインクラスを指定する。
#環境
– Windows10 64bit
– IntelliJ IDEA 2020.2 (Ultimate Edition)

#初期状態
“`gradle
plugins {
id ‘java’
}

group ‘xyz.miyayu’//環境によって異なる
version ‘1.0-SNAPSHOT’//環境によって異なる

repositories {
mavenCentral()
}

dependencies {
testCompile group: ‘junit’, name: ‘junit’, version: ‘4.12’
}
“`

#メインクラスを指定してあげる
“`gradle
//~略~
version ‘1.0-SNAPSHOT’

//追加する
jar{
manifest{

元記事を表示

[Java]ビルドしたwarファイルのJDKバージョンを確認する

(Javaの初心者による、メモ書きです)

JavaのwarファイルがJDKのバージョンいくつでビルドされたものか確認したい時があります。
そんな時には、以下のコマンドで確認することが出来ます。
まずは、warファイルを解凍します。

Tomcatのドキュメントルートでwarファイルが解凍されていればその中のクラスファイルを参照します。
ローカルに存在するwarファイルの場合は、拡張子をzipに変更し、zipファイルを解凍します。

example.war -> example.zip

解凍後、どれでも良いのでクラスファイルが存在するディレクトリへcdコマンドで移動します。

“`
javap -v [クラスファイル名]
“`
※クラスファイル名には、拡張子”.java”は含めません。

実行結果の中に

“`
major version: 52
“`

のように出力された場合、その値から44を引きます。

52 – 44 = 8

ということで、JDK バージョン8で、ビルドされたものということが分かります。

元記事を表示

Java よく検索する型変換をまとめる

私がよく検索する型変換のまとめ
# 数値型どうしの型変換
## int型 → double型
“`ruby
int num = 3;
double number = (double)num;
“`
## double型 → int型
“`ruby
double num = 3;
int number = (int)num;
“`
数値型(他にlongなど)は型変換したい変数の前に**(変換したい型)**をつけることで、変換ができる。

# 数値型から文字型への型変換
## int型 → String型
“`ruby
int num = 3;
String number = Integer.toString(num);
“`
## double型 → String型
“`ruby
double num = 3.0;
String number = Double.toString(num);
“`
# 文字型から数値型への型変換
## String型 → int型
“`ruby
String text = “123”;
int number = Integer.parse

元記事を表示

【Java】switch文のcaseに文字列入れる場合は定数式にする必要がある

結構今さら感があると思うのだが、知らなかったので自分用のメモ。
すぐ忘れそうだが。

# こんな例はコンパイルエラーになります

例えば

“`java
public class SwitchTest {
static final String ddd = “ddd”;
static String ccc = “ccc”;
public static void main(String[] args) {

String bbb = “bbb”;

final String eee = “eee”;

switch(args[0]) {
case “aaa”:
System.out.println(“aaa”);
break;
case bbb:
System.out.println(“bbb”);
break;
c

元記事を表示

Javaのgetter/setterの定義を自動で作成

#この記事について
Javaにおいて、クラスのフィールドに対して、getter/setterは関数名も含めて定型的に定義できる部分があると思ったので、手動で入力しないでいいようにPython3でスクリプトを書いてみましたので紹介します。
※IDEの機能などを使えばあるのかもしれませんが練習がてら書いてみました

なお、getter/setterとしては最低限の機能だけを考えます。例えば「setterで不正値のチェックを行いたい」といった場合には手動で追加となります。

#環境(ざっくり)
言語:Python3
OS:macOS (たぶん他のOSでも大丈夫だと思います)

#やりたいこと:Javaでのgetter/setterの定義
例を通してやりたいことを説明します。

下記のように、魔法使いを表すWizardクラスがあり、フィールドとして名前を表すnameや魔力を表すpowerがあったとします。

“`java:Wizard.java
public class Wizard {
private String name;
private double power;

元記事を表示

[Java]MinecraftのModを作成しよう 1.16.1【基本ファイル】

(この記事は一連の解説記事の一つになります)

先頭記事:[入門編](https://qiita.com/koteko/items/8d32c8819e3f9e6a333a)
前の記事:[入門編](https://qiita.com/koteko/items/8d32c8819e3f9e6a333a)
次の記事:

# 基本ファイル
基本となるファイル類を設定していきます。[前回](https://qiita.com/koteko/items/8d32c8819e3f9e6a333a)でコピペしたファイル群があるので、これらを自分用に変更していきます。

## パッケージ名
[パッケージ命名規約](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8_(Java)#%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E5%91%BD%E5%90%8D%E8%A6%8F%E7%B4%84)を読むと、所持するドメインを名前空間として用いることで、競合を避

元記事を表示

[Java]MinecraftのModを作成しよう 1.16.1【入門編】

# TL;DR
・ 以前 Minecraft 1.14.4 のmoddingについていくつか解説した
・ 今度は改めて Minecraft 1.16.1 のmoddingについてできるだけ色々解説していく
・ まずは環境構築について紹介

# はじめに
以前Minecraftのmoddingについていくつか記事を書きました。
[[Java]MinecraftのModを作成しよう 1.14.4【入門編】](https://qiita.com/koteko/items/7afadf8261eac49bacad) など
これらは本体のバージョンが1.14.4(2019年7月リリース)とやや古く、また1.16での追加要素が大規模であることから、今後の潮流を考慮するに1.14の理解をするよりも1.16の開拓をする方が有用だと思いました。
そのため、今回からは環境を変えて(変わらない部分は引き継ぎつつも)新たに解説を書いていこうと思います。
また、今回は例示用でなくもうすこし具体的にModをイメージして作っていこうと思っていますので、ご了承ください。

# 注意
必要に応じて解説及び注釈を入れてい

元記事を表示

【CodePipeline×ElasticBeanstalk】Java SEプラットフォームでランタイムバージョンをJava 8からCorretto 11に更新する

2020年6月3日に、Elastic BeanstalkのJava SEプラットフォームで、Corretto 11(Java 11)プラットフォームブランチの一般提供が開始されました。

– LTS(長期サポート)バージョンはJDK11
– Amazon CorrettoでもCorretto 8のサポート期限が最短2023年6月までなのに対し、Corretto 11は最短2024年8月までと長い

ことからも早めにランタイムバージョンの更新対応しておきたいこところですね。

というわけで、今回は、ElasticBeanstalkのJava SE環境をJava 8(Corretto 8ではないほう)からCorretto 11にバージョンアップする手順をまとめてみました。

## 環境
– OS:Windows10
– IDE:Eclipse 2020-03
– JDK:Amazon Correto 8 → Amazon Correto 11
– フレームワーク:Spring Boot
– AWS
– CodePipeline
– CodeCommit

元記事を表示

Template Methodパターン

###ざっくりTemplate Method
スーパークラスで処理の枠組みを定め、サブクラスでその具体的内容を定めるようなデザインパターンをTemplate Methodという。
登場役はAbstractClass(抽象クラス)の役とConcreteClass(具象クラス)の役の2役。

###AbstractClass(抽象クラス)の役
AbstractClass役はテンプレートメソッドを実装する。
また、そのテンプレートメソッドで使っている抽象メソッドを宣言する。

““java
package templateMethod;

public abstract class AbstractDisplay {
public abstract void open();
public abstract void print();
public abstract void close();

public final void display() {
open();
for(int i = 0; i < 5; i++) { print(); } clos

元記事を表示

JSFがさっぱりうまくいかないときに役立ちたいリンク集

|スコープアノテーション|バッキングBeanの寿命|
|:-:|:-:|
|@RequestScoped|一回の呼び出し(リクエスト)とそれへの応答(レスポンス)の間存続|
|@SessionScoped|HTTPセッションが続いている間(ログインしている間)存続|
|@ApplicationScoped|ウェブアプリケーションが実行されている間存続|
|@ConversationScoped|一回以上のリクエストの間で、開始と終了をプログラムで制御する|
|@Dependent|インジェクト先のスコープを引き継ぐ(予めスコープを決められない場合に使う)|
|@ViewScoped|リクエストにより表示されたJSFページが他のページへ切り替わる直前まで存続。画面をリロードしても存続。|

“`text:るーる
JavaEE7からのCDIビーンクラスの基本条件
a. 具象クラスであること
b. 引数なしのデフォルトコンストラクタを持つこと
c. static付きのインナークラスではないこと

JSFのaction属性に指定するメソッドのルール
a. publicであること
b. 引数

元記事を表示

FacesMessageを設定したのに表示されないときの対応方法

# 事象 : FacesMessageをコンテンツに設定したのにメッセージが表示されない

“`xml:ajaxでメソッドを実行して




“`

“`java:メソッドでメッセージをコンテンツに設定したのに表示されない
public void uploadFile(AjaxBehaviorEvent event) thr

元記事を表示

Eclipseのリファクタリングまとめ

Eclipse には様々なリファクタリング機能が備わっていますが,正直,実行するとどうなるのかよくわからないものが多かったのでまとめてみました.

# リファクタリングとは

リファクタリングとは、ソフトウェアの外部の振る舞いを保ったままで、内部の構造を改善していく作業を指します。

## リファクタリングを行う理由

### ソフトウェアの設計を改善する

完璧な設計は存在しません.厳密には設計当時は完璧に思えても時間経過とともに完璧ではなくなります.
さらに,今後どんな要望が出てきて,誰が,どこに機能追加することになるかは誰にも分かりません.

設計が完璧ではなくなる例

– 決済方法として現金,クレジットカードのみを考えていたが,他のキャッシュレス決済に対応する必要が出てきた
– 納期が短かったので,影響範囲を限定的にするために場当たり的な対応をした
– 新たに参画した人が,既存コードの理解が足らないままコードを追加し,スパゲッティコードになる

時間経過で設計が劣化していくので,定期的にメンテナンスしてやる必要があります.

### ソフトウェアを理解しやすくする

きれいに整

元記事を表示

OTHERカテゴリの最新記事