JAVA関連のことを調べてみた2023年09月28日

JAVA関連のことを調べてみた2023年09月28日

Gradle x JavaをKotlinに浮気させる

こんにちは。 株式会社クアンドのhakatakinocoです。

私たちの会社では、遠隔支援で現場の判断を加速するSynQ Remote(シンクリモート)というサービスを開発しており、バックエンドをKotlinで作成しています。
いわゆるサーバーサイドKotlinです。

![synqremote_kotlin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193036/ba3e9107-53a8-fe61-3ca6-f6d50a151847.png)

JavaからIT業界に入門&修行し、JavaJavaの実を食べたJava人間になった私でもKotlinは扱いやすく、文法も簡素で可読性が高い
かつ、古くから受け継がれた大量のJavaライブラリがほぼ全て使える素敵な開発体験を得られました٩( ‘ω’ )و

そんな素敵なKotlinですが、いざサーバーサイドで使おうとすると意外と本格的な導入事例は少なく、ちょっと勿体無いな〜と思ったので `既存のJavaシステムにだって段階的にKotlinに置き換えてい

元記事を表示

Java JSON-P/JSON-BとJakarta JSON-P/JSON-B両方変換する

Javaの標準的なJSON APIはJava JSON-P/JSON-Bがありますが、新しいJakarta EEでは Jakarta JSON Processing/Jakarta JSON Bindingになっています。
両方対応するのはどうするの、ということで変換機能を作ってみました。
もともとABNF Parser から JSON Parserを練成していたので元はそこから拡張してJava EEの JSON-P APIに準拠させています。JSON-Bの方っぽい機能もそろってきます。
拡張していくと Jakarta EE対応どうするの、という壁があります。JDK 8とJDK 11でバイトコードも違うので分けないとJDK 8ないろいろも死んでしまいます。

直接変換してもいいのですが、JavaのList/Mapなど経由でいろいろ拡張できる構成にしています。
Java Object(List/Map), JSON-P (Class), JSON Processing (Class), JSONテキスト, CBOR YAMLその他もろもろの型をJDBCドライバのように拡張しながら使うこと

元記事を表示

【Java・学習ログ⑩】多態性について

教本に沿ってやってみたシリーズ、『第12章』。
≪使用教材≫スッキリわかるJava入門 第3版 スッキリわかるシリーズ

## 多態性の基本
あるものをざっくり分類したり、ざっくり捉える概念。
下記のように大まかな括りとして、HeroインスタンスをCharacter型に代入できる。
但し、ヒーロー=キャラクターのように絵に描いてみて嘘にならないもの。突拍子のない代入はエラーになる。

“`java
Character c = new Hero;
“`
下記はabstractを持つCharacterクラスを継承したWizardクラスを代入しようと試みようとしている例である。抽象クラスインタフェースはインスタンス化はできないが、型として使用することは可能だ。

“`java
Character c = new Wizard();
“`
ただし、子クラス独自のフィールドを呼び出そうとするとエラーが発生する。
![スクリーンショット 2023-09-26 210645.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws

元記事を表示

Javaで「日時を比較する」の動作を確認してみた

# 概要

Javaで「日時を比較する」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/calendar/index5.html

# 実装

以下のファイルを作成しました。
“`TestCalendar4.java
import java.util.Calendar;

