- 1. 初めに
- 2. 循環参照エラーについて
- 2.0.1. なんか迷った
- 2.0.2. ミッションクリティカルなJavaアプリケーションのためのBrowsium Catalyst vs CheerpJ in Chrome
- 2.0.3. ABC320A~Eの解答[Java]
- 2.0.4. ABC319A~Eの解答[Java]
- 2.0.5. ABC318A~Eの解答[Java]
- 2.0.6. JDKのインストール
- 2.0.7. Java の SSLSocket 生成時に Underlying socket is not connect. が発生する
- 2.0.8. Java 21新機能まとめ
- 2.0.9. Javaで「乱数を生成する」の動作を確認してみた
- 2.0.10. 突然Apache JMeterの独自サンプラのプラグインを作って負荷試験する必要になったときに読む記事
- 2.0.11. Spark on k8s 概要と機能
- 2.0.12. Java Silver勉強メモ
- 2.0.13. デザインパターン Compositeパターン
- 2.0.14. スッキリわかるJava入門 実践編 第3版 まとめ – part3 -関数とラムダ式
- 2.0.15. Azkabanというジョブスケジューラーを最新(4.x)にアップデートするまでの作業メモ
Spring Data JPA を利用中に思い付いたことのメモ
## 概要
Spring Data JPAを開発に使用していて気づいた、アイデアというほどでもない諸々のメモです。
陳腐化するのも早そうですが、自分の備忘用にも今後追記していくと思います。
念のため、対象になるバージョンも小見出しとして付記しておきます。## `@Query`で頻出する句は文字列定数で管理する
###### ver.2.x
`@Query`はメソッド単位のため、同じ記述を複数のメソッドに行わなければならないケースが出てきます。
典型的な例が集計結果をProjectionでDTOにデータを格納する場合の`select new packages.DTO(…)`など。そういう場合はクエリ用のヘルパークラスかDTOに文字列の定数として頻出句を定義してしまうのが良さそうです。Specificationを定義していたらその中も良さそうですね。
アノテーションに指定するクエリはその時点では文字列でしかなく、定数はIDEが内容を表示してくれるので確認も困りません。当然ながら、誤記の危険も減りますし、変更への対応も楽になります。
JDBC勉強備忘録(Insert文)
## 備忘録目的
DAOに関しての自分が認識していることの確認と躓いたところや調査方法、仮定したことなど、過程を記録する。
(技術的なことはサイトのリンクを貼る)## 環境
OS:macOS 12.5.1
IDE:Eclipse IDE for Enterprise Java Developers.
Version: 2019-12 (4.14.0)
Build id: 20191212-1212
DB:Ver 8.0.32 for macos12.6 on x86_64 (Homebrew)
クラスパス:mysql-connector-j-8.0.32.jar
その他:本文に追記# 本文
## 値の設定
“`Java:/Sample_4/src/j4_02/Sample4_02_1_Common_DAO.java
//——————————————-
//SQL文の送信 & 結果の取得
//——————————————-//発行す
Javaで「三角関数に関する計算を行う」の動作を確認してみた
# 概要
Javaで「三角関数に関する計算を行う」の動作を確認してみました。以下のページを参考にしました。
https://www.javadrive.jp/start/math/index9.html
# 実装
以下のファイルを作成しました。
“`JSample9_1.java
class JSample9_1{
public static void main(String[] args){
System.out.println(“sin30° = ” + Math.sin(Math.PI / 6));
System.out.println(“sin45° = ” + Math.sin(Math.PI / 4));
System.out.println(“cos60° = ” + Math.cos(Math.PI / 3));
System.out.println(“cos45° = ” + Math.cos(Math.PI / 4));
System.out.println(“tan60° = ” + Math.tan(Math
[GCP] Workflows機能x実装
# GCPのWorkflowsについて
GCPのWorkflowsは、タスクの実行と制御のための単純で柔軟な実行環境です。このサービスを使用することで、異なるサービスやAPIの呼び出しや、条件に基づいた制御フローの定義が可能。
## 機能
### 1. ワークフローの定義と制御
GCPのWorkflowsでは、YAML形式でワークフローを定義することができる。この定義には、各タスクの手順と条件、依存関係などを設定する。また、複数のタスクを直列に実行したり、並行して実行したりすることもできる。
### 2. サードパーティのAPIとの連携
Workflowsは、様々なサードパーティのAPIとの連携をサポートしている。RESTやgRPCで公開されたAPIを使用する場合、タスクとして呼び出しを追加することができる。また、自動的に再試行やエラーハンドリングを行ってくれるため、信頼性の高いAPI呼び出しを簡単に実現することができる。
### 3. 高度な制御フロー
Workflowsでは、条件に基づいた処理や反復処理を簡単に定義することができる。たとえば、ある条件が成立した場合の
Spring Securityでログイン機能の実装中に起きた循環参照エラーについて (DIやDIコンテナについて解説あり)
|目次|
|—|
|[初めに](#初めに)|
|[循環参照エラーについて](#循環参照エラーについて)|
|[DIやDIコンテナについて](#diやdiコンテナについて)|初めに
これは、Spring Securityを使用したログイン機能の実装を勉強していた時に発生しました。以下のサイトを見ると似たようなところで躓いている人が多いようです(私もその一人(〃ノωノ))。今回は実際に自分が起こした循環参照のエラーを例にその対処法について解説したいと思います。
https://shiron-program.hatenablog.com/entry/2022/08/13/003608
https://qiita.com/TaikiTkwkbysh/questions/3d6e8f28174c3dfcb755
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11277744801
循環参照エラーについて
なんか迷った
“`UserDao.java
ListgetUsers();
“`このメソッドの戻り値を考えてみると、この2つになる。
* インスタンス
* nullDBの問い合わせで0件だった場合は、nullが返ってくる。
設定の変更をすればインスタンスを返すこともできる。
設定の変更しても問題ないように、すべきだと思ったのでnullチェックをする条件分岐を追加していく。
修正箇所多すぎ、しんどすぎ“`問題ありロジッククラス.java
@Inject
private UserDao userDao;public List
getAdminUsers() {
final Listresult = new ArrayList<>();
final Listusers = this.userDao.getUsers(); for (User user : users) { //<- ここヌルポ switch ( user.getRole() ) { case U
ミッションクリティカルなJavaアプリケーションのためのBrowsium Catalyst vs CheerpJ in Chrome
![Browsium-Vs-CheerpJ-1024×578.png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3486144/901a5961-6aad-7501-1b5d-093a3e862cdc.jpeg)
来月、Microsoftは長寿ブラウザであるInternet Explorerのメインストリームサポートを終了する意向であり、Windows 11上のIE11デスクトップアプリケーションは無効になる。しかし、一部のアプリケーション、特にJavaアプレットをベースとしたアプリケーションは、インターネットエクスプローラーでのみ確実に動作し、Chrome Enterpriseユーザーは[GoogleのLegacy Browser Support (LBS)](https://support.google.com/chrome/a/answer/9270076?hl=en)を介してこれらのコンテンツにアクセスします。
![1Chrome-LBS-Infographic-4-300×157.pn
ABC320A~Eの解答[Java]
## はじめに
今回はEまでコンテスト中に解けたのでそれをそのまま載せようと思います。なお、僕のライブラリは[提出結果](https://atcoder.jp/contests/abc320/submissions?f.Task=&f.LanguageName=Java&f.Status=AC&f.User=viral)よりご確認ください。
では、見ていきましょう。## A – Leyland Number
問題文は[こちら](https://atcoder.jp/contests/abc320/tasks/abc320_a)for文で愚直に求めました。
“`A.java
final class Main {private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner( System.in );
private static final SimpleWriter out = new SimpleWriter( Sy
ABC319A~Eの解答[Java]
## はじめに
今回のは所用で出られなかったので後日解いたものをEまで載せようと思います。なお、僕のライブラリは[提出結果](https://atcoder.jp/contests/abc319/submissions?f.Task=&f.LanguageName=Java&f.Status=AC&f.User=viral)よりご確認ください。
では、見ていきましょう。## A – Legendary Players
問題文は[こちら](https://atcoder.jp/contests/abc319/tasks/abc319_a)改行を全部空白に直してsplitして全探索しました。
“`A.java
final class Main {private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner( System.in );
private static final SimplePrinter out = ne
ABC318A~Eの解答[Java]
## はじめに
今回はコンテスト中にEまで解けたのでそれを載せようと思います。なお、僕のライブラリは[提出結果](https://atcoder.jp/contests/abc318/submissions?f.Task=&f.LanguageName=Java&f.Status=AC&f.User=viral)よりご確認ください。
では、見ていきましょう。## A – Full Moon
問題文は[こちら](https://atcoder.jp/contests/abc318/tasks/abc318_a)一回以上見られるかどうかで場合分けして解きました。
“`A.java
final class Main {private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner( System.in );
private static final SimplePrinter out = new SimplePrinter
JDKのインストール
# はじめに
JDKをインストールした時のログです。https://docs.oracle.com/en/java/javase/20/install/installation-jdk-linux-platforms.html#GUID-ADC9C14A-5F51-4C32-802C-9639A947317F
以下のOracle Linuxにインストールします。
“`
$ cat /etc/oracle-release
Oracle Linux Server release 8.8
“`# ダウンロード
ここでは`/usr/java`配下にインストールします。
“`
$ sudo su –
# mkdir /usr/java
# cd /usr/java/
“`以下のサイトから環境に合ったバイナリーをダウンロードして、展開します。
https://www.oracle.com/java/technologies/downloads/
“`
# wget https://download.oracle.com/java/21/latest/jdk-21
Java の SSLSocket 生成時に Underlying socket is not connect. が発生する
### 背景
* Socket から SSLSocket を生成しようとした際、はまった。
* つまらないことだった・・・・。### 解決
* `new Socket()` をした後に、`socket.connect` を実行しなければならない。
* `new Socket()` しただけでは接続されないから、そりゃあ接続できないエラーが出ますわな….
Java 21新機能まとめ
Java 21が2023/9/19にリリースされました。
https://mail.openjdk.org/pipermail/jdk-dev/2023-September/008267.html
[The Arrival of Java 21!](https://inside.java/2023/09/19/the-arrival-of-java-21/)LTSであり、パターンマッチングや仮想スレッドが正式化され、プレビューとして入ったString Templatesや無名クラス&インスタンスメインメソッドも面白い機能なので、大切なリリースになっていると思います。
詳細はこちら
[JDK 21
Javaで「乱数を生成する」の動作を確認してみた
# 概要
Javaで「乱数を生成する」の動作を確認してみました。以下のページを参考にしました。
https://www.javadrive.jp/start/math/index8.html
# 実装
以下のファイルを作成しました。
“`JSample8_1.java
class JSample8_1{
public static void main(String[] args){
for (int i = 0 ; i < 10; i++){ System.out.println((int)Math.ceil(Math.random() * 5) + 5); } } } ``` 以下のコマンドを実行しました。 ``` $ javac JSample8_1.java $ java JSample8_1 6 10 9 8 7 10 6 7 7 8 ``` # まとめ 何かの役に立てばと。
突然Apache JMeterの独自サンプラのプラグインを作って負荷試験する必要になったときに読む記事
# 対象読者
– Apache JMeterを使った負荷試験の計画を練っている最中、既存のサンプラだけでは不十分な状況に陥ったので、独自のサンプラをサッと書きたい。
– Javaはなんとなく読み書きできるけど詳しくない。Javaのビルド設定の仕方が分からない。# この文章について
Apache JMeterで独自サンプラをJavaでサッと書くための手順を説明します。Javaに詳しくない人向けの文章であるためビルド設定などを重点的に説明します。
JMeterのサンプラの内、**JavaSampler**向けのプラグインを記述します。
## 手順
### 1. InteliJ IDEAのインストール
普段Javaを書かない方、Javaの統合開発環境である[InteliJ IDEA](https://www.jetbrains.com/ja-jp/idea/)をインストールしましょう。無償版と有償版があります。(筆者はJetBrainsのAll in packを購入していますが、無償版でも充分かと思います。)
以下、IntelliJ IDEA 2023.2.2を前提に記述
Spark on k8s 概要と機能
## Spark on k8s 概要と機能
Apache Sparkは、大規模データ処理のためのオープンソースのクラスター分散処理フレームワーク。Spark on Kubernetes(通称Spark-Kubernetes)は、Kubernetes上でSparkアプリケーションを実行するための専用の機能セット。以下にSpark-Kubernetesの概要と主な機能を詳しく説明する。
### Spark-Kubernetesの概要
Spark-Kubernetesは、SparkアプリケーションをKubernetes上で実行するための統合プラットフォームであり、以下のような特徴を持っている。
– クラスターマネージャーの代わりにKubernetesを使用してSparkアプリケーションをデプロイ、管理、スケジュールする。
– Kubernetesのリソースマネージャーとしての機能を利用して、Sparkのタスクスケジューリングとリソース割り当てを行う。
– Kubernetesクラスタ上で複数のSparkアプリケーションを同時に実行し、異なるアプリケーション間でリソースを共有する。
Java Silver勉強メモ
# 最初に
Java Silver 勉強のメモを記していきたいと思います。
間違いなどありましたら教えていただけると幸いです。
随時更新していきます。## 同名のローカル変数とフィールドがある場合
同名のローカル変数とフィールドがある場合、this を使ってフィールドであることを明記しないとローカル変数が優先されます、
そのため下記では test メソッドを実行しても num フィールドの値は変更されません。“`java
public class Main {
private static int num;
// static初期化子
static {
num = 10;
}
static {
num = 20;
}static void test(int num) {
num = num * num; // ここで参照しているnumは引数のnum
}public static void main(String[] args) {
test(
デザインパターン Compositeパターン
# Compositeパターン
ツリー構造のオブジェクトを階層の深さに関わらず一律に扱うためのデザインパターン。個々のオブジェクト(葉、**リーフ**、Leafと呼ばれる)と複合オブジェクト(複合、**コンポジット**、Compositeと呼ばれる)を同一視し、クライアントが両者を同じように扱う。
ツリー構造を構成する要素は**ノード**、Nodeと呼ばれ、子要素を持たない要素をリーフ、Leafと呼ぶ。
**Iteratorパターン**を内部で使用することで実現する。
## 透過性
透過性とは、コンポーネントが他の部分に対して内部の実装を隠し、簡潔で使いやすいインターフェースを提供することを指す。Compositeパターンでは、クライアントは扱う対象がノードなのか、リーフなのかを意識しなくて良い(クライアントからは見えない=透過)。
+ **情報の隠蔽(Information Hiding)**
内部の実装、データ構造などの詳細部分を他のコードから隠蔽すること。外部に対しては、必要な情報だけが公開され、内部の実装の変更が外部に影響を与えないようになる。+ **インタ
スッキリわかるJava入門 実践編 第3版 まとめ – part3 -関数とラムダ式
# はじめに
こんにちは ◤●ㅅ●◥ノ今回は関数とラムダ式について学びました!
## 第3章 関数とラムダ式
### 1.関数オブジェクトプログラミング言語において、プログラムの実行中に生み出したり、変数に代入したりできるもの
→ __第1級オブジェクト__第1級オブジェクトとは以下に挙げるようなものたちのこと
・データ(数値や文字)
・データ構造(配列や構造体)
・インスタンスまたその3種類以外にも関数が存在する
→第1級オブジェクトとして扱う関数を特に関数オブジェクトと表現する:star: Java世界における関数とは…
何らかの情報(Input)を引数として受け取り、
何らかの処理(Process)を行い、
何らかの結果(Output)を戻り値として返す、ひとかたまりの処理ロジック関数とメソッドの違い
1.メソッドはクラスに属する一種の関数である
2.関数にとって名前は重要でなく、必須ではない### 2.関数の代入
:pencil2: 変数へのメソッド参照の格納
`変数名 = クラス名::そのクラスの静的メソッド名`
`変数名 = インスタンス変
Azkabanというジョブスケジューラーを最新(4.x)にアップデートするまでの作業メモ
今回私が担当しているAzkabanのバージョンアップが必要になったため、
アップグレードするための検証と作業メモを投稿します。## はじめに
私が担当したAzkabanは、10年近く前に構築されたものであり、使用しているバージョンは2.5.0でした。
最初に他のジョブスケジューラーの検討や、バージョンアップ以外の対応も検討しましたが、
アップグレードで対応するのが最も簡単であると判断しました。
また、古いバージョンのシステムが今まで動いていた実績もあり、構成を変えたくないという気持ちもありました。
Azkabanの機能については、[公式](https://azkaban.github.io/)を確認ください。## なぜバージョンアップが必要になったか
主な動機は、以下の2点です。– 動作している2.5.0ではメール送信時にTLSの設定ができなかったため、バージョンアップすることで対応できると考えました。
– 3.x系にするのも、4.x系にするのも大したコストの差がないため、最新版にすることにしました。## 調査
### AzkabanはTLS対応しているのかを調べ