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

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

DB 更新メソッドの引数にて transaction object をオプション引数的に扱う方式案

# 概要
DB にクエリ発行するメソッドにおいて
– 外部から transaction object を渡してクエリを発行する
– transaction object の省略時はメソッド実行時に tranaction を作成してクエリを発行する

をシンプルに実現したい、というのが基本的なモチベーションとしてありました。
これを実現する方式をいくつか検討しました。

# 基本実装
User を取得するコードを考えます。transaction 内でデータ取得したい場合と、単純な参照系の機能などで transaction を意識せず取得したい場合があり、この両方を同じコードで対応したいです。

“`java
class UserRepository
{
public User findById(String userId, QueryCondition condition, Connection conn)
{
try (
Statement stmt = con.createStatement();
R

元記事を表示

StringBuilderとString型の違い -LeetCode Merge Strings Alternately使用

## 問題文
2 つの文字列 word1 と word2 が与えられます。 word1 から始めて交互に文字を追加して、文字列を結合します。ある文字列が他の文字列より長い場合は、マージされた文字列の末尾に追加の文字を追加します。

マージされた文字列を返します。

## 解き方 3つ
### コード① StringBuilderを使用しない 実行速度:13ms メモリー:42.82MB
“`java
class Solution {
public String mergeAlternately(String word1, String word2) {
String ans =””;
int index=0;
while(index < word1.length()+word2.length() ){ if(index < word1.length()){ ans += word1.charAt(index); }

元記事を表示

SpringBoot3でUsernamePasswordAuthenticationFilterを使うとセッションが落ちる

## はじめに
SpringBoot3.xにアップグレードするとログインできなくなるプロジェクトがありました。
本家のアップグレードのドキュメントを見ても特に変更漏れが無くハマった為、記載しておきます。
同一の症状が出ている人は参考にしてみてください。

## 環境

– SpringBoot 3.1.6
– Java 17
– spring-boot-starter-security
– spring-session-jdbc
– UsernamePasswordAuthenticationFilterクラスを使用して拡張

ログイン後DBにセッションは書きこまれていましたが、何故かログインすらできませんでした。

## 簡易修正方法
SecurityFilterChainにてHttpSecurityで設定できるrequireExplicitSaveにfalseを入れるだけです。
“`java
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http, AuthenticationManager a

元記事を表示

jpackageコマンドでfat.jarのインストーラを作成する

jpackageコマンドでfat.jarのインストーラを作成する方法を示します。

# ① 事前準備

Windows環境でjpackageを利用する場合、WiX 3.0が必要です。リリースページからwix311-binaries.zipをダウンロードして、PATHを通しておきます。

https://github.com/wixtoolset/wix3/releases

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/597cc2d6-2e5f-e487-8c5c-84101b416dbf.png)

# ② jpackageコマンドの実行

ディレクトリ構成は以下の通りです。HelloWorld-0.0.1-SNAPSHOT.jarが対象のfat.jarです。

“`
build
├─ exe
└─ lib
└ HelloWorld-0.0.1-SNAPSHOT.jar
“`

jpackageコマンドを実行します。

– インストール先のフォルダを指定する

元記事を表示

ナップサック問題を制約充足ソルバーを使って解く OptaPlanner チュートリアル

この記事は [FastDOCTOR After Advent Calendar](https://tech.fastdoctor.jp/entry/2023/12/29/092753) 26日の記事です。次の日の記事は [外注で初期開発したシステムを内製化するためにやったこと](https://zenn.dev/shirauix/articles/5459c5b6a2f7ee) です。

# 概要

ナップサック問題は比較的簡単な問題であって、特別な道具は必要ないのですが、あえてそういう問題を制約充足ソルバーで解くことによって、やさしく学ぶことができるのでは、と考えています。

FastDOCTOR Technologies のテックブログでは、 OptaPlanner について実践的なケースを紹介していますので、よければご覧ください。

[【最適化問題】「医療の往診サービスで、医師とドライバーのペアが特定のエリアを巡回する最善のルートを考えよ」をソルバープログラムで解いてみた](https://tech.fastdoctor.jp/entry/2023/05/19/195525)

元記事を表示

40代事務職Java面白い!6週間勉強してオブジェクト指向とGithub便利だなって思った

公式ドキュメントを読め!おじさんに疲れたので、じゃあ英語で読めるようにアメリカのオンライン大学のコンピューターサイエンス学部に2023年9月に入学しました。現在社会人学生です。
11月からプログラミングのJavaコース入門で勉強してます。

1週間のカリキュラム
使用しているテキスト※公式サイトで公開されているシラバスより引用してます
Introduction to Programming Using Java Version 9.0, JavaFX Edition
https://math.hws.edu/javanotes/index.html

公式サイト掲載シラバスよりhttps://www.uopeople.edu/become-student/prepare-for-uopeople/prepare-college-courses/programming-1-cs-1102-learning-materials/

– その週のテーマのテキストを読む
– その週テキストで学んだことを英語のエッセイ形式で書く
– 毎週プログラミングのコードを書く課題

こんな感じです。

元記事を表示

【Eclipse + Git・GitHub + EGit】15分でできるJavaプロジェクトのバージョン管理

# はじめに
本記事ではEclipseを使って作成したプロジェクトとGit・GitHubを連携してバージョン管理を行う方法を解説します。Git・GitHubを使ってみたいけどどうすればいいのかわからないという人向けの記事となっておりますので、参考にしていただければ幸いです。

# 前提条件
– Eclipseを使ったプロジェクト作成の方法を理解している
– GitHubのアカウントが作成されており、最低限の使用方法を理解してる

# 目次

1. [EGitの導入](#egitの導入)
1. [Git・GitHubとの連携](#gitgithubとの連携)
1. [commitとpushを行う](#commitとpushを行う)
1. [参考文献](#参考文献)

# EGitの導入

Eclipseを開いて画面上部のヘルプ→Eclipseマーケットプレースをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/52024e69-9a2c-32bf-0a98-e5a3

元記事を表示

整数リテラルの各進数表記と接頭辞の由来

# 整数リテラル(Integer Literals)における接頭辞
### 【さっそく】
下記のコードについてのコンソール出力値がどうなるのか考えてみましょう。
“`Java
class Prefixes {
public static void main(String[] arg) {
int x1 = 10; // 10 in decimal
int x2 = 012; // 10 in octal
int x3 = 0xA; // 10 in hexdecimal

System.out.println(x1);
System.out.println(x2);
System.out.println(x3);
}
}
“`

コンソール出力:
“`java
10
10
10
“`
出力値を見ると、どの変数にも整数として10が格納されていることがわかります。
なぜ初期値の記述が違うにもかかわらず、どの変数も10を格納しているのかというと
変数”x2”、

元記事を表示

コンパイルエラーと例外スローの違い

java silverの問題を解いてて、コンパイルエラーと例外スローどちらになるかわからなかったのでまとめてみた。

コードがコンパイルエラーになるか、例外をスローするかの基準

1. **コンパイルエラー(静的エラー)**:
– **定義と一致しない使用法**:変数や関数の定義に反する使用(例:存在しないメソッドの呼び出し、データ型の不一致)。
– **構文エラー**:プログラムの構文が言語の規則に違反している場合(例:セミコロンの欠落、括弧の不一致)。
– **解決できない参照**:使用されているが定義されていない変数や関数への参照。
– **アクセスレベルの違反**:privateやprotectedなど、アクセスできないメンバへのアクセス。

2. **実行時例外(動的エラー)**:
– **外部要因**:外部リソースの問題、ネットワークエラーなど。
– **無効な入力**:ユーザー入力や外部データソースからの予期しないデータ。
– **リソースの問題**:メモリ不足、ファイルシステムの問題など。
– **プログラムの論理エラー*

元記事を表示

Scannerの作成

1日に二本出してますね
更新頻度が極端…

今回はScannerを作ります。Lexerで分割したやつをmapに直すやつですね。
名前Scannerで合ってるかわからない

そんじゃ早速。
“`java:Scanner.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

public class Scanner {
public Map Scan(ArrayList list){
String functionName = list.get(0);
ArrayList args = new ArrayList<>();
boolean isString = false;
for(String element : list){
if(element.le

サンプル

# やることリスト
1. 挨拶
1. ほほおほ
1. 穂はおフォアhフォアhf
1. hふぁおwf

### コードブロック
“`java
//void method
public class Sample {
private String value;
public void setValue(String value) {
this.value = value;
}
}
“`

構文解析のやつ

みなさまお久しぶりでございます。
アドオンシリーズは更新していません()
また機会があれば更新しようかと思います(投げやり)

とりあえず自分用メモ
“`java:Lexer.java
public class Lexer {
private static final ArrayList list = new ArrayList<>(); // 結果
// 検知する文字とか
private static final List brackets = Arrays.asList(‘(‘,’)’,'{‘,’}’,'[‘,’]’);
private static final List operators = Arrays.asList(‘=’,’+’,’-‘,’*’,’/’);
private static final List strings = Arrays.asList(‘\”,'”‘);
private static final List

Spring Boot学習②~ログイン成功時・失敗時の処理~

前→https://qiita.com/19960417akiho/items/3fa636e6a26c371bcaa8

以下の動画を参考に、ハンズオン形式でSpring BootでWebアプリを制作していきます。

今回はPart6。
正しいペアのIDとパスワードを入力した際にはトップメニュー画面に遷移し、
誤ったペアのIDとパスワードを入力した際は、ログイン画面にその旨をテキストで表示します。

まずはトップメニュー画面のhtmlとコントローラーを用意します。

# menu.html&MenuControler.java

“`menu.html




トップメニュー


トップメニューだよ


“`

“`

Spring Boot on Embedded Tomcatでリダイレクト時のLocationヘッダーの値を相対パスに変更する

# バージョン
– Spring Boot 3.2
– Embedded Tomcat 10.1

> – 3.2以前のバージョンでもできる可能性があります。
> – JettyやUndertowでのやり方は検証していません。

# やりたいこと
デフォルトの状態では、リダイレクト時のLocationヘッダーは絶対パスになります(例: `https://a.example.com/dest`)。これは[Jakarta Servletの仕様](https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0#convenience-methods)らしいです。
しかし、クライアントとSpring Bootサーバーの間に複数ロードバランサーがあった場合、この挙動だとクライアントがうまくリダイレクトできない可能性があります。
なので、Locationヘッダーを相対パスにしたいです。

# 結論
“`application.properties
server.tomcat.use-relative-redirects

JdbcTemplateからJdbcClientに移行して嬉しかったこと2つ

# バージョン
– Spring Framework 6.1
– Spring Boot 3.2

# JdbcClientって?
Spring Framework 6.1(対応するSpring Bootは3.2)から`JdbcClient`インタフェースが導入されました。
内部的には`JdbcTemplate`および`NamedParameterJdbcTemplate`のラッパーです。
流れるようなインタフェース(Fluent API)が特徴です。

# Optionalが使いやすい
`JdbcTemplate`で主キー検索してその結果を何かのクラスの`Optional`にしたい場合、👇のようにちょっと面倒でした。

“`java:JdbcTemplateでOptionalを返す例
public Optional selectById(Integer id) {
try {
Hoge hoge = jdbcTemplate.queryForObject(“””
SELECT id, name

ポリモーフィズムが理解できてなかったのでまとめ

ポリモーフィズムは、異なるクラス(サブクラス)が共通のインターフェース(スーパークラスで定義されたメソッド)を持ちながら、それぞれ異なる振る舞いを実装することを指す。

例として、図形というスーパークラスがあり、四角形、円といったサブクラスがある場合を考える。これらのサブクラスは、図形クラスから継承され、面積を計算するという共通のメソッドを持つが、その計算方法はクラスによって異なる。

“`java
class 図形 {
double 面積を計算する() {
return 0;
}
}

class 四角形 extends 図形 {
double 幅;
double 高さ;

四角形(double 幅, double 高さ) {
this.幅 = 幅;
this.高さ = 高さ;
}

@Override
double 面積を計算する() {
return 幅 * 高さ;
}
}

class 円 extends 図形 {
double 半径

【Java】ConcurrentModificationExceptionから学ぶListと拡張for文の仕組み

## 始めに
業務中にConcurrentModificationExceptionが発生するケースに出会い、エラーについて調べていく中で勉強になったことがあったのでまとめてみました。

### この記事の対象者
・Javaの勉強をしている方
・ConcurrentModificationExceptionって何?と思っている方

## ConcurrentModificationExceptionとは
Java SE 11 & JDK11 Documentには以下のように定義されています。
>この例外は、オブジェクトの並行変更を検出したメソッドによって、そのような変更が許可されていない場合にスローされます。
たとえば、あるスレッドがCollectionで反復処理を行っている間に、別のスレッドがそのCollectionを変更することは一般に許可されません。 通常、そのような環境では、反復処理の結果は保証されません。
この例外は、オブジェクトが別のスレッドによって並行して更新されていないことを必ずしも示しているわけではありません。 単一のスレッドが、オブジェクトの規約に違反する一連のメソ

SpringBootでプロジェクト名変更

# この記事はこれの続き

https://qiita.com/waokitsune/items/83febc4a0518d7d346aa

# リファクタリング機能でリネーム

プロジェクト上で右クリック → 『Refactor』 → 『Rename』。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/893a52a3-845f-1997-6818-751e140a37f8.png)

demo → nekoに変えます。
『Update references』にチェック入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/7dbf009b-2a71-9c8a-a7a4-8e21b1f91088.png)

# ビルドエラーへの対応

リファクタリング機能でリネームしても下記のようなエラーになります。

> Project neko cannot be ren

【Java】プロパティの値が画面に表示されない(JSF)

# はじめに
JSFで初歩的な動きを確認しようとしたところ、`Managed Bean`のプロパティをバインドして表示してくれない事象が発生。解決方法をメモ。

:arrow_down: 要は`#{}`を使って画面に「Hello!」と表示したいのに、表示されない。

“`index.xhtml




FirstPage

Java log ログ ライブラリ

java.util.loggin

Log4j

Log4j2
https://logging.apache.org/log4j/2.x/

Logback (SLF4Jと組み合わせた利用を前提)
https://logback.qos.ch/

利用法
https://sukkiri.jp/loggers?via=devnote