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

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

CentOS7でJenkinsを建てる

# はじめに
CentOS7でなにか作りたかった。
業務ではいくらでもつかっているJenkinsを建てたことがなかった。
ちょっと作ってみようと思う。

# 前提
firewalld,selinux無効化済みのCentOS7サーバが作ってある前提。

# Javaのインストール
JenkinsはJavaで動くのでまずJavaをインストールする。

“`ruby:Javaのインストール
yum -y install java-11-openjdk
“`

# wgetインストール
Jenkinsのリポジトリをダウンロードするためにwgetをインストールする。

“`ruby:wgetインストール
yum -y install wget
“`

# Jenkinsリポジトリインストール
Jenkinsのリポジトリをインストールする。

“`ruby:Jenkinsリポジトリインストール
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
“`

# Jen

元記事を表示

(staticでない)インナークラスにstaticなメンバを定義できない???

Java Gold11の勉強をしていて分からない設問があった。
(使用している参考書は[黒本](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Java-SE-11-Gold%E5%95%8F%E9%A1%8C%E9%9B%86-1Z0-816/dp/4295012564)です。)

下記のコードを実行するとどうなるか?
“`java:
public class Outer{
void test(){
Inner.message = “Hello, Java”;
}

class Inner{
private static String message;
public void test(){
System.out.println(message);
}
}

public static void main(String[] args){
Outer outer

元記事を表示

【試し】SpringプロジェクトをDocker上で起動させてみる

## やること
### Springプロジェクトをdockerコンテナ上で動かす

#### 使用するもの
– Springプロジェクト(DB接続なし、簡素なものがよい)
– 例:「ファイルダウンロードアプリ」
– https://github.com/yusuke/text-file-download
– 起動させて、アクセスするとテキストがファイルダウンロードするだけ
– Docker(ver 20.10以上)

**※注意**:勉強記録として失敗した内容も残しています

## 実施記録
こちらの記事を参考に実施
**SpringBootのアプリケーションをDockerコンテナで動かす**

https://qiita.com/ke_suke0215/items/1b0128c140dd051b5993

### 手順
1. DockerFileの作成
1. GradleでJarファイル作成
1. Dockerイメージをビルドし、コンテナ作成 `docker build`
1. コンテナ起動 `docker run`
1. アプリ実行

#### Docke

元記事を表示

JVM – Native Method Interface (JNI)

Java Virtual Machine(JVM)は、Javaプログラムが異なるプラットフォーム上で一貫した動作をするための環境を提供しますが、すべてのタスクをJavaのみで実行することが最適とは限りません。パフォーマンスの要求が高い、またはプラットフォーム固有の機能にアクセスする必要がある場合、JavaプログラマーはNative Method Interface(JNI)を利用して、ネイティブプログラミング言語(主にCまたはC++)を使用してJavaアプリケーションを拡張することができます。

![jvm_architecture_hotspot.drawio (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/a5c76eb7-dfdb-bd73-4260-90c09d047e87.png)

## JNIとは

JNIは、Javaコード内からネイティブメソッド(CやC++で書かれたメソッド)を呼び出すためのプログラミングフレームワークです。これにより、JavaアプリケーションはOS

元記事を表示

【Java】ConsumerとかSupplierってなに?

## はじめに
久しぶりにJavaに触れたら、Consumer\とSupplier\が分からなかったため、復習を兼ねて本稿にまとめます。

## 要約
– ConsumerやSupplierは関数型インターフェース
– 関数型インターフェース:abstractメソッドが1つだけ含まれているインターフェース
– Consumerインターフェース:引数を受け取ってその引数を使った処理を実行する
– Supplierインターフェース:引数を受け取らずに値を戻す
– ほかにも様々な関数型インターフェースがある

## 関数型インターフェースとは

Javaの公式ドキュメントでは以下のように記載されています。

> A functional interface is an interface that is not declared sealed and has just one abstract method (aside from the methods of Object), and thus represents a single function contract.
Thi

元記事を表示

【Java】バナナのナス,バナナスを作れるアプリを制作しました.

### バナナスとは
本記事ではバナナのナス,バナナス.コロンビアのアールグレイ,コロンビアールグレイのような言葉遊びでできる言葉のことを総称してバナナスと読んでいます.

### 環境
WSL2にUbuntuの22.04を乗せて,VSCodeをリモートで開いて開発していました.
Java17で開発しました.特にMavenとかは使っていません.(この程度のアプリを作るためにそこまで勉強したくなかった.)

### 使用したライブラリ
[ICU4J](https://icu.unicode.org/download/74)
ひらがなとカタカナの区別をなくすために導入しました.

### 苦労した点
初めてGitを活用して開発したことと,外部のライブラリを使うことも初めてだったので,そのあたりに苦労しました.また,バナナスの肝である末尾と先頭の文字照合の部分を実装するのも少しだけ苦労しました.

### 感想
とても面白かったですが,自分の適当な着想から制作を始めただけなので,ある程度できてしまうとモチベーションが落ちてしまうなと感じました.
最初は「JavaF

元記事を表示

Dockerコンテナ化したJavaアプリのヒープのサイズ調整オプションの検証

# はじめに

こんにちは。私は弊社で企画・運営している、Dot to Dotという個人の同意の元に様々なデータを連携することができる分散型データ連携プラットフォームの開発・保守を担当しています。
Dot to Dotではデータ連携をしたい事業者向けに、データ連携用の通信モジュールを、Spring Bootを使用したJavaアプリケーションとして作成したDockerイメージ形式で配布しています。

昨今ではDockerでアプリケーションを実行するのが当たり前の風潮になりつつありますが、実際に本番で適用する際に必要なチューニングの話はあまり聞かないかと思います。
そこで本記事では、JavaアプリケーションをDockerコンテナで運用する場合に必要な、ヒープのチューニングについて説明します。これからJavaアプリケーションをDockerコンテナ化して運用したい人や、すでに運用中でもヒープチューニングしておらずメモリが効率的に利用できていない人には参考になるかと思います。

# まとめ
* ヒープサイズを固定値で指定する`-Xms`や`-Xmx`は使わない
* Java 8u191およびJ

元記事を表示

[Google Tasks API(V1)] Javaでタスクリスト内のタスクの順序変更や親タスクを設定する

Google Tasks API V1(Java)を使用して、
タスクリスト内のタスクの順序変更や親タスクを設定する方法
についてご紹介します。

なお、このAPIでは同一タスクリスト内のみ移動が可能です。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Tasks API(V1)] JavaでTasks APIを使う](https://qiita.com/doran/items/8a3b7e24d9e0417a7f9a)
を参照ください。
:::

|No||目次|
|—|—|—|
|1||[タスクを移動](#1-タスクを移動)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[親タスクの指定](#2-親タスクの指定)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|

## 1. タスクを移動
指定したタスクを指

元記事を表示

【Android/Java】OkHTTPでDigest認証

## やりたいこと
AndroidアプリからDigest認証で通信したい
OkHTTPを使用することとしたらSingletonで作らないと、メモリを食いまくるようなので、それを意識する

## Step1.実装方法
#### app¥build.gradle
~~~gradle
android {
:(略)
}
dependencies {
:(略)
implementation ‘com.squareup.okhttp3:okhttp:4.11.0’
implementation ‘io.github.rburgst:okhttp-digest:3.1.0’
}
~~~~

#### AndroidManifest.xml
~~~xml

元記事を表示

【Android/Java】Bluetoothペアリング機器の削除(任意のもの以外)

## やりたいこと
製品に付随しているBluetooth機器(例えば、AndroidTVに付随しているBluetoothリモコン)以外のペアリング機器を削除したい。
ネットカフェのPCなど、不特定多数の使用が想定される状況で、利用者がペアリングした機器を、利用終了後に削除したいのが目的での調査メモ

## Step1.実装方法
#### AndroidManifest.xml
~~~xml



【Android/Java】アプリ間データ共有 その2(Android11)

## やりたいこと
アプリ間でデータの共有を行いたい
片方のアプリがプロセスKillされている状態でもデータの参照を行えるようにしたい

以前、非推奨のSharedUserIDを使って実現したが、推奨、かつ簡単に行える実装(SystemProperties)をみつけたので備忘録

## Step1.SystemPropertiesとは
Androidのデバイス動作や設定を制御するキーと値のペアが格納されているもの。
#### ADBコマンド例
~~~cmd
# デバイスのモデル名をシステムプロパティから取得する
adb shell getprop ro.product.model
~~~~

## Step2.実装方法
### SystemPropertiesへの書き込み
任意のキーを指定して、値を書き込む
~~~java
public void writeSystemProperties(String key, String val) {
try {
@SuppressLint(“PrivateApi”)
Class SystemProp

元記事を表示

[Google Tasks API(V1)] Javaでタスクを作成・更新・削除する

Google Tasks API V1(Java)を使用して、
タスクを作成・更新・削除する方法
についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Tasks API(V1)] JavaでTasks APIを使う](https://qiita.com/doran/items/8a3b7e24d9e0417a7f9a)
を参照ください。
:::

|No||目次|
|—|—|—|
|1||[タスクを作成](#1-タスクを作成)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[タスクを上書き](#2-タスクを上書き)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|
|3||[タスクを更新](#3-タスクを更新)|
||1|[スコープ](#31-スコープ)|
||2|[実行](#32-実行)|
|

元記事を表示

Jacksonの JsonNode を使ってJSONの特定のキーを取得しようとしたとき、そのキーが存在しない場合は NullPointerException が発生します。

Jacksonを使用して、深い階層のJSONの値を変更するには、次の手順に従います。

– JSON文字列をJavaオブジェクトにデシリアライズします。
– 必要な値を変更します。
– 変更したJavaオブジェクトをJSON文字列にシリアライズします。

Jacksonの JsonNode を使ってJSONの特定のキーを取得しようとしたとき、そのキーが存在しない場合は JNullPointerException が発生します。このため、キーが存在するかどうかを事前にチェックすることが重要です。

以下の例で rootNode.get(“a”).get(“b”) のようなコードを使用すると、もしキー “a” や “b” が存在しない場合に NullPointerException が発生します。したがって、キーが存在するかどうかをチェックするために has メソッドを使用することが推奨されます。

“`java
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.