class TestCalendar4{
public static void main(String args[]){

Calendar calendar1 = Calendar.getInstance();

System.out.println(“日時1を2006/05/08 09:45:10に設定します”);
calendar1.set(2006, 4, 8, 9, 45, 10);

Calendar calendar2 = Calendar.getInstance();

System.out.println(“日時2を2006/05/11 12:58:15に設定します”);

元記事を表示

Internet Explorer EOL – Chrome Enterpriseユーザーにとっての意味

![My-project-12.png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3486144/b8be997c-4983-7ec0-6c97-eb11e198d689.jpeg)

2022年6月、Microsoftは長寿ブラウザであるInternet Explorerのメインストリームサポートを終了する意向であり、Windows 11上のIE11デスクトップアプリケーションは無効になる。

しかし、一部のアプリケーション、特にJavaアプレットに基づくアプリケーションは、Internet Explorerでのみ確実に動作し、Chrome Enterpriseユーザーは、[Googleのレガシーブラウザサポー(LBS)](https://support.google.com/chrome/a/answer/9270076?hl=en)を介してこのコンテンツにアクセスします。

IEの無効化は、これらのアプリケーションへのアクセスを維持する必要がある企業のワークフローに大きな変化をもたらします。こ

元記事を表示

スッキリわかるJava入門 実践編 第3版 まとめ – part5 -非標準ライブラリの活用

# はじめに
こんにちは ◤●ㅅ●◥ノ

今回はライブラリについて学びました!

## 第5章 非標準ライブラリの活用
### 1.ライブラリとは
他人が利用することを想定した複数のクラスファイルの集まりのこと

ライブラリのようなひとまとまりの形で利用できるコンパイル済みのコード
→バイナリモジュールと呼び、ソースコードと対比して使われる

JAR…複数のファイルを1つにまとめる形式

### 2.クラスパス
クラスパス…Javaがクラスファイルをハードディスクから効率よく検索するために使うヒント

クラスパスの指定方法
1.環境変数CLASSPATHに宣言する
2.javacやjavaコマンド実行時に-cpオプションをつける
3.何も指定しないと、現在のフォルダ(.)を指定したとみなされる

### 3.Commons-lang
Commons-langとは
Javaのライブラリは多くの個人や団体が公開している
Commons-langはApacheソフトウェア財団が作っているライブラリの1つ

### 4.ログ出力ライブラリ
ログ…プログラムの実行中にファイルに書き出

元記事を表示

ABC321A~Fの解答[Java]

## はじめに
今回は参加できなかったのでコンテスト後に解いたものを載せようと思います。

なお、僕のライブラリは[提出結果](https://atcoder.jp/contests/abc321/submissions?f.Task=&f.LanguageName=Java&f.Status=AC&f.User=viral)よりご確認ください(ちなみにE、Fはライブラリを使用していません)。
では、見ていきましょう。

## A – 321-like Checker
問題文は[こちら](https://atcoder.jp/contests/abc321/tasks/abc321_a)

下一桁を見て条件を満たしていれば$10$で割るのを繰り返すことで全体が条件を満たしているか調べました。
“`A.java
final class Main {

private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner( System.in

元記事を表示

Application Load Balancer 配下の SpringBoot アプリケーションを暖機運転する

# 環境
– java: 17
– spring: 6.0.11
– spring-boot: 3.1.2
– spring-boot-actuator: 3.1.2

# きっかけ
ALB (Application Load Balancer) + ECS で Java アプリケーションを公開しているとき、スケールアウトのタイミングで応答時間が一時的に劣化する問題の対応として暖機運転を実装しました。

# 方針
ヘルスチェックには spring-boot-actuator のヘルスチェックエンドポイントを使っている前提とします。

– 暖機リクエストの実行タイミング
暖機リクエストの送信は、当然ながらアプリケーションがリクエストを受け付けられる準備が整ってから始めたいので、 Spring の `ApplicationReadyEvent` を `@EventListener` でハンドリングするようにします。

– ヘルスチェックのカスタマイズ
spring-boot-actuator では、独自の `HealthIndicator` 実装を追加することでヘルスチェックの内

元記事を表示

手順書管理Webアプリ作成

# はじめに
手順書が色々散らばってしまっているため、一括管理するためのWebアプリを作成する。
手順書はマークダウン記法で記述する。
将来的にはサーバーも立ち上げたいが自分には少し難易度があり時間がかかると思うので、とりあえずそれなりに形にするためにフロントエンドで完結する形で作成する。
手順書はデータベースを活用して管理したいが、とりあえずjsonファイルにべた書きで管理する。
個人利用のアプリであり、初心者が手探りで作っているため至らない点があると思うがメモとして使っていると思ってください。

・使用するライブラリ
jquery-1.8.0.js
marked.js

# 開発
### ディレクトリ構成
“`
/procedure-site

├── /src
├── /main
├── /webapp # ウェブアプリケーションのリソース
│ ├── /static # 静的ファイル (CSS, JS, 画像など)
│ │ ├── /c

元記事を表示

Spring AI覚え書き

# この記事について

本稿は、自分自身の学習のための、下記サイトからの自由な翻案です。

https://docs.spring.io/spring-ai/reference/concepts.html

# Spring AIのコンセプト

## モデル
AI モデルモデルは、大規模なデータセットからパターンと洞察を学習し、予測、テキスト、画像、その他の出力を作成します。Spring AI の当初の焦点は、**言語入力を処理し、言語出力を提供するモデル** (手始めとして、 OpenAIとAzure OpenAI) にあります。また、Spring AI は、**エンベディングをサポート**します。

## プロンプト
プロンプトは、AI モデルが特定の出力を生成するようにガイドする言語ベースの入力のファウンデーションとして機能します。
プロンプトとして使用される言語表現は AI モデルの応答に大きな影響を与え、応答を意図した方向に導きます。

このスキルの重要性が「プロンプトエンジニアリング」の出現につながりました。特定のユースケースに対する効果的なプロンプトが特定されると、コミ

元記事を表示

簡単SpringBoot,Thymeleafでページネーションを実装

# やりたいこと
下記のようにページネーション機能を実装する。
![ページネーション1 2023-09-26 .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3185982/e5460dbf-2184-9b6a-bb6c-4e81c407c97b.png)
![ページネーション2 103854.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3185982/9efe3c45-6cc3-42b2-c8ed-6ad6501b9628.png)

# 環境
springboot2.7.7
java 11
postgres

# 実装手順
①Entity
②Repository
③Service
④Controller
⑤Html

# ①Entity
“`java
@Entity
@Table(name = “goods”)
@Getter
@Setter
public class Goods {
@Id
@C

元記事を表示

Javaで「日時を加算/減算する」の動作を確認してみた

# 概要

Javaで「日時を加算/減算する」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/calendar/index4.html

# 実装

以下のファイルを作成しました。
“`TestCalendar3.java
import java.util.Calendar;

class TestCalendar3{
public static void main(String args[]){

Calendar calendar = Calendar.getInstance();

System.out.println(“日時を2005/12/30に設定します”);
calendar.set(2005, 11, 30);
dispCalendar(calendar);

System.out.println(“– — — — — –“);

System.out.println(“日を1ずつ増加させます”);
for (int i =

元記事を表示

Spring Securityの基本的な理解:Bean登録と認証・認可のイメージ解説

# はじめに
最近、Spring Securityでのログイン機能の実装方法に関して詳しく取り組んでいます。その中で得られた知見を元に、この記事では具体的な実装手順を省いて、Spring Securityを用いた実装の背後にあるコンセプトやイメージに焦点を当てて解説します。

具体的な実装方法については以下に記事を作成しました。参考にしてみてください。

– **開発環境の構築とログイン画面の実装について**

https://techchallengediaryth.com/java-springsecurity-login-part1/

– **入力されたユーザ名とパスワードを固定値の情報と照合する方法**

https://techchallengediaryth.com/java-springsecurity-login-part2/

– **入力情報をデータベースのユーザ情報と照合する方法**

https://techchallengediaryth.com/java-springsecurity-login-part3/

– **ログアウト機能の実装手法**

h

元記事を表示

オーバーロードとオーバーライド

## オーバーロード
* 同じ名前で引数が異なるメソッドを複数定義すること。
* 同一クラスで行われる。
“`java
public class Main{
public static void main(String[] args) {
Sushi s = new Sushi();
s.neta(“たまご”);
s.neta(“サーモン”,220);
s.neta(“いくら”,480,”北海道”);
s.neta(“ウニ”,800,”羅臼”);
}
}
class Sushi {
void neta(String name) {
System.out.println(name + ” 通常価格 110円”);
}
void neta(String name,int price){
System.out.println(name + ” 時価 ” + price+ “円”);
}
void neta(String name,int price,String area) {
System.out.println(ar

元記事を表示

ミニ生命保険システムを作成 S08

# 関連記事
https://qiita.com/Weekend/items/79a6a3fd69ba017e124c

# はじめに
Salesの中に、MainViewと依存サービスはどのようにデカップリングするのですか? 
今回は、CommandとCallBackを使ってMainViewをリファクタリングします。

“`java
@Route(“/main”)
class MainView extends VerticalLayout {

// bad smell
private SalesService salesService;
// bad smell
private ProductService productService;
// bad smell
private UnderwritingService underwritingService;
// bad smell
private ApplicationRecordRepository repository;

MainView(Sales

元記事を表示

Springアノテーションまとめ

# はじめに
自己学習として、springbootを学んでいます。「アノテーションって、すごい便利!」と感動しましした。と共に、たくさん種類があって、きちんと覚えないといけないという思いから備忘録として書くことにしました。100%完全理解ではなく、学習していく中で自分なりに重要だと思うものをピックアップして簡単な説明となっています。初心者なので、間違いがあればご指摘ください!
※随時更新予定

# Controller,Serviceに主に記述するアノテーション
# @Autowired
springが自動的に依存関係を解決し、対応するインタンスを注入する。ServiceやHttpSessionなど以下のように記述することでそのクラスのインタンスを使えるようになる。
“`
@Autowired
SampleService sampleService;
@Autowired
HttpSession session;
“`

# 主にControllerに記述するアノテーション
# @Controller
クラスに対してそのクラスをControllerとして認識する。

# @Re

元記事を表示

request という変数について

# **`request`**

**`request`** は、JavaのサーブレットやJSPなどのウェブアプリケーション開発で利用される特別なオブジェクトであり、HTTPリクエストに関連する情報へのアクセスができます。

これは、「暗黙オブジェクト」とよばれ、開発者が明示的に宣言する必要はありません。

具体的には、**`request`** オブジェクトは 「**`HttpServletRequest`** インターフェースのインスタンス」を指し示し、HTTPリクエストに含まれる情報へのアクセスを可能にします。
サーブレットコンテナやJSPコンテナが自動的に **`HttpServletRequest`** の「インスタンス」を生成し、それを **`request`** という変数に自動的にバインドします。

開発者は、この **`request`** 変数を利用して、HTTPリクエストからクエリパラメータやセッション情報、ヘッダなどの情報に簡単にアクセスでき、**`request.getParameter()`** などのメソッドを用いてクエリパラメータを取得することができます

元記事を表示

スッキリわかるJava入門 実践編 第3版 まとめ – part4 -JVM制御とリフレクション

# はじめに
こんにちは ◤●ㅅ●◥ノ

今回はJVM自体の制御に関わるAPIについて学びました!

## 第4章 JVM制御とリフレクション

### 1.JVM自体の制御
そもそもJVMとは…?
 Java Virtual Machineの略で、Javaのプログラムを動かすために必要なソフトウェアのこと

Javaには開発者がJVM自体の内部機構にアクセスして情報を得たり、
直接制御するためのAPIが存在する
JVM自体を制御するAPIについて学んでいく

### 2.JVMの終了
System.exit()を呼ぶとその場でプログラムを終了する
System.exitにはint型の引数を与えることができ、その数値が終了コードとしてOSに報告される
→多くのOSでは0は正常終了、0以外は異常終了を意味する

どのように使うのか
エラーの原因ごとに異なる終了コードを返してプログラムを終了するようにする
→バッチ処理が異常終了した場合の原因究明に使うことができる

### 3.外部プログラムの実行
java.lang.ProcessBuilderクラスを利用する
→自分が開発している

元記事を表示

Stream でインデックスと要素を扱いたい

## 目次
[1. はじめに](#1-はじめに)
[2. Java の for 文](#2-java-の-for-文)
[3. guava](#3-guava)
[4. 実装](#4-実装)
[5. まとめ](#5-まとめ)
[参考文献](#参考文献)

## 1. はじめに
### Java 100 本ノック、55 本目の応用。
業務で Java を使うので、[Java 100 本ノック](https://github.com/JustSystems/java-100practices)を使い学習をしています。[55 本目](https://github.com/JustSystems/java-100practices/tree/master/contents/055)の問題は、ファイルを読み 1 行の文字数を合計して出力するプログラムを実装するというものですが、応用として読んだ行に行番号をつけて別ファイルに書くプログラムを実装することにしました。

### Python の for 文では簡単にインデックスを扱える。
Java では、[`Files`](https://docs.

元記事を表示

Javaで「日時を設定する」の動作を確認してみた

# 概要

Javaで「日時を設定する」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/calendar/index3.html

# 実装

以下のファイルを作成しました。
“`TestCalendar2.java
import java.util.Calendar;

class TestCalendar2{
public static void main(String args[]){

Calendar calendar = Calendar.getInstance();

System.out.println(“現在の日時を設定します”);
dispCalendar(calendar);

System.out.println(“– — — — — –“);

calendar.set(Calendar.YEAR, 2005);
System.out.println(“年を2005年に設定します”);
dispCalendar(c

元記事を表示

OTHERカテゴリの最新記事