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

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

【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

元記事を表示

IntelliJ IDEAでインポートをワイルドカードにまとめる設定を避けるべき理由とメリットについて

IntelliJ IDEAでは、インポートをワイルドカードにまとめる設定がある。

設定のやり方は
[IntelliJのリファレンスへGO](https://www.jetbrains.com/help/idea/creating-and-optimizing-imports.html)

先日、OSSのコミッターを行っている際にレビューで指摘されて、プライベートのPCでワイルドカードインポート設定になってしまっていたため、

下記にIntelliJ IDEAの
***【インポートをワイルドカードにまとめる設定】***
について、自分が思う避けるべき理由とメリットを記載しようと思う。

## ワイルドカードインポートを避けるべき理由

### 読みやすさの低下
ワイルドカードを使用すると、どのクラスが実際に使用されているのかが不明確になる。
特に大規模なコードベースでは、同じ名前のクラスが異なるパッケージに存在する場合があり、どのクラスがインポートされているのかがわからず、混乱を招く可能性がある。

### 静的解析やコード補完の問題
IDEの静的解析やコード補完の機能は、明示的なイン

元記事を表示

インポートされたjavax.servletは見つかりませんというエラー

EclipseでSpringBootでjavaファイルに以下をインポートしようとしてもうまくいきません
“`
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
“`

gradle.buildに、以下を追記して
“`
dependencies {
implementation ‘org.springframework.boot:spring-boot-starter-web’
// javax.servletの依存関係を追加
providedCompile ‘javax.servlet:javax.servlet-api:4.0.1’
}
“`
以下のコマンドで、gradleをリフレッシュしても解決しません
“`
./gradlew build –refresh-dependencies
“`

どのようにすればインポートできますか

元記事を表示

Webエンジニア「Kotlin」を学ぶ

現在Webエンジニアとして受託企業で働いているものです。
この度、転職を機にAndroidアプリエンジニアへキャリアチェンジをすることになったため、備忘録としてKotlinの学習記録を残すために投稿しています。
この記事ではKotlinとはどのような言語なのかということについてまとめています。

# Kotlinとは何か?
JetBrains社によって開発されたモダンなプログラミング言語。
2017年にGoogleからAndroid開発の公式言語として採用されており、Android開発において非常に人気が高い言語になっている。
また、マルチプラットフォームをサポートしており、JVM, Android, JavaScript, ネイティブ向けのコードをコンパイルすることができる。そのため、1つのコードベースから複数のプラットフォームに対応したアプリケーションを構築することができる。

# Kotlinの持つ特徴
### 静的型付け言語
– コンパイル時に型がチェックされるため、型安全性が高く、実行時のエラーリスクが減少し、信頼性の高いコードを書くことができる
– 型推論により、型を省略す

元記事を表示

Nothing Phoneの背面についてるライトをいじれるSDKが公開されてたので試す【Glyph Interface】Glyph Developer Kit

NothingPhoneの背面に無駄に搭載されているライト「Glyph Interface」をいじれるSDKが公開されていることを今日知りました

https://jp.nothing.tech/pages/glyph-developer-kit

https://github.com/Nothing-Developer-Programme/Glyph-Developer-Kit

Phone(2a)をメインで使用しているので試してみます

## 今回作ったもの

https://github.com/SousiOmine/GlyphInterfaceExample

## 環境
– Windows11 64bit 23H2
– Android Studio Koala Feature Drop 2024.1.2
– Nothing Phone(2a) 国内版
– Nothing OS 2.6

## セットアップ
プロジェクトはEmptyViewsActivityテンプレートから言語をJavaに、MinimumSDKはNothingPhone以外サポートする必要がないので、API31

元記事を表示

OTHERカテゴリの最新記事