JAVA関連のことを調べてみた2022年04月05日

JAVA関連のことを調べてみた2022年04月05日

「マイクロサービスパターン」の復習 3章

## 概要

Java読書会でせっかく勉強したのにつぎつぎと忘れていくので、印象に残ったところを記録していく

http://www.javareading.com/bof/

## 3章 マイクロサービスアーキテクチャで使われるプロセス間通信

– マイクロサービスアーキクテチャでは、複数のサービスを組み合わせて、全体として一つのサービスを形成するので、各サービス間の通信方法は必然的に重要な要素となる
– この章では大きく同期・非同期と分けながら色々な概念を紹介しているが、最重要なのは「3.3.7 トランザクショナルメッセージング」
– 以後の章では、トランザクショナルメッセージングがある前提で話が進められる

## 同期呼び出し

### Remote procedure invocationパターン

– 略してRPI。同期的なリモート呼び出しを指す
– https://microservices.io/patterns/communication-style/rpi.html
– 具体例としてはRESTやgRPCが挙げられている
– SOAP、CORBAやJava RMIなど

元記事を表示

HomeScreenBrowserアプリ開発に使った技術まとめ(Recycler View,BottomSheet,WebView,Admobリワード広告,Intent)

## HomeScreenBrowserアプリ開発に使った技術まとめ(Recycler View,BottomSheet,Admob,Intent)
HomeScreenBrowserというAndroidのホーム画面でウェブサイトを表示するアプリを公開したため技術について書きます(この記事について私は責任は取りません)

公開したアプリ

https://play.google.com/store/apps/details?id=jp.nuohka.homescreenbrowser

簡単に言うとホーム画面に表示することができるブラウザアプリです。

