JAVA関連のことを調べてみた2021年10月12日

JAVA関連のことを調べてみた2021年10月12日

自分用メモ(追記用)

難しい言葉でまとめるのを心がける記事。

##Method##
≠関数
クラスに属するサブルーチン。
インスタンスメソッドと、staticを用いた静的メソッドがある。
0行以上の式文からなる。

元記事を表示

gRPC(Java)でヘッダを使って情報を連携する方法

諸事情でgRPCのヘッダを使って任意の値を連携したいので、連携方法を調べてみました。

# 結論!?

`ClientInterceptor`と`ServerInterceptor`を利用すれば実現できる!けどサーバ側はちょっと一工夫する必要がありそう。

# やりたいことは・・・

ざっくりだが・・やりたいことを絵にしてみると・・・こんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117313/a1859c48-be74-98cf-03e6-a8dac071be3f.png)

# Spring Bootで検証APを作ってみる

## 検証コード

* https://github.com/kazuki43zoo/grpc-interceptor-demo

## GrpcServer

サーバ機能の簡易実装クラス。

“`java
package com.example.demo;

import io.grpc.BindableService;
import io.g

元記事を表示

各ベンダーごとの Java17 バージョン情報

各ベンダーごとに、`java.exe –version` で表示されるバージョン情報をまとめました。

|ベンダー|名称|バージョン情報|
|:—|:—|:—|
|Amazon|Corretto|OpenJDK 64-Bit Server VM Corretto-17.0.0.35.1
(build 17+35-LTS, mixed mode, sharing)|
|BellSoft|LibericaJDK|OpenJDK 64-Bit Server VM
(build 17+35-LTS, mixed mode, sharing)|
|Eclipse Foundation|Temurin|OpenJDK 64-Bit Server VM Temurin-17+35
(build 17+35, mixed mode, sharing)|
|Microsoft|Microsoft Build of OpenJDK|OpenJDK 64-Bit Server VM Microsoft-26987
(build 17+35, mixed mode

元記事を表示

[Java]条件分岐について(初学者)

# はじめに
本記事では、Javaの繰り返し分岐について記述します。
本日よりJavaの学習を始めました。

# if文
## 例文(ifのみ)

“`java
int i = 100;
if (i == 100){
System.out.println(“True”);
}

// 「True」と表示されます。
“`

### 参考
#### データ型
以下参考サイトになります。
[基本のデータ型](https://www.javadrive.jp/start/var/index4.html)

|データ型|値|
|-|-|
|int|整数|
|boolean|true or false|
|double|小数点付きの数字|
|String|文字列|

#### System.out.println
以下参照ください。
[System.out.printlnとは](https://www.javadrive.jp/start/const/index8.html)
> System.out.println は標準出力へ引数に指定した値を出力する

## if+else文
もし、

元記事を表示

Processingを扱う

#はじめに
この記事ではJavaベースの言語、Processingを扱っていきます。Processingはデジタルアートを作成するための言語のようです。[Processingホームページ](https://processing.org/download)よりダウンロード可能です。
#基本
Javaなのでvoidを使用するべきですが、まずは基本ということで基本の書き方を紹介します。
##スケッチブックサイズの指定
サイズの指定はsize()を使用します。これを書くことでそのスケッチブックに描画することができます。
書き方:size(x,y);
Javaですから、命令分の終わりには;(セミコロン)をつけましょう。

>
“`java
size(500,500);
“`

##四角形を描画する
四角形を描画するにはrect()を使用します。
書き方:rect(x,y,width,height);

>
“`java
size(500,500);
rect(0,0,100,100);
“`

![スクリーンショット 2021-10-11 18.29.33.png](https://qi

元記事を表示

アノテーションの基礎知識(Java)

## はじめに

SpringやDomaを使っているとよく出てくるアノテーションですが、正確な役割などは
あまり理解せず、フィーリングで使ってきていたので基礎から立ち返りたいと思います。

## アノテーションとは?

`@Override`のように「`@` + 名前」のような形式で表現されるものを
`アノテーション`と呼びます。
これらをメソッドやクラスなどjavaのあらゆる機能に付けることで利用します。
アノテーションには以下のような役割があります。

**クラスやメソッドなどに対して補足的な情報を付け加えるためのもの。**

このように、あくまで補足的な情報を付け加えるためのものなので、アノテーションそれ自体に
なにか機能が含まれているわけではありません。
いわば、ソースコードのコメントのようなものです。
したがって、それだけでは処理的には何の意味もありません。

## アノテーションが必要な理由

それならば、どうしてアノテーションを付ける必要があるのでしょうか?
それはアノテーションと特定の機能を組み合わせることで、強力な機能を実現することができるからです。

– コンパイラ

元記事を表示

【UiPath】OrchestratorのAPIを使ってみる③~Javaから認証APIを叩いてみる~

# はじめに

前回まででOrchestrator APIの叩き方はわかったので、Javaから実行してみます。

## 余談

UiPath Orchestratorで月間スケジュールのようなものを出力したかったのですが、そういう機能がないんですよね。
(トリガーの画面で確認はできるが、レポート的に出力する機能がない)

かゆいところに手が届かないので、それを補完するためにJavaからAPI叩いて整形してレポート出力してみよう!というのが発端でした。

# 認証APIを叩いてみる

今回は認証APIを叩いて、Bearerトークンを取得するところまでを説明します。
JSONデータを作って、HttpClientでPOSTして、Bearerトークンを取得する、という流れになります。

## まずは投げるところまで

“`java:App.java
package jp.co.pmtech.iwata;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apac

