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

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

JavaでPDFをSVGに変換

SVGとは「Scalable Vector Graphics( 拡大縮小可能なベクター画像)」を意味し、2ビットのベクター画像用に設計されたファイル形式です。ベクターグラフィックには、鮮明さを保ちながら自由に拡大縮小できるなど、多くの利点がある。SVG、PDFはすべてベクターグラフィックスのファイル形式である。 したがって、PDFがSVGに変換されたときに、その中の要素はほとんど失われません。 この記事では、Javaプログラムで**PDFをSVGに変換**する方法を紹介します。

– **[各PDFページをSVGファイルに変換](#各pdfページをsvgファイルに変換)**
– **[すべてのPDFページを1つのSVGファイルに変換](#すべてのpdfページを1つのsvgファイルに変換)**

この記事の変換方法では、無料のAPIであるFree Spire.PDF for Javaを使用する必要があります。[Free Spire.PDF for Javaの公式ウェブサイト](https://www.e-iceblue.com/Introduce/free-pdf-for-java.ht

元記事を表示

CheerpJ 3.0rc1を発表:テストと改善にご協力ください!

![rectangle_large_type_2_4dd6199b1fa4b96b1d836a2a998a4bd1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3486144/44102ca2-b436-0c88-a172-a20f64193c4e.jpeg)
本日、最初のCheerpJ 3.0リリース候補、バージョン3.0rc1のリリースを発表できることを嬉しく思います。

過去何年もの間、私たちのチームは、Javaアプリケーション、アプレット、ライブラリをモダンブラウザ上で実行するためのソリューションであるCheerpJのために、全く新しいアーキテクチャの開発に精力的に取り組んできました。

# 主なハイライト
世界中の何百もの組織による長年のCheerpJ 2.xの実世界での利用を活用し、我々のブラウザベースのx86仮想マシンであるCheerpXの開発から学んだ多くの教訓を活用して、我々はCheerpJの全面的な書き直しを行いました。

* さようならAOT、こんにちはJITコンパイル: Che

元記事を表示

デザインパターン Stateパターン

# Stateパターン
オブジェクト指向プログラミングでは、人や物をオブジェクトとして表現する。

Stateパターンでは、**「状態」をオブジェクトで表現する**。

状態は`State`クラスとして表現され、`Context`クラスが保持し、その状態に基づく振る舞いをする。

状態遷移(次にどの状態へなるか)は、各`State`オブジェクト自身が知っている(設計方法により、`Context`オブジェクトが管理する場合もある)。

Stateパターンは、オブジェクトの振る舞いがその「状態」に依存し、状態が変化することで振る舞いも変わる場合に有用。このパターンを使用すると、状態に基づく条件文(if-elseなど)を減少させ、コードの保守性と拡張性を向上させることができる。

## シチュエーション
エアコンで温度の状態「低」「中」「高」を管理するものとする。

## Stateパターンを使用しない場合
状態をクライアント自身が管理している。

状態が増えるたびにクライアント側のコードの修正が必要。

状態の追加や変更に対して柔軟性が低い。

“`java:Main.java
// ク

元記事を表示

Spring Boot + Spring Data JPAは3.1.xだと動かないかもしれない

## 概要と結論の先出し
2023-11-24でSpring Boot2.7.xおよび3.0.xがサポート終了となりバージョンアップが必要となります。

ところがSpring Data JPAを選択しているアプリケーションの場合、3.1.xにバージョンアップすると、依存しているHibernate6.2.xにバグがあるためコードを改修しないと動かないかもしれません。
**Hibernate6.2(とそれに依存するSpringのバージョン)は使用するべきではない** と思われます。
いくつかの条件がわかりましたので、原因と回避策について共有します。

## 発生する事象
アプリケーションの起動させるとHibernateの初期化中にエラーが発生し、起動できない状態になります。下記はエラーの1例です。発生するエラーは他のエラーもあり得ます。

“`
java.lang.ClassCastException: class org.hibernate.mapping.BasicValue cannot be cast to class org.hibernate.mapping.ToOne

元記事を表示

Spring BootでExcel作成

## 概要

ApachePoiを利用してExcelファイル出力を行う。
通常はAbstractXlsxViewを継承したクラスを作成して、Excel出力を行う。
ただこの場合、レスポンスを返すときにExcelを作成しているので、出力に失敗した場合にController上でハンドリングできない。
以下では、AbstractViewを継承して、一部AbstractXlsxViewを踏襲したクラスを作成する。
またxlsにも対応させ、テンプレートのExcelファイルがある場合はこれも利用できるようにして、汎用的なクラスにしている。

## AbstractXcelView

“`Java
public abstract class AbstractXcelView extends AbstractView {

protected String templateFile;

private Workbook workbook = null;

public void createWorkbook(Map model, HttpServletReque

元記事を表示

FutureオブジェクトをCompletableFutureオブジェクトに変換する

Java5で追加されたFutureクラスは、未完了かもしれない非同期処理の結果を保持するクラスですがget()メソッドがあって完了までブロックするだけという低機能なものです。.thenなんちゃら() みたいな、完了時のコールバックを与えるということができません。これは非常に不便。

完了時のコールバックを .then 系メソッドで与えられるようになったのはJava8で登場したCompletableFutureクラスです。

では、CompletableFutureのように完了時コールバックを差し込みたいのに手元に受け取ったのがFutureオブジェクトだった場合はどうすればいいでしょう?

こんな簡単なコードで変換できます。

“`java
Future f = …
CompletableFuture cf = CompletableFuture.supplyAsync(f::get);
“`

元記事を表示

JavaSilverの試験で多分問われない演算子の話①

# はじめに
JavaSilverの黒本や紫本で下記のような図があり、個人学習でも実務でも出会ったことがなかった演算子があったのでまとめていきます。

![001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639462/749c9147-292d-bdcf-09d2-d89829ce2554.jpeg)

ちなみにJavaSilverの試験対策として問題をいくつか解きましたが、
筆者は本記事で紹介する演算子が登場する問題は見たことがありません。
そのため、知らなくても合格はできるはず。

# ビットを反転する演算子「~」
単項演算子のひとつ。
ビットを反転してくれます。
基本情報を学習したことがある人は思い出して欲しいのですが、
ビット反転とは「0」のものを「1」に。
もしくは逆のことを行います。
例えば、「1010」なら「0101」になります。

“`java:Hanten1.java

public class Hanten1
{
public static void ma

元記事を表示

【Android Studio】コピペで使えるWebViewの導入方法

# はじめに
Android StudioでWebViewを使いたいけど、使い方がよくわからないという人向けにコピペで使えるWebViewの導入方法を作成しました。本記事通りに作業を進めることで、Androidアプリ上でGoogle.comを開くことができます(言語はjavaを使用しています)。

# 導入方法

New Project -> Empty Views Activityを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/02601b1b-4ff8-d316-763e-f9f00580fa16.png)

以下の通りプロジェクト作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/d7b2b161-91c9-a5bd-de95-cb8f7ccfa67e.png)

res/layout/activity_main.xmlを以下の通り編集(画面上部

元記事を表示

SpringBoot でファイルダウンロード

SpringBootにて、ファイルをダウンロードするユーティリティメソッドを作ったのでメモとして残します。
引数は、ダウンロード対象のファイルパス、出力ファイル名、HttpServletResponseです。
Controllerの引数でHttpServletResponseを読み込むことで、これを利用することができます。

“`Java
/**
* ファイルダウンロード
*
* @param originFilePath ダウンロードファイルパス
* @param outputFileName 出力ファイル名
* @param response HttpServletResponse
*/
public static void downloadFile(String originFilePath, String outputFileName, HttpServletResponse response) {
String CONTENT_DISPOSITION_FORMAT = “attachment; filename=\”%

元記事を表示

初めてのアプリ製作過程をQiitaに記録していく

## はじめに
9月からJavaをProgateで学び始めた30代の初学者です。
目標はエンジニアデビューですが道のりは遠く険しそうです。
## 9月に学んだこと
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569128/f3422bd8-12c3-d77a-8a5a-d100dae975ee.png)

9月1日から始めたProgateのjavaコースを5日程で終えた後は、[スッキリわかるJava入門](https://amzn.asia/d/665RcEN “スッキリわかるJava入門”)を読みながら[北ソフト工房様](https://kitako.tokyo/lib/JavaExercise.aspx “Java 練習問題集”)のJava 練習問題集を一通りやりました。
その辺りで明らかに成長速度の鈍化と何をすれば伸びるのかわからなくなり、paizaラーニングでCランクの問題を解きながら、Progateの他の基礎的な講座を並行して受けることにしました。

## 学んだProgateの講

元記事を表示

JUNITテスト作っといてと言われたら…

## この記事の対象者
* 環境がPJ側ですでに用意されている
* JUnit未経験/JUnit初心者
* JUnitでテストをするってことは分かるけど、どうコーディングすればいいかわからない

### あなたが考えるべき流れ
#### 1. テスト対象のメソッドを理解しよう
 例えばテスト対象のクラスがServiceImplだった場合。
 ServiceImplには、呼ばれるべきpublicな __メインメソッド__ があり、その中で実行される __外部メソッド__ や __privateメソッド__ があるはず。

 テスト観点は
 ”__メインメソッド__ が __外部メソッド__ の結果に左右されず正常終了し、かつ、想定通りの異常終了をするか”
 である。
 なのでまずは動作を確認すべき __メインメソッド__ がどれであるかを把握しよう。

#### 2. 得たい結果を把握しよう
 JSON、ResultCode、インスタンス…etc
 テスト実行後にどのような結果が返れば終了か、文字列系であればどこかに控えておこう。

#### 3. MOCK(モック)とは何か知ろ

元記事を表示

spring

# Spring BootにおけるUTのプラクティス

## `@SpringBootTest`の弊害

## UTにおけるテストスコープの候補

元記事を表示

Oracle CloudWorld 2023探訪記

# はじめに
はじめまして!NTTデータの津野です!
今回初投稿になりますが、10月に現地参加した**Oracle CloudWorld 2023**の模様をお伝えします。
現地の雰囲気を知りたい方や来年以降参加される方の参考になればと思います。

※本記事はサービスや技術の話より雰囲気を中心にお伝えしています。
 発表されたサービスなどを知りたい方は以下のサイトなどを見てみてください。

https://blogs.oracle.com/oracle4engineer/post/ocw2023-ja

# Oracle CloudWorldとは
Oracle CloudWorld(OCW)とは、Oracleが毎年開催する最大規模のグローバルイベントです。今年は9月18日~21日の4日間、アメリカ・ラスベカスで開催されました。
キーノートを含む約1200のセッションや展示でOracleの最新情報が発信され、世界中から4万人以上、日本からも300人以上が参加したそうです。

https://www.oracle.com/cloudworld/

# ラスベカスへの道のり
日本からラスベカ

元記事を表示

JacksonでCSV書込み

CSVファイル作成のユーティリティメソッドを作ったのでメモとして残します。
引数には出力クラス、ファイルパス、追記フラグ、クォートフラグ(ダブルクォーテーションのありなし)、改行コードを用意しました。

“`Java
/**
* CSVファイル書込み
*
* @param CSV出力クラス
* @param filePath ファイルパス
* @param csvList CSV出力リスト
* @param appendFlg 追記フラグ
* @param quoteFlg クォートフラグ
* @param lineSeparator 改行コード
*/
@SuppressWarnings(“unchecked”)
public static void writeCsv(String filePath, List csvList, Boolean appendFlg, Boolean quoteFlg,
String lineSeparator)

元記事を表示

Windows 11 への Java 21 のインストール

「Java」は無料で使えるプログラミング言語です。Javaは企業アプリケーション、ウェブアプリケーション、モバイルアプリケーション、組み込みシステム、大規模なデータ処理など、さまざまな分野で利用されています。ここでは 18 歳の新入社員向けに Java のインストール方法を紹介します。

## Java を使う目的
Java は以下のような用途で使われます。

### デスクトップアプリケーション開発
Java は Windows、macOS、Linuxなどさまざまなプラットフォームで利用できます。それぞれの環境でデスクトップアプリケーションを開発するためのツールとして使用できます。

### モバイルアプリケーション開発
Android アプリケーションの開発に Java が広く使用されています。

### ウェブアプリケーション開発
Java はサーバーサイドプログラミング言語として広く使用され、大規模なウェブアプリケーションやサービスを構築するために利用されます。

## 主要な Java のインストーラ
Javaはオラクル社を中心に開発と保守が行われていますが、他の会社も異なる

元記事を表示

[GCP] Operations 機能x実装

# GCPのOperationsの概要と機能

GCP(Google Cloud Platform)のOperationsは、クラウドサービスの監視、管理、トラブルシューティングに用いられるツールです。Operationsを使用することで、アプリケーションやインフラストラクチャの健全性とパフォーマンスを維持し、サービスの可用性を向上させることができます。

Operationsには以下のような機能があります。

## 1. ログの監視と分析
Operationsは、サービスやアプリケーションのログをリアルタイムに監視し、集約して表示します。さまざまなログソース(例:VMインスタンス、データベース、ネットワーキング)からのログを収集し、分析することで、重要な情報やエラーを素早く発見することができます。

## 2. ダッシュボードの作成
Operationsでは、カスタムダッシュボードを作成することができます。ダッシュボードには、重要なメトリクスやログデータを配置し、サービスのパフォーマンスをリアルタイムで可視化することができます。これにより、アプリケーションの動作状況を把握し、適切な対

元記事を表示

Java 言語仕様・JVM仕様のバージョンごとの差分を見れるページを作りました。

世界 30 億の Java エンジニア向けに、Java 言語仕様・JVM仕様のバージョンごとの差分を見れるページを作りました。

* [The Java Language Specification diffs](https://github.com/YujiSoftware/java_spec_diff)
* [The Java Virtual Machine Specification diffs](https://github.com/YujiSoftware/jvm_spec_diff)

ぜひご利用ください!

# なにこれ?

Java の各バージョンごとの言語仕様・JVM仕様はこちらのページで公開されています。
[Java Language and Virtual Machine Specifications](https://docs.oracle.com/javase/specs/index.html)

ただ、バージョンごとの変更点がありませんでした[^diff]。
そこで、各ページからテキストを抜き出して[^text]、GitHub 上で差分が見れるようにしました

元記事を表示

【Java Silver試験関連】クラスの継承とオーバーライド どのメンバが呼び出されるのか

この間、Java SE 11 Programmer I (1Z0-815-JPN) 試験を受けて合格しました。
試験範囲でややこしい部分があったので、どういう場合にどのメンバを呼び出すのかまとめました。

## クラスの継承の基本
まず、クラスの継承の基本です。以下のように`extends`をつけるとクラスが継承できます。
“`java
// 親クラス
class Parent {}

// 子クラス。Parentクラスを継承したChildクラス
class Child extends Parent {}
“`

基本的には子クラスには親クラスのメンバが引き継がれます。
(private修飾子がついているメンバは引き継がれません。
また、修飾子なし(デフォルト)の場合、パッケージが異なると引き継がれません。)

## オブジェクト生成の時の挙動
子クラスのオブジェクトは、親クラスとその差分のオブジェクト両方を合わせて子クラスのオブジェクトとしています。
子クラスのオブジェクトを生成するとき、親クラスのオブジェクトを生成してから差分のオブジェクトが生成されます。つまり、親クラスのコン

元記事を表示

SpringContainerを使った Singleton

Singleton自体は大丈夫だが、Springで使用するには以下のような問題点があった。
1. Singletonパターンを具現するコード自体が多く入る。
2. 依存関係上、クライアントが具体クラスに依存し、DIP、OCPに違反する。
3. 内部属性を変更したり初期化したりすることは難しい。
4. private生成者で子供クラスを作るのは難しい。

# Spring Container

以前のコード

“`java
package hello.hellospring.singleton;

public class SingletonService {

// 1。 static領域にオブジェクトを1つだけ生成しておく。
private static final SingletonService instance = new SingletonService();

// 2。 publicで開いてオブジェクトインスタンスが必要な場合、このstaticメソッドを通じてのみ照会することが

元記事を表示

IOCとDI

# IOC #
– Inversion of Control
– 既存のプログラムは、クライアント実装オブジェクトが自ら必要な実装オブジェクトを生成し、接続し、実行した。 一言で言って、実装オブジェクトがプログラムの制御フローを操作した。
– **AppConfigは制御フローに対する権限をすべて持って行き、具現オブジェクトは自分のロジックを実行する役割だけを担当する。** つまり、実際にどの実装オブジェクトが実行されるかクライアントは知らない。

# DI #
– Dependency Injection
– アプリケーション実行時点(ランタイム)に外部から実際の実装オブジェクトを生成し、クライアントに伝達してクライアントとサーバの実際の依存関係が連結される。

元記事を表示

OTHERカテゴリの最新記事