### AdaptiveView
用意するファイル
item.xml GridViewの一つ一つの見た目を定義
object.java 一つ一つの型(私の場合はアイコンとアプリ名とパッケージネーム)
appadapter.java GridViewを作ります。
“`java
recyclerView = findViewById(R.id.recycler);

recyclerView.setLayoutManager(new Li

元記事を表示

Scalaの勉強はじめました 5 〜パターンマッチ〜

## はじめに
N予備校で「Scala基礎」を受講しています。
今回はパターンマッチについてです。

## パターンマッチ
“`scala
def intToName(num: Int): String = {
num match {
case 1 => “one”
case 2 => “two”
case _ => “other”
}
}
“`
これが`match`の基本。
JSと違って`break`を書かなくても次の処理が実行されることはない。

同じ処理結果なら`|`でまとめられる。
“`scala
creature match {
case “cat” | “dog” => “animal”
}
“`

### コレクションのパターンマッチ
“`scala
val seq = Seq(“A”, “B”, “C”, “D”, “E”)
seq match {
case Seq(“A”, b, c, d, e) =>
println(s”b = ${b}”)

元記事を表示

Error: Could not create the Java Virtual Machine. の対応

以下のエラーメッセージが出た。
“`
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
“`

調べてみるとjavaのバージョンが異なると表示されることがあるらしいエラーなのでバージョンを調べる。
“`
$ java –version
openjdk 17.0.2 2022-01-18 LTS
OpenJDK Runtime Environment Corretto-17.0.2.8.1 (build 17.0.2+8-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.2.8.1 (build 17.0.2+8-LTS, mixed mode, sharing)
“`

Corretto8などを使っていたのだが、事故ってローカル環境の色々なバージョンを最新のものにしてしまっていた。自分の場合バージョンをCorretto8に切り替えないといけない。
まずは何がインストールされ

元記事を表示

SpringBoot × Thymeleaf タグ要素の中に式(値)を入れる方法

# はじめに
今回は、以下のように、親要素とその子要素のテキストをThymeleafの式で実装する方法について解説します。
※以下の記述にすると、親要素(h2タグ)の`th:text属性`の値しか表示されません。
“`html:sample.html


“`

# th:text属性について
ます、「なぜ、上記のような記法で親要素と子要素のどちらの値も表示できないのか」を解説します。

結論を言うと、「`th:text属性`を指定すると、**その要素の中身身全て(入れ子になっている要素も含む)** が`th:text属性`の値に置き換わるため」です。

それでも親要素と、入れ子になっている子要素に値を渡したい時があります。
そんな時にはThymeleafにある`インライン記法`を用いるとすんなり実装できます。

# インライン記法
インライン記法というのは、Thymeleafの式をth:**属性ではなく、直接HTM

元記事を表示

Java SEアプリケーションにHTTP Server機能を組み込みたい(Grizzly編)

この度、個人ブログを閉鎖することなり、一定のアクセスがあった記事を記録として遺すことにしました。
以下は、2020年4月14日に投稿した記事の写しです。この記事がこの世の誰かの助けとなることを願います。

JavaでWebというと、warファイルをAPサーバに搭載してみたいな運用が多いと思いますが、
Java SEアプリケーションにHTTP Serverとしての機能を組み込みたい、といった要件を提示されることも多々あります。

GrizzlyはJava EEアプリサーバのGlassFishで採用されているHTTPサーバの実装ライブラリで、Java SEアプリケーションに単体で組み込むこともできます。

公式サイト
https://javaee.github.io/grizzly/

公式のサンプルほぼそのままですが、Mavenプロジェクトでの実装例を記載します。

まずは、pom.xmlに以下の通り追記して保存します。
“`xml


org.glassfish.grizzly

元記事を表示

Spring Boot + Vue + Axiosで検索&無限スクロール機能の実現

# はじめに
Spring Boot学習中の者です。学習のためにアプリケーションを作成していて、無限スクロールを実装する上で考えたことや躓いたポイントをまとめました。
今回はユーザの投稿を検索するページを例とさせていただきます。

# 参考文献
http://terasolunaorg.github.io/guideline/current/ja/ArchitectureInDetail/DataAccessDetail/DataAccessMyBatis3.html#dataaccessmybatis3howtousefindpageusingmybatisfunction

https://reffect.co.jp/vue/vue-js-infinite-scroll-intersection-observer-api

https://qiita.com/opengl-8080/items/3720ed415c2df26251a7

# 使用技術
Spring Boot 2.5.6
Spring Security
Thymeleaf
Mybatis 2.2.0
Vue.js
A

元記事を表示

Amazon EC2にJavaアプリをデプロイする方法(war&jar)

Amazon EC2にJavaアプリをデプロイする方法をwarファイルとjarファイルそれぞれメモとしてまとめます。

これはAWSでEC2インスタンスを作っている前提でまとめていますので、ご了承願います。ちなみにEC2はLinux2です。

# warファイルのデプロイ

## 1、EC2にJava17をインストール

EC2にJava17をインストールします。Javaのバージョンは適宜読み替えてください。

OpenJDKをダウンロード

“`
$ wget https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_linux-x64_bin.tar.gz
“`

ダウンロードしたものを展開

“`
$ tar xvf openjdk-17_linux-x64_bin.tar.gz
“`

展開したものを移動

“`
$ sudo mv jdk-17 /opt/
“`

パスを通す

“`
$ sudo tee /etc/profile.d/jd

元記事を表示

auカブコム証券のkabuステーションREST APIの認証済TOKENをファイル管理する

# はじめに

前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック

元記事を表示

auカブコム証券のkabuステーションREST APIのテスト用モックサーバーを作る

# はじめに

前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)

最近、思いついたビジネスロジックを、相場がお休みしている土日に作ろうと思った

元記事を表示

初心者がJavaのマルチスレッドプログラミングを学ぶお題を作ってみた

# はじめに
チーム内でJavaプログラミング初心者向けの勉強会をしていて、そのときに出したマルチスレッドプログラミングの勉強用の題材とメンバーからの回答例です。
よくある事例からお題を作ってみたら、いろんな回答が返ってきました。

# お題
以下のプログラムをスレッドセーフにしてみよう