元記事を表示

JEP 193: Variable Handles について

Java 9 で Variable Handles と呼ばれる新しい API が追加されました。これは Java 7 の [MethodHandle](https://docs.oracle.com/javase/jp/16/docs/api/java.base/java/lang/invoke/MethodHandle.html) を拡張し、クラス [java.lang.invoke.VarHandle](https://docs.oracle.com/javase/jp/9/docs/api/java/lang/invoke/VarHandle.html) でフィールドの変数や配列に対して強い型付けを持って参照ができます。ただし変数の参照だけでなく、Atomic 操作やリフレクションなどの操作に利用可能です。
例えば、ある一つの変数に対してアトミック操作を行うことによって、並列プログラミング時に変数に対するアクセスを保護を行うことができます。
これまでは、[アトミック関連クラス](https://docs.oracle.com/javase/jp/9/docs/api/java

元記事を表示

Microprofile Fault Toleranceの機能と独自に用意したInterceptor間の実行順序を制御する

## 環境

* Java 8
* CDI 2.0
* Microprofile Fault Tolerance 2.0

## 事象

[Microprofile Fault Tolerance 2.0 Circuit Breaker](https://download.eclipse.org/microprofile/microprofile-fault-tolerance-2.0/microprofile-fault-tolerance-spec.html#circuitbreaker)のアノテーションと、独自に用意した `FooInterceptor` を実行するアノテーションを併用した場合、サーキットブレーカが意図せず発動する事象に遭遇しました。

“`java:FooInterceptor
@Interceptor
@Dependent
@Foo
@Priority(Interceptor.Priority.APPLICATION)
public class FooInterceptor {

@AroundInvoke
public Object invok

元記事を表示

【非同期処理】スレッドセーフって何?

業務で非同期処理を書いたときに「そのクラス、スレッドセーフですか?」と指摘を受けることが複数回ありました。
そこで、「そもそもスレッドセーフって何よ」「スレッドセーフじゃないと何が困るのよ」ということを勉強しました。本記事はそのまとめとなってます。

##参考図書

この本は思考させる系の練習問題がついてて、良い気がします。
自分もまだ読破で

元記事を表示

Fabricのソースコード非公開Modの難読化を解除する方法

# はじめに
Modを改造したい、そう思ったときにソースコードが公開されていないことはよくあります。
Modをパクリたいとき、改造したいとき、パッチを作りたいとき色々ありますが、
常に難読化の壁に阻まれることになります。

[Forgeの難読化を解除する方法](https://ci.tterrag.com/job/BON2/)はありますが、Fabricの難読化を解除する方法についての情報がなかったので記事を書きます。

# 1. 前提知識

https://fabricmc.net/wiki/tutorial:migratemappings?s%5B%5D=gradlew&s%5B%5D=migrate

https://fabricmc.net/wiki/tutorial:setup

https://fabricmc.net/versions.html

https://qiita.com/noriokun4649/items/35763e6e35b80c976dfd

# 2. Modを準備する

デコンパイルするFabricで製作されたModを用意します。

今回は例として [

元記事を表示

Java Excelでドキュメントのプロパティを追加

はじめに

Excelでは、作成者、タイトル、サブタイトル、キーワードのプロパティなど、といったプロパティを追加することで、ファイル管理を効率化したり、エクセルをカスタマイズしたりできます。今回は、Spire.XLS for Javaというライブラリを活用して、Excelでドキュメントのプロパティを追加する方法を紹介していきます。この記事で、少しでもお役に立てたのであればと思いますね。

Spire.XLS for Javaとは?

Spire.XLS for Javaは、開発者がJavaプラットホームでExcelの文書ファイルを迅速かつ高品質でAsciidoctor Maven Pluginを使って良い感じにPlantUML図をHTMLファイルに埋め込む

### この記事のゴール
・Asciidoctor Maven Pluginを使って良い感じにPlantUML図をHTMLファイルに埋め込む。


### 作業の流れ
1. プロジェクトフォルダ作成(所要時間:10秒)
2. pom.xmlの設定(所要時間:30秒)
3. adoc形式ファイル作成(所要時間:30秒)
4. ビルド【adoc形式ファイル → HTMLファイルに変換】(所要時間:30秒)


### 1. プロジェクトフォルダ作成

・フォルダ「asciidoc-practice」作成


### 2. pom.xmlの設定

・asciidoc-practiceフォルダ配下にpom.xml作成
・下記をpom.xmlにコピペ

“` 【Java】Spring JDBCで登録機能の実装

今回はJava SpringFWを用いて登録・更新・削除機能を実装してみました。
バリデーションについては、JPAではなくJDBCtemplateを使用しております。
以下はそれぞれに分けて解説をしておりますので、よければ参考にしてください!!

• 【更新】[Spring JDBCで更新機能の実装]()(作成中)
• 【削除】[Spring JDBCで削除機能の実装]()(作成中)
• 【まとめ】[Spring JDBCで登録・更新・削除]()(作成中)
• 【エラー解消】[Spring JDBCでエラーメッセージが消えない!?]()(作成中)

0, 目次

1, 完成品
2, 環境
3, 関連ソースコード  
  ① Form と entity
  ② Controller
  ③ Service
  ④ Impl と Custom と Repository
  ⑤ HTML と JavaScript
  ⑥ messages.properties と ValidationMessages.properties
  ⑦ pom.xml

4, 参考にしたサイト

Couchbase Lite機能解説:データベースの使い方

## はじめに

Couchbase Liteの利用に資するために、下記のドキュメントの内容(英語)を整理します。

https://docs.couchbase.com/couchbase-lite/current/java/database.html

## 初期化

APIを使用する最初のステップは、イニシャライザーを呼び出すことです。
初期化前に他のAPIメソッドが呼び出されると、例外が発生します。

例1.データベース初期化

“`java
// Initialize the Couchbase Lite system
CouchbaseLite.init();
“`

## データベース作成/オープン

`Database`クラスを使用して、新しいデータベースを作成したり、既存のデータベースをオープンすることができます。
データベース名とオプションで`DatabaseConfiguration`を渡します。

注意すべき点は次のとおりです。

– データベースのオープン/作成は非同期プロセスです
– 指定されたデータベースが指定された場所またはデフォルトの場所に存在しな

元記事を表示

Java 17新機能まとめ

Java 17が2021/9/14にリリースされました。

http://mail.openjdk.java.net/pipermail/jdk-dev/2021-September/006037.html

機能的に多くのプログラマに関係ありそうな変更はApple Siliconに対応したくらいですが、LTSであるということが大きいと思います。

詳細はこちら
[Oracle Releases Java 17](https://www.oracle.com/news/announcement/oracle-releases-java-17-2021-09-14/)
[Java SE 17 Platform JSR 392](https://openjdk.java.net/projects/jdk/17/spec/)
[JDK 17 GA Release](https://jdk.java.net/17/)

APIドキュメントはこちら
[Overview (Java SE 17)](https://cr.openjdk.java.net/~iris/se/17/build/late

元記事を表示

opencsvのCSV書き出し(CSVWriter)で囲み文字をなくす

# 結論

CSVWriterの引数多いほうのコンストラクタにICSVWriter.NO_QUOTE_CHARACTERを渡す。
char型で定義されているので`¥u0000`を渡してもいいはず。

# 実例

“`java
Path p = Paths.of(‘xxx’);
try (
BufferedWriter bw = Files.newBufferedWriter(p, StandardCharsets.UTF_8);
CSVWriter writer = new CSVWriter(writer
, CSVWriter.DEFAULT_SEPARATOR
, CSVWriter.NO_QUOTE_CHARACTER
, CSVWriter.DEFAULT_ESCAPE_CHARACTER
, CSVWriter.DEFAULT_LINE_END) {
// …
}
“`

# 参考

http://opencsv.sourceforge.net/apidocs/com/opencsv/CSVWriter.html#CSVWr

元記事を表示

SpringBootの@Transactionalが効かない!

# 結論

### DIでインジェクトしたクラスのpublicメソッドじゃないとだめ。

# それまでの流れとか

SpringBootのCommandLineRunnerを使ってバッチ処理を作っていました。
もともと入力のCSVから別形式のCSVへの変換だったのですが、仕様変更で急遽DB操作を行うことになり大慌てで対応することに。
今後改修もないようなちょっとしたバッチ処理なので`JDBCTemplate`で実装することにしました。

1ステップ処理でワークテーブルをdelete-insertで洗い替えするだけなので、トランザクション不要でExitコードがエラーなら後続バッチを動かさなきゃいいかな、と考えていたのですが運用上ロールバック欲しいらしいので後付けで対応。

## publicメソッドにしか@Transactionalをつけてもだめ。

publicメソッドにしか@Transactionalつけられなかったはず、と考えながら実装しても機能せず:0

https://docs.spring.io/spring-framework/docs/4.2.x/spring-frame

元記事を表示

Javaのequalsメソッドについて

“`equalsSample.java

//(~省略~)

// 正しい例
private final String 定数1 = “hogehoge”;
private String 変数1 = null;

if(定数1.equals(変数1)){
System.out.println(“同じ値です”);
}else{
System.out.println(“違う値です”);
}

// nullPointExceptionは発生せずに、「違う値です」が出力される。

// 悪い例
private final String 定数1 = “hogehoge”;
private String 変数1 = null;

if(変数1.equals(定数1)){
System.out.println(“同じ値です”);
}else{
System.out.println(“違う値です”);
}

// nullPointExceptionが発生する。

“`

上記のように、equalsメソッドで定数と変数を比較する場合は、定数を先頭に記述すると良い。

元記事を表示

【Spring】@Transactional関連メモ

#### ① ロールバックするタイミングは「非検査例外が発生したときのみ」
  → rollbackForプロパティで指定した検査例外はロールバック対象とすることができる

“`
@Transactional(rollbackFor=Exception.class)
“`


#### ② @Transactionalはpublicメソッドにつけた時のみロールバック有効


#### ③ @Transactionalを付けたpublicメソッドは別クラスからの呼び出し時のみロールバック有効


#### ④ 外部トランザクションが開始している場合はそのトランザクションを利用する
  → propagationプロパティで制御。デフォルト値(PROPAGATION_REQUIRED)が外部トランザクションをそのまま利用する設定となっている


#### ⑤ @Transactionalをつけなかった場合、トランザクションは発生しない?

##### 前提
・Spring Data JPAを利用している
・RepositoryクラスはCrudRepositor

元記事を表示

OTHERカテゴリの最新記事