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

JAVA関連のことを調べてみた2020年12月25日
目次

【Java・SpringBoot】RESTサービス③ – PUT(更新)メソッド

ユーザ情報を取得、登録、更新、削除するRESTサービスを実装します
前回GET/POSTを実装したので、今回はユーザー情報を更新するPUTメソッド処理を実装します!

#RESTサービス実装クラス
* 一件更新用のメソッドを実装
* UserDaoJdbcImplのupdateOneを呼びます

“`RestServiceJdbcImpl.java
//中略
@Override
public boolean update(User user) {

int result = dao.updateOne(user);
if(result == 0) {
return false;
} else {
return true;
}
}
//中略
“`

“`UserDaoJdbcImpl.java
//中略
// Userテーブルを1件更新.
@Override
public int updateOne(User user)

元記事を表示

「ソースないけどバグ直して」をランタイムで可能にするJavaバイトコードプログラミング

#はじめに
この記事は[シスコ同志によるAdvent Calendar](https://qiita.com/advent-calendar/2020/cisco)の25日目として投稿しています。
幸いタイトルのような無茶振りには遭ったことはありませんが、シスコではJavaバイトコードを操作する技術を使った監視製品を開発しているので、その技術について本記事でサンプルを交えて紹介します。

## この記事を読んで出来ること
![BCI_demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62311/10bc51e1-5fdf-137b-6b34-ee7430933487.gif)
おわかりでしょうか?HelloWorldは**Alice**に対して挨拶するプログラムだったのに、`-javaagent:agent.jar`というオプションを付けて実行すると、**Mallory**に挨拶するプログラムに変わってしまいました。

このカラクリは**JVMが読み込んだJavaバイトコードを実行時に書きかえ*

元記事を表示

いつかTomcat10を使用する……気になれないパッケージ名変更の闇

※この記事12/23が空いていたので、代わりに投稿しました。ライトなものです。

# Tomcatの最新バージョンは9.0

現在の Apache Tomcat の最新メジャーバージョンは9.0です。
https://tomcat.apache.org/
を見ると、2020/12/25 現在

* Apache Tomcat 9.0.41
* Apache Tomcat 8.5.61
* Apache Tomcat 7.0.107

が更新されています。2011/1にリリースされたTomcat7.0もようやく2021/3/31にEOLを迎えると発表されています。
http://tomcat.apache.org/tomcat-70-eol.html

いつかは、いま運用保守したり開発しているアプリケーションをTomcat10に乗り換える必要がありますが、ここに頭の痛い問題があります。Jakrta EE 9 のパッケージ名変更の影響です。

「Java EE 8 から Jakrta EE 9 になるとき、javax.\* だったパッケージ名が jakarta.\* になる話ですよね、たし

元記事を表示

AndoridアプリでGif画像を再生したい(Java,Kotlin)

投稿が遅くなり申し訳ありません。
今回はAndoridでGif画像を再生する方法について述べていきます。

##ライブラリの使用
AndoridにはGif画像再生のためのライブラリがいくつか用意されています。
しかもImageView内で再生できるので使いやすいです。
今回はその中でもよく使われるライブラリの1つglideを紹介します!

###1.build.gradleのdependenciesにglideを追加
まずはライブラリを追加しましょう!

“`
implementation ‘com.github.bumptech.glide:glide:3.7.0’
“`

もしインターネット上の画像を使うのであれば
Manifest.xmlに以下も追加しておきましょう!

“`

“`

###2.ImageViewを追加
Gif画像を貼り付けたいところにImageViewを指定しましょう!

“`

元記事を表示

ArchUnit 実践:Clean Architecture のアーキテクチャテスト

“`
// 実行環境
* AdoptOpenJDK 11.0.9.1+1
* Spring Boot 2.4.0
* JUnit 5.7.0
* ArchUnit 0.14.1
“`

## レイヤーの依存関係

基本的な考え方は、23 日目の [ArchUnit 実践:Onion Architecture のアーキテクチャテスト](https://qiita.com/kawanamiyuu/items/0bb30d7094adf93ca763) のオニオンアーキテクチャと同じ。

* 依存の方向は外側の層から内側の層への一方通行
* アダプター同士は依存しない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899/4ce90f90-3db8-40a9-b5d5-3d45eb9ea34f.png)

