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

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

今更 Amazon Corretto で Servlet を動かしてよう

このエントリでは表題にもある通りこの先は選定に難しくなる Oracle Java の代わりに Amazon Corretto を使って Servlet を動かしてみましょう、という内容になります。
まあ、すでにいくつ同じような記事があるんでしょうね!! でもそんなの気にせず書いていきますよ。

## アプリ類を用意する
今回用意したアプリの各バージョンとかは次のとおりです。細かいバージョンはあってなくても、まあ動くんじゃないかなって思う。

– amazon-corretto-11.0.3.7.1-1-windows-x64.msi
– apache-tomcat-9.0.27.exe
– httpd-2.4.41-win64-VC15.zip
– VC_redist.x64.exe

### まずは Apache をインストール

1. VC_redist.x64.exe をまずは実行します。これは C++ の再配布パッケージですね。Apache のWindowsバイナリを実行するには必要になるっぽいです。
1. httpd-2.4.41-win64-VC15.zip を展開します。

元記事を表示

Eclipseの動的webプロジェクトでコンテキストルートをプロジェクトフォルダにする

– `(プロジェクト名)\.settings\org.eclipse.wst.common.component`を開く。
– ``
の部分を
– ``に書き換える。

“`xml:org.eclipse.wst.common.component


元記事を表示

ProcessingとSQLiteを連携する

Processing3上からSQLiteを使ってデータベース操作する方法のまとめ。

以下のサイトを参考にしています。

SQLiteを使う(オープン・クローズ)

## sqlite-jdbcをスケッチフォルダ内に保存する。

まずはProcessingを開いて、ファイルを保存する。するとスケッチのフォルダが作成される。(今回は、DB_test_1.pdeとして保存してみる)

次に、ProcessingからSQLiteを操作するのに必要なJDBCをスケッチフォルダに保存する。

JDBCはSQL言語ごとに様々なものがあるが、SQLite用JDBCは以下のサイトから入手できる
https://gith

元記事を表示

powermock-mockito2-2.0.2を使ってみる

#はじめに
以前でJavaの[jmockit](https://qiita.com/mima_ita/items/4e48a24561960851e3fa)を調べてみたんですが、ちょっと合わないのでプランBとしてMockitoとPowermockを調べた際のメモになります。

**Mockito**
https://site.mockito.org/

**Mockito JavaDoc**
https://javadoc.io/doc/org.mockito/mockito-core/3.1.0/org/mockito/Mockito.html

**Powermock**
https://github.com/powermock/powermock/

**検証環境**
java version “1.8.0_202”
Eclipse IDE for Enterprise Java Developers.
Version: 2019-03 (4.11.0)
Build id: 20190314-1200
JUnit4
mockito-2.23
powermock-mockito2-

元記事を表示

n == 0がNullPointerExceptionをスローする。

# 問題

突然ですが、次のコードは`NullPointerException`になる可能性があります。どのような場合でしょうか?

“`java
boolean iszero = n == 0;
“`

# 答え

答えは、変数`n`の型が`Integer`で、値が`null`の場合に`NullPointerException`が発生します。たとえば以下のような`Main.java`があるとします。

“`java:Main.java
public class Main {
public static void main(String[] args) throws Exception {
Integer n = null;
boolean iszero = n == 0;
}
}
“`

これをコンパイルし、実行すると、確かに`NullPointerException`が発生することが確認できます。

“`
$ javac Main.java
$ java Main
Exception in thread “main” jav

元記事を表示

Protocol Buffersについてのメモ書き

# 前準備
**公式ページ**: https://github.com/protocolbuffers/protobuf/releases
– 各言語バインディングをダウンロードしておく
– `protoc`が入っているものを環境に合わせてダウンロードしておく

