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

JAVA関連のことを調べてみた2021年08月27日
目次

AWSのEC2インスタンスでAmazon Correttoを用いてJDK16を導入する

とあるサーバー向けソフトウェアでJava16を必要とする事があった。
すでにAmazon Corretto 8を用いてJDK8がインストールされていたが、
AmazonLinuxならAmazon CorrettoというOpenJDK互換のソフトウェアが簡単にインストールとバージョン切り替えが可能なのでその方法を説明する。
この記事ではAmazon Corretto 16のインストールについて解説するが、Corretto 8については次の記事を参考にしてほしい。→[AWSのEC2インスタンスでAmazon Correttoを用いてJDK8を導入する](https://qiita.com/honahuku/items/e5464bb3b102710b555a)

# 環境
“`
AWS EC2 t4g.medium ARM AmazonLinux2
JDK 1.8.0_302 がインストール済み
“`
今回はARM版のAmazonLinux2を利用しているが、x86でも手順はほぼ同様だと思われる。

# インストール
今回はyumからインストールを行う。rpmからマニュアルでインストー

元記事を表示

JavaでCOMポートを開いた

###あらまし

先日こんなことがあった

https://qiita.com/Rmecan/questions/066befcf0e7b700b3d42

解決したので報告

まず本プロジェクトの環境周りを
プログラムはほぼ触らずに新しいパソコンへ移植というお仕事

– Windows 7 32bit -> Windows Server 2016 64bit
– Java6 -> Java8
– シリアル通信で外部機械との通信あり、シリアル通信には`RXTX-2.1-7`というライブラリを使っている

次に起きた問題

“`Java
// RS232Cポートをオープンする。この処理を実行すると
CommPortIdentifier RSport = CommPortIdentifier.getPortIdentifier(“COM1”);
“`
“`Java
// このエラーになる。( rxtxParallel.dll と rxtxSerial.dll を見つけられませんだって )
> java.lang.NoClassDefFoundError: no rxtxSerial

元記事を表示

AWSのEC2インスタンスでAmazon Correttoを用いてJDK8を導入する

とあるサーバー向けソフトウェアでJava16を必要とする事があった。
AmazonLinuxならAmazon CorrettoというOpenJDK互換のソフトウェアが簡単にインストールとバージョン切り替えが可能なのでその方法を説明する。
この記事ではAmazon Corretto 8のインストールについて解説するが、Corretto 16については次の記事を参考にしてほしい。→[AWSのEC2インスタンスでAmazon Correttoを用いてJDK16を導入する](https://qiita.com/honahuku/items/36e83367f6acac9947c8)

# 環境
“`
AWS EC2 t4g.medium ARM AmazonLinux2
Javaは未インストール
“`
今回はARM版のAL2を利用しているが、x86でも手順はほぼ同様だと思われる。

# インストール
今回はyumからインストールを行う。rpmからマニュアルでインストールする方法はこちら→[AWSのマニュアル](https://docs.aws.amazon.com/corretto/lat

元記事を表示

単純すぎるドメイン駆動設計Javaサンプルコード (4) テスト

– [単純すぎるドメイン駆動設計Javaサンプルコード](https://qiita.com/ynstkt/items/7379062743bdec2df6e3)
– [単純すぎるドメイン駆動設計Javaサンプルコード (1) DDDらしいコード](https://qiita.com/ynstkt/items/ddbb905adf0583121530)
– [単純すぎるドメイン駆動設計Javaサンプルコード (2) 仕様追加その1](https://qiita.com/ynstkt/items/6ed4fac3ba200f73acd3)
– [単純すぎるドメイン駆動設計Javaサンプルコード (3) 仕様追加その2](https://qiita.com/ynstkt/items/518c8d9bea997da7b270)
– 単純すぎるドメイン駆動設計Javaサンプルコード (4) テスト **<- ここ** いまさらですが、ここでテストコードも見てみましょう。 ## DDDの場合 ### ドメイン層 ドメイン層のテストは比較的単純に書くことができ

元記事を表示

単純すぎるドメイン駆動設計Javaサンプルコード (3) 仕様追加その2

– [単純すぎるドメイン駆動設計Javaサンプルコード](https://qiita.com/ynstkt/items/7379062743bdec2df6e3)
– [単純すぎるドメイン駆動設計Javaサンプルコード (1) DDDらしいコード](https://qiita.com/ynstkt/items/ddbb905adf0583121530)
– [単純すぎるドメイン駆動設計Javaサンプルコード (2) 仕様追加その1](https://qiita.com/ynstkt/items/6ed4fac3ba200f73acd3)
– 単純すぎるドメイン駆動設計Javaサンプルコード (3) 仕様追加その2 **<- ここ** - [単純すぎるドメイン駆動設計Javaサンプルコード (4) テスト](https://qiita.com/ynstkt/items/6d390a6e0a4248905af5) さらに、以下の要件が追加されたとします。 - ユーザごとに足し算の履歴を保存できる 今回の例ではコマンドラインインターフェースとしているので

元記事を表示

単純すぎるドメイン駆動設計Javaサンプルコード (2) 仕様追加その1

– [単純すぎるドメイン駆動設計Javaサンプルコード](https://qiita.com/ynstkt/items/7379062743bdec2df6e3)
– [単純すぎるドメイン駆動設計Javaサンプルコード (1) DDDらしいコード](https://qiita.com/ynstkt/items/ddbb905adf0583121530)
– 単純すぎるドメイン駆動設計Javaサンプルコード (2) 仕様追加その1 **<- ここ** - [単純すぎるドメイン駆動設計Javaサンプルコード (3) 仕様追加その2](https://qiita.com/ynstkt/items/518c8d9bea997da7b270) - [単純すぎるドメイン駆動設計Javaサンプルコード (4) テスト](https://qiita.com/ynstkt/items/6d390a6e0a4248905af5) 前述のDDDらしいコードの作成では、手続き型設計のコードをレイヤ化アーキテクチャで分割し、足し算アプリの中心部分である足し算の処理を、ドメイン層

元記事を表示

単純すぎるドメイン駆動設計Javaサンプルコード (1) DDDらしいコード

– [単純すぎるドメイン駆動設計Javaサンプルコード](https://qiita.com/ynstkt/items/7379062743bdec2df6e3)
– 単純すぎるドメイン駆動設計Javaサンプルコード (1) DDDらしいコード **<-ここ** - [単純すぎるドメイン駆動設計Javaサンプルコード (2) 仕様追加その1](https://qiita.com/ynstkt/items/6ed4fac3ba200f73acd3) - [単純すぎるドメイン駆動設計Javaサンプルコード (3) 仕様追加その2](https://qiita.com/ynstkt/items/518c8d9bea997da7b270) - [単純すぎるドメイン駆動設計Javaサンプルコード (4) テスト](https://qiita.com/ynstkt/items/6d390a6e0a4248905af5) 前述のコードをDDDらしく修正するうえで、最初に行うのはドメインの隔離です。 足し算アプリの中心となる部分は、もちろん足し算です。前述のコードの

元記事を表示

単純すぎるドメイン駆動設計Javaサンプルコード

## 背景
チーム内でドメイン駆動設計(以降、DDDと記述)についてちょっとした勉強会をやることになった際、いわゆる手続き型設計との違いについて、具体的なコード例で説明したいと思い、サンプルコードを用意してみました。チーム内でよく使用されているJavaで記述しています。

https://github.com/ynstkt/learn-ddd

勉強会参加者にはプログラミングに疎いメンバもいるので、なるべく理解するのに負担が少ないよう、できる限り単純な例にすることを意識しました。

一方で、実際にはDDDを取り入れるまでもない(むしろ取り入れない方がよい)ほど例が単純すぎることによって、DDDの必要性・効果がうまく伝わらず、むしろ面倒なことをしている印象になってしまう懸念はありますが、概要説明用と割り切っている点はご了承ください。

なお、前提として、そもそもDDDとは何かという部分については、個人的に以下のスライドが内容や流れがわかりやすかったので、勉強会でもそのまま紹介させていただくことにしました。

https://speakerdeck.com/player/7d40c1a5

元記事を表示

【実践!AWS Lambda】Javaで書いたLambdaの初回起動が遅い問題を解決する

# 概要
AWS Lambdaの開発において、必ず出てくる初回起動が遅い問題、、、
NodejsやPythonなどのスクリプト言語のLambdaであれば対策は比較的簡単なのですが、Javaなどのコンパイル型の言語の場合は難易度が上がります
今回は、JavaのLambdaの初回起動にかかる時間を、**8秒→1秒**に短縮することに成功したので、ここに備忘録を残します

# 目次
1. 前提条件
1. 設計要素の洗い出し
2. コールドスタート対策
2. DBコネクション対策
2. クラスローディング対策

# 前提条件
・ランタイムはJava 11を使用
・以下のような構成とする
①API GatewayをトリガーにLambdaが起動
②RDS Proxyを介してAuroraに接続
③ClientにResponceを返す

# 設計要素の洗い出し
時間がかかっている要因を洗い出していく

## ▼ 実行時間を計測
まずはPostmanからAPIを叩いて初回起動に要する時間を計測

| | 実行時間 |
|:———–|———-

元記事を表示

gsonでパースするときに DateTimeParseException になったメモ

gson で 日付をパースするときに原因不明のエラーになってハマりました

“`
java.time.format.DateTimeParseException:
Text ‘2021-01-11T09:59:01’ could not be parsed at index 19
“`

もともと swagger から自動生成したコードで、
org.threeten.bp.OffsetDateTime が使われていたので、 java.time.OffsetDateTime に変更してもエラーは変わらず。

java.time.LocalDateTime に変更してもエラーは変わらず。

散々ハマってしまったけど、解決方法は下記でした
gson に設定する LocalDateTimeTypeAdapter の formatter の指定が下記になっていた

“`java
DateTimeFormatter.ISO_OFFSET_DATE_TIME
“`

これを下記にしたら無事にパースできました

“`java
DateTimeFormatter.ISO_LOCAL_DATE

元記事を表示

【Java】リクエストパラメータの取得

リクエストパラメータとは

リクエストパラメータはjspのフォームから「名前」と「値」を受け取ることができます。
下記に参考コードを記述します。

“`

ユーザ名:
パスワード:

“`

action属性:送信先のサーバーサイドプログラムを記述します。Javaの場合はサーブレットかJspファイルを指定します。

method属性:リクエストメソッドを記述します。GETかPOSTを選択。

サーブレットでリクエストパラメータを取得する

jspの準備はできたのでサーバーサイドプログラムのサーブレット側でパラメータを取得をしたいと思います。

元記事を表示

SpringBootのapplication.ymdの環境別読み込みの方法

環境変数を使う

起動オプションで指定する方法もあるみたいだが、現状はIntelliJから起動したり、eclipseから起動したり、VSCodeから起動したりするのでこっちの方が楽な気がした。

application-xxx.ymlという名前の設定ファイルを用意する。
環境変数にSPRING_PROFILES_ACTIVEというKEYを作成し、先に作ったapplication-xxx.ymlのxxxの部分をValueに指定する。
そのまま実行。IntelliJだとIDEを再起動しないと環境変数を読み込んでくれなった。
うまくいかない場合は環境変数のリロードを試すべき。

元記事を表示

Builder パターンが嫌い

## コンストラクタのあるクラスなら継承ができる

“`java:Hoge.java
class Hoge{
//…
public Hoge(/*…*/){
//…
}
public int hogeMethod(){
//….
}
}
“`

“`java:Huga.java
class Huga extends Hoge{
public Huga(/*…*/){
super(/*…*/);
//…
}
public int hugaTsukaiyasuiMethod(/*…*/){
//…
}
}
“`

“`java
Huga huga = new Huga(/*…*/);
int a = huga.hogeMethod();
int b = huga.hugaTsukaiyasuiMethod();
“`

中身なんてなんでもいいんですが、普通の、というよりはせめてコンストラクタのあるクラスって継承で簡単に機能が拡張できますよね。

## Builder し

元記事を表示

【Java】ログインアプリの作成

【Java】ログインアプリ作成

jspのログイン画面からユーザーIDとパスワードを入力し、登録ボタンを押すことでログインが成功し
メニュー画面へ遷移するプログラムの作成。

jsp画面

リクエストパラメータを使って値をサーブレットから取得するため、inputタグのname属性の値が必須になる。

“`:jsp

 

ユーザーID

 

 

パスワード

 

 

“`

Javascript

jsp画面からボタンをクリックするとinputタグのonclick属性buttonclick(

元記事を表示

Java Word文書でテーブルを作成

ワードで表(テーブル)を作成・編集ができるようになれば具体的かつ詳細な資料を作成することが可能です。今回は、Spire.Doc for Javaという使いやすいライブラリを活用して、Word文書でテーブルを作成する方法を紹介していきます。

下準備

1.E-iceblueの公式サイトからFree Spire.doc for Java無料版をダウンロードしてください。

f:id:lendoris:20210825151531p:plain

元記事を表示

Java Word文書で数式を追加

Wordは数式を入力することができます。数式の用法を使いこなせば、とても便利なツールになるはずだと思いますので、今回は、Spire.Doc for Javaという使いやすいライブラリを活用して、WordでLatex 数式とMathMLCodeを挿入する方法を紹介します。

下準備

1.E-iceblueの公式サイトからFree Spire.doc for Java無料版をダウンロードしてください。

f:id:lendoris:20210825151531p:plain

元記事を表示

Eclipse_2019でとDBeaverを用い、JDBCとMySQLを接続する際につまづいたこと

## 某プログラミングスクール卒業生の備忘録

お久しぶりです!少し投稿ができない期間があり、久々の投稿となります。

本日は今までと少し違う内容になります!EclipseでJDBCとMySQLを接続する際に詰まったことを投稿しますね!

それでは早速いきましょう!

## JavaとMySQLが接続できない!?

ということで、新たなチャレンジとしてJavaをやっており、Javaを使って、簡単なアプリを自分で作ってみたいなって

ときに引っかかったことです。

具体的には、教材でいただいたサンプルデータと、Javaのサンプルコードを使ってちゃんとMySQLからデータ抽出できるかって

チャレンジだったんですが、呪文(エラー)が出てしまい、少し詰まってしまいました。それが以下の内容です。

“`Java:コンソール
java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
at com.mysql.cj.jdbc.exceptions.SQLError.c

元記事を表示

Kiwis2 API Mock Server(簡単にJSONサーバできる)

##### What is Kiwis2 API Mock Server

Kiwis2 API Mock Serverは、簡単に設定でき、javascriptで応答電文作成できるのAPI MockServerです。

[こちら](https://kiwis2.github.io/download/download.html) て、kiwis2-mockserverをダウンロードします。

GitHub: https://github.com/kiwis2/mockserver

HomePage: https://kiwis2.github.io/

##### 1.簡単な操作

“`
APIを作成するための単純なファイルブラウザを提供します。
javascriptを直接使用して、リクエスト情報を読み取り、オンラインでレスポンス内容を編集できます。
“`

![img](https://kiwis2.github.io/images/1.gif)

##### 2.動的URLをサポートし、コンソールでデバッグ情報を出力できますし、アクセスログをオンラインで表示できます。

“`

元記事を表示

Spring Bootで MockMvcを使う際に、@RequestParamでLocalDateTimeを受け取る

## やりたかったこと

Spring SecurityでOAuth2認証を有効にしたRestControllerにおいて、引数にLocalDateTimeを取るAPIを作成。

そしてこれをMockMvcでテストしたい。

### プロダクションコード

“`java:TestController.java
@GetMapping(“/test/date”)
public ResponseEntity paramCheck(
@RequestParam(“date”) LocalDateTime date,
@AuthenticationPrincipal DefaultOAuth2User defaultOAuth2User) {

// 引数があればOK, なければBAD REQUEST
if (date != null) {
return new ResponseEntity(
HealthCheckResponse.builder(

元記事を表示

computeIfPresentという便利なやつ

# どんな役割か
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Map.html#computeIfPresent-K-java.util.function.BiFunction-

>指定されたキーの値が存在していてnull以外の場合、キーと現在マップされている値から新しいマッピングの計算を試みます。
関数がnullを返した場合、マッピングは削除されます。関数自体が(非チェック)例外をスローした場合、その例外は再スローされ、現在のマッピングは変更されません。

なるほど。

# コードで見る
– 使わなかった場合

“`java:
import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
Map map = new HashMap<>();
map.put(“hoge”, “hoge”);
ma

元記事を表示

OTHERカテゴリの最新記事