JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

Azure Functions を Azure Container Apps にデプロイする 2 種類の方法の比較について

昨日、「[Azure Container Apps に対して Java Azure Function on Linnux Container をデプロイ](https://qiita.com/yoshioterada/items/0ef6c1a0ffd65bf3cace)」というエントリを記載しました。

エントリ中に「統合された Azure の管理ポータルを使用」と記載しましたが、これが何を意味するのか、そして今までと何が違うのかを明確にするために、本エントリで今までとの違いとメリットについて記載したいと思います。

* 旧来の方法: `az containerapp create` で作成
* 新しい方法: `az functionapp create` で作成

## 旧来の方法: `az containerapp create` で作成

Azure Container Apps は Azure のコンテナ実行環境の一つとして提供されています。そこでコンテナ化されたサービスであれば任意のサービスを動作させる事ができます。

その意味で、今までも Azure Functions

元記事を表示

【Java & Spring】オリジナルのバリデーターを作成しよう

## 目標
ユーザーの入力した値が、電話番号かどうかを判断するバリデータ(@PhoneNumber)を作成する。
ここでは入力値が「0~9と-のみ」の場合、電話番号と判断する。

## 実装手順

  1. アノテーションクラスを作成する。
  2. バリデータークラスを作成する。
  3. バリデーションを使用する。

## 手順 1: アノテーションクラスの作成
まず、アノテーションを作成します。このアノテーションを利用して、入力値が電話番号かどうかを判定します。
“`java:
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java

元記事を表示

Java コードの基本

## Javaのコードの構成について
“`java
class Ex1_03_2 { //クラスブロック
public static void main (String[] args) { //メソッドブロック(命令文は基本ここに記述)

System.out.println(“Hello World!! Error is cleared!!” );

}
}
“`

## 変数と定数について
### 変数
変数は、値の型によって使い分ける必要がある。

“`
整数 (±128) 専用の変数には byte
整数 (±3万2千) 専用の変数には short
整数 (±21億) 専用の変数には int
整数 (±900京) 専用の変数には long

小数点(doubleより厳密さに欠ける)専用の変数には float
小数点専用の変数には double

1文字専用の変数には char
文字列専用の変数には String

論理値専用の変数には boolean
“`

※変数宣言と代入を同時に行うことを**初期化**という。
`int teika = 1000;`

元記事を表示

Javaの準備

## JDKのインストール(AdoptOpenJDK)
IDEであるeclipse(Pleiades All in One)を使用してダウンロード&インストールする。
※IDEとは統合開発環境という意味で、エディタや実行環境、その他機能が含まれている。VSCodeもそう。
※Pleiades All in Oneはeclipseの上位互換で「日本語設定」、「環境変数設定」、「その他設定」が組み込まれている。

## eclipseの準備
1. ビューをパッケージ・エクスプローラーだけにする
2. ビューでコンソールを追加
3. パッケージ・エクスプローラーで「Java プロジェクトの作成」を選択し、作成
4. srcでファイルをインポート > 一般 > ファイル・システム

## 実行方法
右クリックで以下を選択

元記事を表示

【Spring Data MongoDB】Document用のクラスにenumのプロパティを設定してみる

## 概要
Spring Data MongoDBでは、[MongoDBでデータアクセス](https://spring.pleiades.io/guides/gs/accessing-data-mongodb)のドキュメントで紹介されている通り、Documentの保存・取得用にPOJOのクラスを使用してRepositoryを通してDBの操作が行えます。ではこのクラスにenumのプロパティを設定した場合、どういう動作になるかというメモ書きです。

## 前提
* 今回使用したSpring Boot Starter Data MongoDBのバージョンは`3.3.3`です。

## 動作確認用のクラス(Java)

以下のようにenumのプロパティを設定したクラスを、Repository経由で保存・取得した場合の動作を確認しました。

“`java:UrlDocument.java
@Document(collection = “url”)
public record UrlDocument(
@Field(“url_id”)
String urlId,

元記事を表示

Azure Container Apps に対して Java Azure Function on Linnux Container をデプロイ

Azure Functions では、Azure Container Apps でコンテナー化した関数アプリを開発、デプロイ、管理するための統合サポートを提供しています。
これにより、Azure Kubernetes Service (AKS) などのコンテナー環境で Azure Functions を独自に実行するよりも、統合された Azure の管理ポータルを使用して、Azure Functions を簡単に実行・管理することができます。さらに Azure Container Apps が提供する機能を使用することで、Azure Functions に対して、KEDA、Dapr, Envoy、スケーリング、監視、セキュリティ、アクセス制御などの機能を簡単に利用することができます。

参照:
[Azure Functions の Azure Container Apps ホスティング](https://learn.microsoft.com/azure/azure-functions/functions-container-apps-hosting)
[Azure Container

元記事を表示

JAVAでRSA暗号化を使用する方法

# はじめに
業務をしながら暗号化を扱うことが多くてこの機会に整理しました。

### 1. **暗号化方式 一目で確認できる表**

| 暗号化方式 | タイプ | 鍵管理 | 主な特徴と利点 | 使用例 |
|————–|————|———————–|—————————————————–|—————————————-|
| **RSA** | 非対称鍵 | 公開鍵 & 秘密鍵 | 公開鍵で暗号化し、秘密鍵で復号化および署名検証 | サーバー認証、電子署名、SSL/TLS通信 |
| **AES** | 対称鍵 | 同じ秘密鍵を使用 | 高速で

元記事を表示

Java Gold 例題 ResourceBundle

次のコードのうち、非推奨とされる箇所があれば指摘してください。

“`java
try {
ResourceBundle bundle = ResourceBundle.getBundle(“MyResource”, Locale.US);
Properties props = new Properties();
bundle.keySet().stream()
.forEach(key -> props.put(key, bundle.getString(key)));
System.out.println(props.getProperty(“code”));

} catch(MissingResourceException e) {
System.out.println(“リソースが見つかりません” + e.getMessage());
}
“`

`MyResource_en_US`
“`
code=hundred
“`

解答
元記事を表示

Java Gold メソッド逆引き早見表 Stream型を返すメソッド 簡略版

### Stream型を返すメソッド

| メソッド名 | 宣言されたクラス・インターフェイス | 戻り値の型(Stream) |
|————|—————————–|———————-|
| `of(T… values)` | `Stream` | `Stream` |
| `stream(T[] array)` | `Arrays` | `Stream` |
| `stream(int[] array)` | `Arrays` | `IntStream` |
| `stream(double[])` | `Arrays` | `DoubleStream` |
| `stream(long[])` | `Arrays` | `LongStream` |
| `parallelStream()` | `Collection` | `Stream` |
| `generate(Supplier s)` | `Stream` | `Stream` |
| `iterate

元記事を表示

Java Gold 例題 アノテーション

次のコードについて正しい選択肢を選んでください。

“`java
@SafeVarargs
void method(List… str) {
System.out.println(str.length);
}
“`

1. このメソッドで可変長引数の警告が抑制される
1. このメソッド及び呼び出し先で警告が抑制される
1. このメソッドは引数なしで呼び出すことはできない
1. コンパイルエラー
1. 実行時例外
1. このアノテーションはメソッドのみ適用できる

解答

4. コンパイルエラー

– `@SafeVarargs`アノテーションは`private`, `final`, `static`のうち、1つ以上修飾されたメソッドにしか付与できません。
– コンストラクタとメソッドに使用できます。
– 引数が可変ではなく固定長引数の場合もコンパイルエラーです。
– 呼び出し元の警告も抑制されます
– 可変長引数は引数なしでも呼び出し可能です(例: `public static v

元記事を表示

#42 SOLID – Interface Segregation Principle

### Introduction

We have already introduced the first three principles of SOLID, and now let’s begin with the I – Interface Segregation Principle.

To revise the Liskov substitution principle, [go here](https://qiita.com/nxted_sapporo/items/b3282bd6473cb8925cfe).

### Interface Segregation Principle (ISP)

> No code should be forced to depend on methods it does not use

This principle is quite stright forward which means you should not put all the methods you need to a single interface. Splits

元記事を表示

Doma1からDoma2への移行: IterationCallbackの書き換え

# 概要

本記事は、Doma1 から Doma2 へ移行した際の調査メモである。

Doma2 で IterationCallback を用いた検索が禁止された。`java.util.stream.Stream` を用いた検索に書き換えるよう公式ドキュメントで指示があり、最低限の変更で対応する方法を調査したので、具体例を示す。

本記事が対象とするのは、検索結果に対して単純なループ処理を行うものである。IterationContext に対して何か操作をしているようなコードではない。

# 書き換え前: Doma1 でのコード

Doma1 でのコードは https://doma.seasar.org/reference/query/select.html より引用。

## DAO インターフェース

“`java
@Select(iterate = true)
Void selectByNameAndSalary(String name, BigDecimal salary, IterationCallback callback);
“`

#

元記事を表示

implementation ‘io.realm:android-adapters:4.0.0’ を削除

最近、MacBook を買い換えたので Git から新しい端末へ Android アプリのプロジェクトをクローンしてビルドしています。その時に古い Android アプリのビルドが失敗してしまいました。エラーを見ると ‘io.realm:android-adapters:4.0.0’ がダウンロードできないようでした。
>Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find io.realm:android-adapters:4.0.0.

io.realm:android-adapters のために jcenter() を残していましたが、検索すると GitHub から Java ファイルをプロジェクトへ追加すればいいよ的なコメントを見つけました。

+++Webサイト抜粋+++
The Realm Adapters dependency is not moved to Maven yet. You can directly copy the RealmRecycle

元記事を表示

UnknownHostExceptionsを発生させる

# 初めに
この記事では、意図的に UnknownHostException を発生させる環境を作り出す方法について調査した結果を共有します。これにより、ネットワーク設定やDNSに関連する例外が発生する状況を再現できます。

# 手順
## 1. JavaでS3へのファイル配置プログラムの作成
以下は、S3バケットにファイルをアップロードするシンプルなJavaプログラムです。UnknownHostException を発生させる実験に使用します。
“` java
try {
var filename = //ファイル名
var region = //AWSのRegion
var bucket = //バケット名
S3Client s3 = S3Client.builder().region(region).build();
PutObjectRequest putOb = PutObjectRequest.builder().bucket(bucket).key(filename).build();

元記事を表示

【初心者向け】読みやすい単体テストを書くコツ

今回の記事では、読みやすい単体テストを書くコツ について書こうと思います。

# 対象読者層
– 単体テスト(テストコード)を書き始めたばかりの方
– 単体テストを何から書けばよいのかわからない方
– 単体テストのコードが複雑で可読性を上げる方法を模索している方

# 読みやすい単体テストを書くコツ
## AAAパターンを意識しよう

AAAパターンとは、単体テストの構造を意味しています。
それぞれの意味は以下。
– 準備(Arrange)
– 実行(Act)
– 検証(Assert)

つまり、すべての単体テストは、準備→実行→確認 の順にフェーズが進んでいきます。
BMIで肥満かどうかを診断するメソッドに対するテストコードを例にしてみましょう。
(BMIは[体重(kg)]÷[身長(m)の2乗]で求めることできます。)

**テスト対象コード**

“`java:BMICalculator.java
public class BMICalculator {
public static String diagnosisBMI(double weight, double hei

元記事を表示

SpringBoot SQLServer+JDBC @Transactional(readOnly=true)が効かない

# はじめに
SpringBoot SQLServer+JDBCにおいて、`@Transactional(readOnly=true)`の設定が効かずに、
普通にそのままUpdateされてしまった。

# 前提知識
Springトランザクションについては下記がすごい分かりやすい

`readOnly=true`について

https://docs.spring.io/spring-data/relational/reference/jdbc/transactions.html

javadoc
https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html#readOnly()

# 先に結論

このメソッドは、SQL Server 用

元記事を表示

【SpringBoot】@Sqlをテストクラス初期化前の1回だけ実行する

# TL;DR
`executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS`を指定することで、`@Sql`をストクラス初期化前の1回だけ実行するように指定できます。

https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/jdbc/Sql.html#executionPhase()

# 本文
`@Sql`(`org.springframework.test.context.jdbc.Sql`)は、デフォルトではテストメソッドそれぞれの実行直前に実行されます。
この挙動は`executionPhase`を指定することで変更できます。

## 指定可能なモード
テストメソッド実行前後とクラス実行前後の4つが選べます。

https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframewor

元記事を表示

ラムダ式の練習でstreamAPIをちょっと再現する

## ラムダ式・streamAPIとの出会い
最近までは,大量のデータを成形するときは迷わずfor文,while文(もしくはIterator)で処理していました.
実際のコードではないですが,代わりに犬の名前のリストから10歳以上の犬の種類のリストを取得する処理を書いておきます.
“`java
List dogTypes = new ArrayList<>();
//dogNames:犬の名前が入った List
for(String dogName : dogNames){
Dog dog = //DBからdogエンティティの取得;
if(dog.getAge() >= 10){
dogTypes.add(dog.getDogType());
}
}
“`
~~SQLで対処できそうなのは置いといて,~~
こんなコードを書いて満足していましたが,友人からもっと格好良い処理があると言われ彼のコードを見ると…
“`java
List dogs = //DBから全てのdogエンティティの取得;
//do

元記事を表示

[Android その4] Androidのアプリケーションの基本開発

# Intentの実装
Intentは、Androidアプリケーション内で操作やデータを他のアプリケーションやアクティビティに送信するためのメカニズムです。Intentを使うことで、異なるコンポーネント(アクティビティ、サービス、ブロードキャストレシーバーなど)の間で情報をやり取りしたり、特定のアクションを開始したりすることができます。

__Intentには大きく2種類あります__ :
1\. 明示的Intent:
* 特定のアクティビティやコンポーネントを直接呼び出すために使用します。
* 例:現在のアクティビティから別のアクティビティを開始する。

2\. 暗黙的Intent:
* アクションの内容を指定し、それを実行できるコンポーネントをAndroidシステムが選択します。
* 例:写真を撮るアプリや、電話をかけるアプリを起動する。

# メモリアプリへのIntent追加
## 明示的Intent
例えば、メモアプリで新しいメモを追加する際に別のアクティビティを開く場合に、Intentを使用できます。これにより、メインアクティビティから新しいアクティビティへデータを渡すことがで

元記事を表示

10/3に『Javaエンジニアのためのソフトウェアテスト実践入門』を出版します(+同内容Udemyコースのお知らせ)

### 自己紹介

皆さん、こんにちは、Udemy講師の斉藤賢哉です。私はこれまで、25年以上に渡って企業システムの開発に携わってきました。特にアーキテクトとして、ミッションクリティカルなシステムの技術設計や、Javaフレームワーク開発などの豊富な経験を有しています。様々なセミナーでの登壇や雑誌への技術記事寄稿の実績があり、また[「アプリケーションアーキテクチャ設計パターン」](https://amzn.asia/d/9avaCyF)といった書籍も執筆しています。

### ソフトウェアテストに関する書籍を出版します

今般、技術評論社様から『Javaエンジニアのためのソフトウェアテスト実践入門』~自動化と生成AIによるモダンなテスト技法~を出版することとなりました。発売日は10/3ですが、Amazonでは先行予約が開始されています。

表紙は最終調整中ですが、こんな風になる見込みです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

OTHERカテゴリの最新記事