# やること
## スキーマを定義する
(以下の例は https://developers.google.com/protocol-buffers/docs/javatutorial より引用)

“`proto:example.proto
syntax = “proto2”;

package tutorial;

option java_package = “com.example.tutorial”;
option java_outer_classname = “AddressBookProtos”;

message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;

enum Ph

元記事を表示

可読性を高めるif文の書き方-java

研修メモ。(自分用)

チームで開発する場合プログラムの読みやすさつまり可読性は重要となる。
・積極的にコメントを入れる。
・if文の条件は必ずコメントを入れる癖をつけたほうがよい。

例えば以下のような条件の場合

“`java:sample
//aがbと等しい または cがdと等しいかつ eはfと等しくない かつ gはhと等しくない
if (a == b || (c == d && e != f) && g != h) {
//処理内容
}

“`
条件が複数ありややこしいので
条件を整理する。&& g != hは絶対条件なので以下のように書き換えることができる。

“`java:sample
if (g != h) { // ここでg != h でない場合はスルーされる  
if (a == b) {
//処理内容
} else if (c == d && e != f) {
//処理内容
}
“`

処理内容にもよるが、多少行数が増えたとしても
パッと見た簡潔

元記事を表示

HttpURLConnectionのdisconnect()について

# はじめに

最近自宅で以下の`Sample.java`のようなコードを書いていた。

“`java:Sample.java
HttpURLConnection urlconn = null;
PurchaseItemInfo itemInfo = null;
try {
URL url = new URL([URL]);
urlconn = (HttpURLConnection) url.openConnection();
urlconn.setRequestMethod(“GET”);
urlconn.setInstanceFollowRedirects(false);
urlconn.connect();

try (InputStreamReader inReader = new InputStreamReader(urlconn.getInputStream());
BufferedReader reader = new BufferedReader(inReader);) {
do

元記事を表示

jmockit 1.48を使ってみる

# 目的
本記事の目的はjmockit 1.48について調査した際のメモです。

**ドキュメント**
http://jmockit.github.io/index.html

**ソースコード**
https://github.com/jmockit/jmockit1

**JavaDoc**
https://repo1.maven.org/maven2/org/jmockit/jmockit/1.48/jmockit-1.48-javadoc.jar

**検証環境**
java version “1.8.0_202”
Eclipse IDE for Enterprise Java Developers.
Version: 2019-03 (4.11.0)
Build id: 20190314-1200
JUnit4

# jmockitとは
xUnitを使用して単体テストを行う場合、依存する部品が問題になってテストが困難な場合があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/

元記事を表示

Custom Scalar実装(GraphQL-SpringBoot)

# はじめに
GraphQLには標準のスカラー(`Boolean`, `Int`, `Float`, `String`, `ID`)のほか、独自に定義した任意のスカラーを使用することができる。Javaでの実装について調査しデモを作成したものをまとめた。[^1]

[^1]: 本稿作成時点では公式のサンプルがdeprecatedなコンストラクタを使っていたのでそれを回避する方法を調べた

# 実装
## スキーマ定義
* カスタムスカラーを宣言する
* 標準スカラーと同様に変数の型として使用する

“`graphql
scalar ISODate

type Member {
memberId: ID!
name: String!
age: Int
birthday: ISODate
}
“`

## DTO作成

typeに対応するDTOクラスを作成する

“`java
import java.time.LocalDate;
import lombok.AllArgsConstructor;
import lombok.Data;

@AllArgsConstructor

元記事を表示

githubで最もやべー関数を発掘する

## はじめに
先日、職場で「自分が 改修したor 書いちゃった いちばんやべー関数」ネタで盛り上がりました。
みんないろいろ話してくれましたが、やっぱり僕の書いた「コマンドパターンのメインループ関数(1500行)」の圧勝でした。
なんであんなコード書いたんだろ。

そこで、今日は僕の傷ついたプライド癒すべくgithubから「世界でいちばんやべー関数」を発掘します。
つまり、「俺が書いた関数よりやべー関数に会いに行く」

## 結論
* マジでやべー関数は次の2つ
* **「opencvリポジトリの[cv::agast_cornerScore\](https://github.com/opencv/opencv/blob/master/modules/features2d/src/agast_score.cpp#L3383)関数」(複雑度1868)**
* **「SuiteCRMリポジトリの[OpenTag](https://raw.githubusercontent.com/salesagility

元記事を表示

Spring-boot+Heroku+RedisでLINE botの状態管理をできるようにした

# はじめに

前回「[リファクタリングしました(Lombokの利用、Spring JPAの利用、ラムダ式で例外ラッピング)](https://qiita.com/kaad/items/28100b6049a5eb8eee5b)」の続編です。

LINE botのハンドリングのために毎回識別ワード(例えば「買い物リスト追加」とか「買い物リスト確認」)を入力しないといけないのが面倒なので状態を持たせて入力を簡略化できないかチャレンジしてみました。

## ターゲット

こんな人におすすめです

– Spring-boot + Redis で何かしようとしている人
– LINE bot で何かしようとしている人

# Redisを利用する

まずは、ローカルからRedisを利用できるようにします。
ざっくりこんな修正をすれば、Redisを利用できます。

https://github.com/ken-araki/line_bot/commit/02035909b79f79c28d0dcb57d3c82db69b27f713

## build.gradle

依存関係に`boot:spri

元記事を表示

組み合わせ計算(パスカルの三角形)(Java)

##数学的な公式

組み合わせ計算は、数学的には以下の式で表現できます。

“`math
nCr=\frac{n!}{r!{(n-r)!}}
“`

##プログラムにおける問題

プログラミングにおいては数学の公式通りに計算して、組み合わせを求められるケースは少ないです。
理由は分子の階乗計算で、**オーバーフロー**してしまうからです。

“`math
n! = n\times(n-1)\times(n-2)\cdots2\times1
“`
例えばn=13とするだけでint型の最大値を上回りオーバーフローします。
n=22とすると、long型でもオーバーフローします。
従って、公式通り計算することはできません。

そこでオーバーフローしにくい計算方法で実装することになります。
本稿では、パスカルの三角形を利用した計算方法を説明します。

##パスカルの三角形を利用した計算

パスカルの三角形は以下の図の通りです。[1]
上段から順に、横並びの2数の和を1段下に記述していくことで作成できます。
組み合わせ計算の結果に対応することが知られていますので、これを利用します。

!

元記事を表示

VBA Javaの厳密等価演算子===に近い異型不許容等価関数

“`vb
Function isTypeValueEqual(a, b) As Boolean
If VarType(a) = VarType(b) And _
a = b Then
isTypeValueEqual = True
Else
isTypeValueEqual = False
End If
End Function
“`

つまり型が違うときは等価ではないので、型が等価かどうかを判定する。
これを勝手に異型不許容等価演算と呼ぶことにする。
これをUDF、ユーザー定義関数化しているので異型不許容等価関数ということにする。
実際は文字列型は文字列型に寄せる必要があるため、完全に厳密等価演算子というわけには行かないが、基本の異型不許容等価演算の部分はこれで行けるかもしれない。

元記事を表示

IN句で使うプレースホルダ部分を作成する方法

# はじめに
SQLの条件部分を動的に作成したい時があると思います。
具体的には、IN句に設定する値が動的に変化する場合です。

“`sql
SELECT foo FROM sample_table
WHERE bar IN (?, ?, ?, ?, ?); — ここの?の数が定まらない時に対処したい。
“`

このようなSQLはパフォーマンスに問題が発生しがちではありますが、小規模案件では許容されることがほとんどではないでしょうか。
忘れたころにやってくる問題というイメージがあり、愚直にfor文を使えば書けますが、そろそろ簡潔に書きたいと思います。

# Javaによる実装

“`java
int size = 10; // 作成したい?の数
String placeholders = IntStream.range(0, size)
.boxed()
.map(i -> “?”)
.coll

元記事を表示

JavaED Full Edition(pleiades)の立て方

初めましてNev(ねぶ)です!
今回初めてJavaを触るので、勉強のログ用に開発環境の立て方を残しておきます!

※今回は個人的なJavaの勉強用の開発環境の立て方になります。商用利用する際は必ずライセンス確認をしましょう!!
Javaのライセンスチェックはこちらから
→https://java.com/ja/download/

Javaってなんぞやって方はこちらからどうぞ!

【超初心者向け】今さら聞けない!Javaとは?

!!Warning!!
かなりメモリを食うので、PCのメモリをチェックしておくことをお勧めします!!!
OSが最新の状態にアップデートされてるか必ず確認しましょう!!

#事前解説
今回はJavaの統合環境兼日本語化プラグインの入った開発環境を建てたいので”Eqlipse”ではなく日本語化プラグインも入った”JavaED Full Edition(Preiades)”をインストールしましょう!

Preiadesとはなんぞやって方はこちらをご覧ください!
→https://ja.wikipedia.org/wiki/Eclipse_(%E

元記事を表示

JavaのFutureの取り回しがダルすぎるので色々工夫してみる。

# まえがき
何時もの如く、ブログからの転載です。

“`
街の名はホーチミン1区。
一夜にして崩落・再構成されパフォーマンス向上の租界となったこの都市は、マルチスレッドを臨む境界点で、極度の緊張地帯となる。
ここで世界の均衡を守るため暗躍するJava標準クラスFuture。この物語はこのFutureに挑む開発者の戦いと日常の記録である。
(血界戦線風)
“`

ということで、久々の記事はjavaの非同期処理の返り値ラッパーである、Futureの取扱いについて、僕がよくやる実装Tipsについて書いていきたいと思います。

今回のテーマとしては、

– **マルチスレッド、非同期処理でも上手いことエラーハンドリングしたい**
– **Futureの返り値展開をスッキリさせたい**

の2つです。

# 1. 標準的な非同期処理とFutureの取り回し
Javaでマルチスレッド処理を書く際、多くの人は以下のような処理を書いていると思います。

0. Exec

元記事を表示

ユーティリティークラスについてのぼやき

なぜ人々は`Util`なんて情報量ゼロの名前をつけた**クラスに**何でもかんでも押し込んでしまうのか?
という問いをよく見かけますが、それは何でもボンボンと放り込んでいるというのが一つの答えです。
とはいえ、それがクラスじゃなければ、多少は事態がマシになるのではないでしょうか?

“`java:A
public class Util {
public static int util1() {
return 0;
}

public static int util2() {
return 0;
}

public static int util3() {
return 0;
}

public static int util4() {
return 0;
}
}
“`

よくあるstaticメソッドの集合ですが、一つやるべきことを忘れていますね。そう、念の為のコンストラクタ封印。
つまり、本来はこうすべきだったのです。

“`java:A2
public class Util {
private Util() {

元記事を表示

dbpediaの研究 その25

#概要

dbpediaが難解なので、手出してみる。
javaで、取得してみた。

#サンプルコード

“`
import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class Main {
public static String sendGet(String url, String param) {
String result = “”;
BufferedReader in = null;
try
{
String urlNameString = url + “?” + param;
URL realUrl = new URL(urlNameString);

元記事を表示

Mavenのデフォルトのコンパイラバージョンは1.5

# はじめに
Javaで個人的に遊んでいたところ、ちょっとはまったことがあった。
割と基本的なことなのかもしれないけど、知らかなったので備忘録的に記載しておく。
(資格で得た知識が多いからこういう実践的なところが結構抜けてるんだよなぁ・・・)

# 発生した事象
Maven の project update を実行すると、JRE 1.5 でコンパイルされるため、JDK 1.6 以降の構文で記載したプログラムはコンパイルエラーになる。

以下、詳細。

事前の状態。
JRE System Library が JRE 1.8に設定されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254168/92ab5bb7-dcbd-da15-9e2b-8955f7e1cc1e.png)

右クリック⇒Maven⇒Update Project を実行
(またはAlt+F5)
![image.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

OTHERカテゴリの最新記事