“`java:スレッドアンセーフ(お題)
package study.concurrent;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import lombok.Getter;

public class ThreadUnsafeMain {

private static ExecutorService executor = Executors.newSingleThreadExecutor();

public static void main(String[]

元記事を表示

【Java】ファイル操作関連

# まえがき
Javaではファイル操作関連クラスが豊富に提供されている。それぞれのクラスの役割/使い方についてまとめる。
# java.io と java.nio と java.nio2
JDK6/SE6:io系(File)
JDK7/SE7:nio系(Files, Path)
JDK8/SE8:nio2系(nioの強化)+ Stream + ラムダ式 + メソッド参照

SE → JavaAPI群。JDKの一部品。
JDK → Java開発プログラムのセット(ソフトウェア)
# JDK6/SE6:io系(File)
## File
・ファイルの置き場所を定義する
・ファイルを操作する

# JDK7/SE7:nio系(Files, Path)
## Path
・ファイルの置き場所を定義する
## Files
・ファイルを操作する

Fileクラスの2機能を、PathクラスとFilesクラスで分割したような形。
**Fileクラスにはない便利機能がPathとFilesにはあるので**、JDK7/SE7以上の環境である場合は
 ✕ Fileクラス
 〇 Pathクラス&Filesク

元記事を表示

SpringBootの値をJavaScriptに渡す方法

# はじめに
SpringBootで設定した値をJavaScriptに渡す際に、少しばかり、つまずいたため備忘録がてら記録しておこうと思います。
SpringBootとJavaScriptを用いた場合には、非常にあるあるな事象だと思うので、ご参考になれば幸いです。
ちなみに、Thymeleafでは、このことを「 **JavaScriptナチュラルテンプレート** 」と呼ぶようです。

# ControllerからJavaScriptに値を渡す方法
以下のように`Model`に登録してある値をJavaScriptに渡したいとします。

“`java:SampleController.java
@GetMapping(“/index”)
public String getIndex(EasyHouseholdForm form, Model model) {

model.addAttribute(“form”, form);

return “sample/index”;
}
“`

これを渡す方法は`Thymeleaf`で以下のようにします。

“`ht

元記事を表示

【Java】ファイルダウンロード

# まえがき
ファイルをバイナリに変換したものをレスポンスにセットすることで、ファイルダウンロードを実現する。やり方は2つ。

① レスポンス(Controllerメソッドの戻り値)にバイナリをセットする。
② レスポンス(メソッドの引数/HttpServletResponse)にバイナリをセットする。

# 参考

① レスポンス(Controllerメソッドの戻り値)にバイナリをセットする。

https://nainaistar.hatenablog.com/entry/2021/10/21/120000

② レスポンス(メソッドの引数/HttpServletResponse)にバイナリをセットする。

https://stackoverflow.com/questions/17933508/how-to-delete-a-file-after-sending-it-in-a-web-app

# ① レスポンス(Controllerメソッドの戻り値)にバイナリをセットする。