元記事を表示

Spring bootの環境構築(Intel Mac)

## 背景
“Java“の勉強がしたかったので、人気な“Spring boot“を触るために環境構築をしました。

## 導入内容
IDEは“Eclipse“を使用することにしました。STS(Spring Tool Suite)というツールも主流のようですが、STSもEclipseをベースに作られたIDEになっていて、Eclipseにライブラリを入れることで同等の環境が作れるようです。
Eclipseを使用する理由は“Spring Boot“以外を触ることも考慮して、専用ツールを使うより慣れた時の汎用性が高いかもと思ったからです。

## 導入手順
### 手順
1. Pleiadesをダウンロード・インストール
1. プラグイン: Spring Toolsをインストール
1. Javaをインストール
1. Lombokのインストール
1. プロジェクトを作成
1. Hello Worldを表示させる

### Pleiadesをダウンロード・インストール
pleiadesは日本語化されたEclipseがインストールできて、OS・言語ごとにまとまったプラグインもダウンロ

元記事を表示

JVM – PCレジスタ

Java Virtual Machine (JVM) の Runtime Data Area 構成要素の一つに「PCレジスタ」があります。([JVM – 全体構造](https://qiita.com/fastso/items/9bc3f4d861f729b4e54f)をご参考ください。)

![jvm_runtime_data_area.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/6fa83edc-fcd7-7d9c-e716-6b5f1d3b4d44.png)

## JVM仕様のPCレジスタ定義

[The Java Virtual Machine Specification (Java SE 8 Edition)](https://docs.oracle.com/javase/specs/jvms/se8/html/index.html)は次のようにPCレジスタを定義しています。

JVMは、一度に多くのスレッドを実行することができます。JVMの各スレッドは、独自の

元記事を表示

ABC348A~Fの解答[Java]

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

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

## A – Penalty Kick
問題文は[こちら](https://atcoder.jp/contests/abc348/tasks/abc348_a)

`oox`が永遠に繰り返されている文字列の先頭から$N$文字目までを切り出せば答えが求められるので、雑に`oox`を$N$回繰り返した文字列を構築し、`substring`メソッドで答えを求めました。
“`A.java
final class Main{
private static final boolean autoFlush = false;
private static final SimpleScanner sc

元記事を表示

ABC347A~Eの解答[Java]

## はじめに
今回はコンテスト中にEまで解けたのでそれをそのまま載せようかなと思います。

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

## A – Divisible
問題文は[こちら](https://atcoder.jp/contests/abc347/tasks/abc347_a)

$K$で割れる物を`ArrayList`にaddしていって答えを構築しました。
“`A.java
final class Main{
private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner(System.in);
private static final SimpleWri

元記事を表示

ABC346A~Fの解答[Java]

## はじめに
今回はコンテスト中にFまで解けたのでそれをそのまま載せようと思います。

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

## A – Adjacent Product
問題文は[こちら](https://atcoder.jp/contests/abc346/tasks/abc346_a)

問題文の通りに実装しました。
“`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

元記事を表示

Jakarta EE 10 で API と実装が分離された Specification の一覧

2022 年 9 月、[Jakarta EE 10](https://jakarta.ee/release/10/) がリリースされました。

Jakarta EE となって初めての機能追加リリースですが、アプリケーションサーバの EoL 都合で Java / Jakarta EE 8 からジャンプアップを迫られるケースがありそうです。たとえば Red Hat JBoss EAP の場合、Jakarta EE 8 互換の 7.x は Full support が 2023 年 12 月 31 日に終了しています。Maintenance support ends も 2025 年 6 月 30 日に控えており、最近 GA となった 8.x は Jakarta EE 10 互換ですから、デッドラインは近いです。[^1]

||GA|Full support|Maintenance support|ELS-1|ELS-2|
|:—-|:—-|:—-|:—-|:-

元記事を表示

Java silver向け 例題 継承 ポリモーフィズム 2

次のコードの出力結果を答えてください

“`java
abstract class Fish {
String name = “SAKANA”;
abstract void setName(String na);
abstract String getName();
}

class SABA extends Fish{
String name = “”;

void setName(String na) {
name = na;
}
String getName() {
return name;
}
}

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

Fish fish1 = new SABA();
SABA fish2 = new SABA();

fish1.setName(“Tarako”);
fish2.setName(“Maguro”);

System.out.println(fish1.name);
System.out.pr

元記事を表示

OTHERカテゴリの最新記事