* Interface Adapters 層と Application Business Rules 層の関係について、制御の方向と依存の方向が逆転している

![image.png

元記事を表示

RESTfulなメール送信サービス+クライアントを作ってみよう

 ![xmax.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60058/f95ff656-7b90-dbd7-f7ca-9e1b00dff9e2.png) 
 メリークリスマス! 「Javaアドベントカレンダー2020」の最終日です。
 クリスマスらしく、楽しい(?)内容になるようにタイトルを変えました。ライブラリの紹介だけと思っていましたが、クリスマスだし、ライブラリを使って役に立つウェブサービスを作ってみよう、というわけです。
 RESTfulウェブサービスについて基本から説明しているので、この分野を知りたい人にもおススメですよ。

 なお、ライブラリの詳細は、投稿の最後にまとめましたので、気になる方は、先に、そちらを見てください。

#1.メールサービスの作成 — Senderクラス

##宛名を変えて、同じメールを一斉に送ってくれるサービス

 つまりですね、

  ○○ 様
  こんにちは、・・・。

 のような、宛名と敬称付きで、後の内容は同じ、というメールを、名簿にある人達に一斉に送

元記事を表示

新宿中央公園キャンドルナイトの塗り絵用投稿・鑑賞サイトについて

# はじめに
こんにちは、GxPの安藤(@rando-gxp)です。

この記事は[グロースエクスパートナーズ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/gxp)の25日目、最終日の記事となります。

今回は本日(2020年12月25日)と明日(26日)の2日間、新宿中央公園で開催されるイベント「Candle Night @ Shinjuku Central Park -灯(ほし)に願いを-」(以下キャンドルナイト@新宿中央公園)の中で、弊社が開発した塗り絵用投稿・鑑賞サイトについてお話させて頂きます。

# 今回のイベントについて
本イベントは、参加者に塗り絵で装飾いただいたキャンドルで会場を彩る、今回で3回目の開催となる参加型のイベントです。

一般財団法人公園財団様、小田急電鉄社様、工学院大学様と弊社グロースエクスパートナーズで構成される実行委員会が主催するイベントとなります。

イベントの概要についての詳細が知りたい方は、以下のプレスリリースを見て頂ければと思います。

> [小田急電鉄社](h

元記事を表示

Hibernateでtsrange型のマッピング方法

Hibernateで、PostgreSQLの「tsrange型」をマッピングするサンプルクラス(Entityクラス)です。
「tsrange型」のマッピング方法についての記事が少なかったので、記載してみました。

“`java:SampleEntity.java
package xxx;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import com.vladmihalcea.hibernate.type.json.JsonB

元記事を表示

Tomcat+JSPでの405 Method Not Allowedエラーへの対応方法

Tomcat8以降でJSPを動かす場合PUTとDELETEメソッドが使えないという問題があります。

https://stackoverflow.com/questions/23886941/http-status-405-jsps-only-permit-get-post-or-head

この制限により、JSPに対してPUTまたはDELETEメソッドによるリクエストを実行すると405 Method Not Allowedが返ってきます。コンテナレベルで遮断しているため、サーブレットの処理や設定を変えても効果はありません。

この問題はHTTPメソッドオーバーライドで掻い潜ることができます。ただしPUT,DELETEを許可することでセキュリティの問題が生じる場合がありますので本手法の適用は自己責任で判断してください。

# HTTPメソッドオーバーライド

やり方は簡単で、ヘッダにx-http-methodを付与し、POSTメソッドでアクセスするだけです。

#### PUTの発行例
“`console

curl -X POST -H “Content-Type:applicat

元記事を表示

Gradleのマルチプロジェクトを使ってモジュラモノリスを実現する

エキサイト株式会社メディアの開発担当の佐々木です。

弊社では、現在CMSの再開発をSpringBoot使って構築しています。現時点では人数とかも少数な為、モノリスな構成になっていますが、将来的にはマイクロサービスにはする予定で、最近少し聞くようになってきたモジュラモノリスの構成を意識して、プロジェクトを作成しています。Gradleのマルチプロジェクトを使用してモジュールごとにプロジェクトを分けて開発を行っています。下記にて概要を解説します。

# 一般的なSpringBootの構成

一般的なSpringBootのディレクトリ構成は下記のようになります。

“`shell:一般的なディレクトリ構成
├── gradle
│   └── wrapper
└── src
├── main
│   ├── java
│   │   └── com
│   │   └── example
│   │   └── demo
│   │   ├── controller
│   │  

元記事を表示

【Java・SpringBoot】RESTサービス② – POSTメソッド

ユーザ情報を取得、登録、更新、削除するRESTサービスを実装します
前回GETを実装したので、今回はユーザーを新規登録するPOSTメソッド処理を実装します!

#RESTサービス実装クラス
* 一件登録用のメソッドを実装

“`RestServiceJdbcImpl.java
package com.example.demo.login.domain.service.jdbc;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.example.demo.login.domain.model.U

元記事を表示

「依存関係逆転の原則(DIP)」を学んだ

## はじめに

Javaの学習を初めてしばらく経ったので、設計力を上げるため、SOLID原則を学んでいる。

学んだ内容について自分の中で咀嚼するため記事を書いてみた。

## 依存関係逆転の原則(Dependency Inversion Principle)とは何か

SOLID原則の一つであり、ソフトウェアモジュールを疎結合に保つための原則、方法論のこと。

下記のような原則が述べられている。

> A. 上位レベルのモジュールは下位レベルのモジュールに依存すべきではない。両方とも抽象(abstractions)に依存すべきである。

> B. 抽象は詳細に依存してはならない。詳細が抽象に依存すべきである。

引用 : [https://ja.wikipedia.org/wiki/依存性逆転の原則](https://ja.wikipedia.org/wiki/%E4%BE%9D%E5%AD%98%E6%80%A7%E9%80%86%E8%BB%A2%E3%81%AE%E5%8E%9F%E5%89%87)

## そもそも依存関係とは何か

一言で表すと、クラス間の結びつきのことで

元記事を表示

Androidアプリでありますまいか

ついにクリスマスイブ、この日を待っていました。[アジャイルを使ってクリスマスまでに彼女を作ろうとしていた彼は幸せな夜を過ごせるのでしょうか](https://qiita.com/Let_kdm_free/items/7287325f4a3541e4551e)…
某社のアドベントカレンダーは

[「Develop fun!」を体現する Works Human Intelligence Advent Calendar 2020](https://qiita.com/advent-calendar/2020/whi)
[「Develop fun!」を体現する Works Human Intelligence #2 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/whi2)

だが気にせず[^1] 今月は頑張って色々書いた。そして私は [こんな記事や](https://qiita.com/e99h2121/items/b5c2497000c32d6fd3c3), [こんな記事](https://qiita.com/e9

元記事を表示

【Java】Integerを==で比較した結果trueを返却していた問題

# 結論
Integer(≠int)を比較する場合に**==**を利用すると、-127~+128までの値はtrueを返却する**組み合わせ**がある。

# 何が起きたか
Integerを**==**で比較していた個所が、ある時から突然falseを返却するようになった。
※テストで使った値では正常になってしまったため気付かなかったようだ。

# 以下の2つの要素の組み合わせで発生する
## 1.Integerへの値セット方法
主に以下の3通りがある。
Integer i1 = 16;
Integer i2 = Integer.valueOf(16);
Integer i3 = new Integer(16)

上記の1のパターンはオートアンボクシングされ、コンパイルされた結果は2と同様にvalueOfメソッドを利用した処理となる。(1と2は同値)
参考:[【Java】オートボクシング、アンボクシング](https://qiita.com/chihiro/items/870eca6e911fa5cd8e58 “【Java】オートボクシング、アンボクシング”)

## 2.Integer

元記事を表示

VSCodeで作るJava開発環境&Spring Bootアプリケーション入門

皆さんこんにちは。
**Java Advent Calendar 2020(Qiita)24日目**の記事を書かせていただきます。

## はじめに
Javaでの開発が長いのですが、案件で使うエディタと言えば、eclipse(またはSTS)かIntelliJ IDEAが多かった私。InteliJに慣れてしまうと、ライセンス払ってでも**InteliJ一択**!だったんですが、ふと触ってみた**Visual Studio Code**がいい感じ!だったんです。本記事では、**Visual Studio CodeでJavaの開発環境**を構築していきたいと思います。

また、今回はJavaの開発で使われることが多い「**Spring MVC, Spring Boot**」(フレームワーク)で作る簡易アプリケーションも合わせて作ってみたいと思います。

## 想定開発環境
**OS**: Windows10
**Visual Studio Code**: 1.51.1(2020年12月)
※ VSCode, JDKのインストールは既に済んでいる前提
JDKのインストールについては、以前記事

元記事を表示

ArchUnit 実践:Onion Architecture のアーキテクチャテスト

“`
// 実行環境
* AdoptOpenJDK 11.0.9.1+1
* JUnit 5.7.0
* ArchUnit 0.14.1
“`

## レイヤーの依存関係

* 依存の方向は外側の層から内側の層への一方通行
* 一番外側のアダプター同士は依存しない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899/6bc4b692-b54e-4a04-8444-b3307cd4da3b.png)

https://dzone.com/articles/onion-architecture-is-interesting

## Java プロジェクトのパッケージ構成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899/678e24ee-4786-e87e-e379-a33599328b93.png)

## アーキテクチャテストの実装

“`java
package

元記事を表示

【Spigot】目次[ぐらんのプラグイン上達日記0]

#ぐらん
毎日投稿レベルで書く**予定**なので目次を作っておきます。

今後書いていく予定のもののタイトルも書いておくので
楽しみに待っていてくださ~い(^^♪
###01 開発環境構築
1. IntelliJのダウンロード
2. Spigotでサーバーを構成してみる

###02 Spigot plguin
1. 入退出メッセージの変更方法 ←←執筆中
2. 入室時にhubに自動テレポートするようにする
3. コマンドを実装してみる①

考え中

元記事を表示

【Java】プログラムを一時停止するThread.sleepの使い方

#プログラミング勉強日記
2020年12月23日
Android StudioでAndroid開発をしていて、音楽を一定時間流してその後一時停止するプログラムを書いたときにThread.sleepを使ったので、その使い方を簡単にまとめる。

#スレッドとは
 スレッド(Thread)は処理の実行単位の一つで、プログラムの初めから終わりまでの一連の流れのことをいう。スレッドにはシングルスレッドとマルチスレッドがある。

 シングルスレッドは、直列処理とも呼ばれている。プログラムの始まりから終わりまでが一本で処理される。
 マルチスレッドは、並行処理とも呼ばれている。2つ以上の処理を並行して行う。マルチスレッドを利用するためには、4つのステップが必要である。

1. Threadクラスを継承するクラスを作成
2. Threadクラスを継承するクラスでrunメソッドを実行する
3. Threadクラスを継承するクラスのインスタンスを生成する
4. 生成したインスタンスに対してstartメソッドを実行する

#sleepメソッドとは
 sleepメソッドは、プログラムを一時停止するときに使用

元記事を表示

リアクティブプログラミングをNoSQLで「体験」してみる(Couchbase Reactive APIに触れる)

# はじめに

プログラミング言語を巡って、常に新しいプログラミングパラダイムが生まれています。
ここでは、リアクティブプログラミングという新しいパラダイムがテーマになります(ちなみに、[プログラミングパラダイムについての日本語のWikipedia](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%91%E3%83%A9%E3%83%80%E3%82%A4%E3%83%A0)では、リアクティブプログラミングが、リストの最後に〜つまり、最も新しいものとして〜掲載されていました)。

さて、リアクティブプログラミングに関心を持った初学者が、リアクティブプログラミングを学ぶに際して、どういったアプローチが考えられるでしょうか?

手始めとして、まず概念的に理解することが考えられます。インターネットを「リアクティブプログラミング」というキーワードで検索すると、「リアクティブプログラミングとは(何か)」といった記事が、まず目につきます。

そして

元記事を表示

【Java】Qiita 週間 LGTM 数ランキング【自動更新】

# 他のタグ

[`AWS`](https://qiita.com/items/e24b6279326a462d456c) [`Android`](https://qiita.com/items/8b3af051428d746f26c5) [`Docker`](https://qiita.com/items/ae11fca7d2eba445b037) [`Git`](https://qiita.com/items/74eacdbf363e260981c3) [`Go`](https://qiita.com/items/49d4537d95f878b3e91a) [`iOS`](https://qiita.com/items/e61a29a383d0403e92fc) [`Java`](https://qiita.com/items/4c3f84836bfdbb137226) [`JavaScript`](https://qiita.com/items/eaa7ac5b62a0a723edbb) [`Linux`](https://qiita.com/items/362e81e53c3f

元記事を表示

OTHERカテゴリの最新記事