## ソースコード
“`java
import java.io.IOException;
impo

元記事を表示

【 Java Servletについて(また、その周辺) 】

現在書籍にてJavaを独学で学習中です。
この投稿はその備忘録になります。

## Java Servlet(サーブレット)とは?
Javaサーブレットとは、一言でいうと`プログラム`のことです。
どんなプログラムか?
・`Java`を使って作成されている。
・`サーバ側(バックエンド側)で動くプログラム`。
・動的なwebページの`配信システムを実現するためのプログラム`。

#### ■Javaサーブレットの働き■
クライアント側からのリクエストをサーブレットが受けて、
データの処理や動的なwebページを生成したりします。
【例】YouTubeで?ボタンを押すとそれが反映されたページが構成される。

#### ■サーブレットコンテナという実行環境■
サーブレットはプログラムのため実行環境が必要になります。
その実行環境となるソフトウェアが`サーブレットコンテナ`です。

#### ■GETメソッドとPOSTメソッド(リクエストの違い)■
サーブレットはクライアント側から送られてくるリクエストに対して、
`GETメソッド`か`POSTメソッド`かを判断します。
・GETメソッド…

元記事を表示

Javaでメール受信

# 概要

[Apache James](https://james.apache.org/)を使うサンプル。Jamesはかなり高機能なようですが、今回はメール受信して独自に処理する必要があったので、受信してログ出すだけの最小サンプル。

# Apache James

Javaで実装されているメールサーバ。SMTPやIMAPなどに対応しているようです。「Mailet」を実装することでメールの独自処理を行うことができます。

# 実装

[https://github.com/YasunoriHigashiyama/custom-james-assembly-sample](https://github.com/YasunoriHigashiyama/custom-james-assembly-sample)

元記事を表示

廃止されたJavaアプレットをブラウザ外で動かしてみました

# はじめに
本投稿の内容は、ブラウザ上でJavaアプレットを動かすものではありません。

現状として私は何度か繰り返し使う可能性が高い方法です。なのに忘れそうです。
ここにメモしておきます。

# 環境および前提
Windows10.

この方法ではJavaアプレット本体のソースが不可欠です。
今回は、動かしたいJavaアプレットが載っているページの管理人様が、github上でアプレットの[本体であるソース](https://github.com/edpegg/CutTheKnot-Java)を公開していました。
(あまり公開されているものとは思いません。が、今回のケースに関しては公開することで、Javaアプレットの廃止に対応できないことを補う意図があったそうです。非公開だけどどうしても使いたいなら、管理人様にお願いすることになるのかもしれません。)

また、JavaがPCにインストールされていることが必要です。
今回の環境は下記。
“`
java version “1.8.0_131”
Java(TM) SE Runtime Environment (build 1.8.0_13

元記事を表示

eclipseにおける「クリーン」とは

■まとめるきっかけ

・原因不明のエラーで悩まされて、サーバーをクリーンすると解決したという場面が何度かあり、真剣にクリーンの機能について調べ、利用するタイミングを確認しておきたい。

■ここでまとめる機能
・プロジェクトのクリーン
・サーバーのクリーン
・リフレッシュ

それぞれの概要と、実行タイミングを記載する。

■プロジェクトのクリーン
“全て”のビルド成果物を削除し、
“全て”のモジュールをビルドしなおすこと。

一部モジュールを修正した際に、自動でビルドが行われるが、あれは修正した箇所のみをビルドしなおしている。
クリーンビルドは、一旦ビルドによって、作成されたクラスファイルなどのファイルを削除し、全てのモジュールをビルドしなおす。

●実行タイミング
サーバーで実行する前には一度は行うべき、依存関係にあるモジュールを特定することは難しいため。

■リフレッシュ
Eclipse外で中身を変更した時、それをEclipse内に反映させたい時などに使う。
ビルドは行っていない。

●実行タイミング

元記事を表示

Spring4Shell:JavaのSpringフレームワークのゼロデイRCE脆弱性について解説します

本記事は2022年3月31日(米国時間)/2022年4月1日(日本時間)に公開した英語ブログ[Spring4Shell: The zero-day RCE in the Spring Framework explained](https://snyk.io/blog/spring4shell-zero-day-rce-spring-framework-explained/)を日本語化した内容です。

[![logo-solid-background.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2216557/687b9c44-fd95-1778-2869-898100ade8b6.png)](https://snyk.io/jp)

2022年3月30日(米国時間)、Spring フレームワークに[リモートコード実行(RCE)可能な重大な脆弱性](https://security.snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-2436751)が発見されました。具体

元記事を表示

gradle.ktsでMavenリポジトリにpublish

gradle/kotlinでMavenリポジトリにpublish
===
日記

環境

– Gradle 7.1
– Kotnin 1.6
– Nexus Repository Manager 3.36.0

[サンプル](https://github.com/kyoya-p/samples/blob/master/2021/SNMP4J/Snmp4jUtils_KtJvm/build.gradle.kts)

build.gradle.kts に [Maven Plugin](https://docs.gradle.org/current/userguide/publishing_maven.html)を追加

https://docs.gradle.org/current/userguide/publishing_maven.html

さらに、publish対象モジュールの名前はバージョンを定義

“`build.gradle.kts
plugins {
kotlin(“jvm”) version “1.5.31”
`maven-publish`

元記事を表示

OTHERカテゴリの最新記事