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

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

Azure EventhubsにSASトークンを使う方法(Java)

# はじめに

こんにちは、とがりと申します。
SREをしています。

# なぜ書いたか

Azure Eventhubsを使っていて調べても全然ドキュメント出てこなく、詰まったから。
本記事はJavaの環境が既に用意されている人を対象にしております。(maven, gradle, etc.)

# 本題

### やりたいこと

######アンドロイドアプリからAzure Eventhubsにデータを送信
Shared Access Signature 用いてEventhubsにアクセスしたい。[1](https://docs.microsoft.com/ja-jp/azure/event-hubs/authenticate-shared-access-signature)
しかし、SASを持っていればEventhubsに対して半永久的にアクセスすることができてしまうため
クライアントサイドに配置するのはセキュリティの観点で不安である。
何かいい方法がないかと探していたところSasからTokenを生成できるという情報を得た。
なのでSasTokenを用いてEventhubsにデータ

元記事を表示

アルゴリズム 体操18

#Reverse k Elements
単一リンクリストと整数「k」が引数として渡されます。リストのk要素ずつ反転させるアルゴリズム体操。
k <= 1の場合、リストは変更されません。k >= n(nはリンクリストの長さ)の場合、リンクリスト全体を逆にします。

##例
以下は、k = 3で、3要素ごとに反転した例です。
![Screen Shot 2020-01-23 at 9.51.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/6e6d8cbe-00ad-b2bd-3a57-d0efffdf6ecf.png)
以下は、k = 4で、4要素ごとに反転した例です。
![Screen Shot 2020-01-23 at 9.51.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/93ab81a9-c111-effc-9f0b-6a5ab257c679.png)

##Solution

元記事を表示

ArrayListのnewとclear()では挙動が異なる

地味にハマってしまったので。

# はじめに
Javaでリストを扱う時、よくArrayListをnewして使うと思います。

“`hoge.java
List list = new ArrayList<>();
“`

そのArrayListを使い回したいという時にGoogle先生に聞いてみると、

1. newする
2. ArrayList.clear()メソッドを使う

の2通りをオススメされると思います。そして、両者の違いについては特に触れられず、強いて言えば「実行速度が違うよ」と言っていくらかQiitaの記事がヒットすると思います。

しかし、実際のところは速度だけではなく、挙動にも異なる点があります。

# newとclear()の違い
1次元リストから要素を2つずつ取り出して2次元リストを作る場合を想定します。

以下にサンプルコードを示します。
まずはnewした場合からです。

“`sample.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Lis

元記事を表示

匿名クラス(stream api 導入を目指して)

## 目的
stream apiを学ぶ上では匿名クラスの設計及び実装の考え方の理解が不可欠だと感じた.
メソッド参照,関数型インターフェース,ラムダ式,ジェネリクスを用いた設計(インスタンススコープ及びメソッドスコープ,PECS原則に基づいた設計)学習前の入口となる匿名内部クラスについて学ぶ.

## 入れ子クラス

ブロック({})内で宣言されたクラスを「入れ子クラス」(Nasted Class)と呼ぶ
>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497973/ceed2433-13b0-7da7-bf5a-be46fe12a583.png) 入れ子クラスのイメージ図.

“`NastedClazzSample.java
public class NastedClazzSample {
static class StaticClazz {} //static member class

class MemberClazz {} //menber class

元記事を表示

Android StudioでJavaのversionで躓いたのでまとめる

# はじめに

ここ数ヶ月、実務インターンをするようになってから、インターン先が変わるたびに環境構築をしているのですが、適当にやっているせいでJDKのバージョンが原因なエラーに幾度となく躓いてきました。

毎回調べて、

ああ…JDKのversionが原因か。で、どうするんだっけ。と調べるのが不毛なため備忘録として記事にしました。

この記事は自分のユースケースにおける対処法なため、他の方には当てはまらないかもしれませんが、随時updateしていければと思います。

# 躓いた具体的なユースケース

まず、

“`Powershell
% java -vesion
“`

とターミナルで打つと、ご自身のJDKのバージョンがいくつか確認できるのでご参考までに。

## How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

この時の自分のJDKは

“`Powershell
java 12.0.2 2019-07-16
“`

でした。

> Java 9で「モジュール」の機能が

元記事を表示

[java] HttpURLConnection POST

##使い方
以下の通りである。

~~~java
try {
//コネクション
URL url = new URL(“URL”);
httpURLConnection_ = (HttpURLConnection) url.openConnection();
httpURLConnection_.setDoOutput(true); //POST可能にする
httpURLConnection_.connect();

//送信したいデータ
String param = “param1=1”;

//リクエストボディに送信したいデータを書き込む
OutputStream os = httpURLConnection_.getOutputStream();
BufferedWriter writer = new BufferedWrite

元記事を表示

Jerjey(Jax-rs)でmultipart/form-dataの受け取り

##はじめに
[[Android]端末からサーバへ画像のアップロード](https://qiita.com/hire1105/items/b5a8681405d9f437f759)にて受け取る側がServletになっていました。本当はJerjeyで受け取りたかったのですが、勝手がわからず妥協していました。今回その方法がなんとなくわかったので紹介させていただきます。

###環境
* Eclipse 4.13.0
* java 11
* Jerjey 2.29
* 入れ方は[こちら](https://qiita.com/hire1105/items/3cc5c70727ea68bff83a)

##multipart/form-dataを対応させる

以下をダウンロードしてください。

* [jersey-media-multipart.jar](https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-multipart)
* [mimepull.jar](https://mvnreposit

元記事を表示

spring-batchでreaderの値に応じてwriterを動的に切り替える

たとえば、readerが整数を読み込み、偶数・奇数で異なるwriterを呼び出す、という例を考える。

“`java
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
im

元記事を表示

JConsoleがlocalで接続できないとき

知りたい情報をドストレートに射抜いてくれる日本語記事は検索しても出てこなかったので記します。

**解決の助けになった記事(英語)**
https://community.oracle.com/thread/1177644
#現象
jconsoleなるJavaのプロセスを監視するものを使う必要が生じたので、常駐してるJavaプロセスにローカルでアクセスしにいったところ、4つあるうち1つのプロセスだけアクセスできなかった。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571578/54dcb4a7-3ac9-f892-2ce0-7a9f640a2d2f.png)
ローカルなのになんで失敗するの?接続が成功しませんでした?

#対処法
目的の*jar*ファイルに監視するオプションを付与してあげるとJconsoleで監視できるようになった。
例)コマンドプロンプトでJMXで監視するオプションを付与して実行する。

“`console:コマンド(win10)
java -Dcom.sun.ma

元記事を表示

Java基本文法メモ

## 変数と定数
#### **宣言**

“`java

/* 変数宣言 */
boolean varA; // boolean型/宣言のみ
varA = true; // 代入のみ
byte varB; // 8bit(-128~127)
short varC; // 16bit(-32768~32767)
int varD; // 32bit(約-21億~約 21億)
long varE; // 64bit(なんかいっぱい)
float varF; // 32bit浮動小数点数
double varG; // 64bit浮動小数点数
char varH; // 16ビットUnicode文字
String varI // 文字列型(参照型)

/* 定数宣言 */
static final data_type varJ = valA; // static + final修飾子

“`

## 配列

#### **固定長配列**
“`java
/* 宣言 */
data_typeA[] arrayA = new data_typeA[index_max_value];
dat

元記事を表示

アルゴリズム 体操17

#Rotate a Linked List

##説明
単一リンクリストのヘッドノードと整数 nを指定すると、リンクリストを n回転させるアルゴリズム体操。

以下、2つの例があります。引数として渡されたリンクリストと整数 n = 2回転後の出力です。

n の値は、リンクリストの長さよりも大きくなる可能性があることに注意してください。
![Screen Shot 2020-01-22 at 5.20.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/f0730925-38e5-32db-c8b8-cd6a51a0576f.png)

n = -2の時、
![Screen Shot 2020-01-22 at 5.20.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/e5303455-94e7-6413-30ef-289a348ef097.png)

##Solution
### Ru

元記事を表示

【eclipse/github】eclipseで作ったプロジェクトをgithubで共有しよう 初学者用

#eclipseって?
統合開発環境(IDE)のひとつ
エディタとしてソースコードを記述できるのはもちろんのこと、サーバーソフトを内包していてより本番に近い形でプログラムを実行したりと、とてもすごいヤツ

#githubって?
[githubはこちら](https://github.co.jp/)
ここでは説明しないので、各自調べましょう(出だしから投げやり)

###この記事の前提
– githubで空のリポジトリを作っている([作り方はこちら](https://qiita.com/programiblis/items/f60c9d38fc996871adbc))
– eclipseをインストールしている(この記事ではJava用のeclipseを使います)

では、この記事の目的であるeclipseで作ったプロジェクトをgithubにアップロードしていきましょう

#eclipseで作ったプロジェクトをgithubで共有しよう
まずは、アップロードするためのプロジェクトを作成していく
1. ファイル→新規→その他をクリック

|![git_eclipse00.png](https

元記事を表示

JavaでNumer0nの対戦ゲームを作ってみた(AIも作ったよ)

#JavaでNumer0nの対戦ゲームを作ってみた

##はじめに
今回、大学の授業でJavaでサーバ・クライアント間の通信を介した何かを作るという課題が出たので、高校生の頃、授業中によくやっていたNumer0nのゲームを作ってみようと思った。
高校生の頃、Numer0nのゲームにはまりすぎて、1手目で〇EAT〇BITEになる確率を手計算で求めて楽しんでた気がする...

この記事を読んでくださっている方は、Numer0nの基本的なルールは知っていると思うのでそこのところは割愛させていただきます。
[ヌメロンWikipedia](https://ja.wikipedia.org/wiki/Numer0n)

##開発環境
Java:version 7
Eclipse: Juno 4.2
OS: windows10

##開発方針
今回のシステムで実装したいことは、
1. サーバ・クライアント間の通信を行い、複数のクライアントが同時にアクセスでき、ルームを作成し、対戦ができる
2. それなりに強いコンピュータ対戦もできるようにする(アルゴリズムの実装)
3. 入力ミスや数値の重複などに

元記事を表示

spring-batchのpartitioning使用時のReader must be open before it can be readの原因と対策

# 現象
以下のようなbean定義をしたところエラーになり実行できなかった。

やろうとした事としては https://docs.spring.io/spring-batch/docs/current/reference/html/scalability.html#partitioning の、spring-batchのPartitioningを試している。partitioningの情報(“`fileName“`)が“`stepExecutionContext“`に入るため、beanを“`@StepScope“`にしている。

“`java
@StepScope
@Bean
public ItemReader itemReader(@Value(“#{stepExecutionContext[‘fileName’]}”)
Resource resource) throws IOException {
“`

エラー内容は以下のとおり。

“`java
org.springframework.batch.item.ReaderNotOpenEx

元記事を表示

[Java]eclipseでJerjey(Jax-rs)を利用したAPI作成

##はじめに
mavenとかgradleを使わないで実装する方法があんまりなかったので書こうと思います。

##Jerjeyの導入
* [Jerjey](https://eclipse-ee4j.github.io/jersey/download.html”Jerjey”)から最新版をDL。
* jaxrs-ri-(version).zipを解凍し、中の[lib]ファイルの中身をEclipceで使うTomcatの[lib]内に入れる。

##プロジェクトの作成
Eclipseで動的Webプロジェクトを作成し、
パッケージ[com.sample.api]とその下にクラス[SampleApi.java]を作成する。

##web.xmlの作成
WebContent/WEB-INFに[web.xml]を作成し、以下をコピペ。

“`xml:filename.xml

jarファイルに画像リソースを含める

## IntelliJからjarファイルを出力すると、画像が表示されなくなる問題
Swingを用いたGUIツールを作製したとき、IntelliJ上で実行した場合は画像ファイルがきちんと表示されるが、jarファイルとして出力すると画像ファイルうまく表示できなくなるという問題に直面した。
ググったところ、よく知られた現象らしく、解決策もすぐに出てきた。以下はその解決策を自分用のメモとしてまとめたものである。

## 状況説明
JavaのGUIツールキットであるSwingを練習するため、砂時計アイコンが表示されるだけの簡単なプログラムを作製していた。
![スクリーンショット 2020-01-22 10.42.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329378/cac66c4d-1e5d-879f-87a8-29d9f3e86279.png)
こんなの

アイコンはhourglass.pngファイルという名前で、srcフォルダ直下に保存した。また、アイコンファイルの読み込みは以下のように記した。

元記事を表示

[Android]端末からサーバへ画像のアップロード

##はじめに
Androidで画像をPOSTし、サーバに保存する機能でてこずったため自分の備忘録兼、アウトプットとして書きます。プログラムのお仕事半年もしてないからいろいろおかしいかもしれないけど許してね。

###追記
ご指摘を受けました。ありがとうございます!(OkHttp導入・AsyncTask変更済み)
>OkHTTP2はobsoletes扱いです。最新の4.3.1を使うようにしましょう。

https://square.github.io/okhttp/changelog_3x/#version-300-rc1
https://square.github.io/okhttp/changelog/

##環境
AndroidStudioでOkHttpを利用しています。
##OkHttp導入
* AndroidStudio画面左上の「Android」を「プロジェクト」に切り替え。
* [app]内のbuild.gradleを開く。
* ~~dependencies内に
“`
implementation ‘com.squareup.okhttp:okhttp:2.7.5’
`

元記事を表示

バッチファイル入門(for文、配列、遅延環境変数)

# 動機
「○○系の機能の呼び出し元を知りたいから、一覧化して」
と言われて数えてみたら

* ○○系の機能は150弱
* Javaファイルは15000個

あったので、IDE使って150回検索するのも辛そうだったのでバッチファイルで何とかしてみた。
何故bashじゃないのかとか何故そんなことしないといけないのかは聞かないでほしい。

# 作った `bat` ファイルと実行結果

“`grepCallHierarchy.bat
@echo off

setlocal enabledelayedexpansion
set i=0
for /f %%a in (targetList.txt) do (
set /a i+=1
echo !i! %%a
call set Arr[!i!]=%%a
)

pause

for /r %%a in (*.java) do (
for /f “tokens=1,2,3 delims= ” %%b in (%%a) do (
for /l %%j in (1,1,%i%) do (
if !Arr[%%j]!==

元記事を表示

VSCodeでLombok

#何の記事?
VS CodeでSpring Bootアプリケーション作成時、Lombokが仕事を放棄しているのではと感じたときのこと。

#どんな状態?
DTOやEntityに「`@Data`」をつけても`getter`,`setter`でコンパイルエラーになるし、補完にも出てこない。

#結論
放棄していない。

VS CodeでLombokを使用するにはSpring Bootの依存関係だけでなく、拡張を入れてあげる必要があるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287607/7d59e9f3-fd3d-8a4e-4aa5-56841f5f5e04.png)

これをインストールするとVS Codeの再起動が求められます。
再起動し、ビルドが完了するとコンパイルエラーが消えています。

あともちろん補完にも出るようになります。

元記事を表示

Cassandra×SpringBoot 奮闘記録

# この記事の概要
– Cassandraに触れたことがなかったので、構築〜SpringBootのアプリケーションから参照・更新をすることろまでをやってみたときの記録
– 環境はローカルPC(Mac)

# 参考
Cassandra: http://cassandra.apache.org/doc/latest/
SpringDataCassandra: https://spring.io/projects/spring-data-cassandra

# Cassandraの構築

インストール

“`bash
# Cassandra本体
brew install cassandra
# CQL(Cassandra Query Language)
brew install cql
“`

起動

“`bash
cassandra -f
“`

> Connection error: (‘Unable to connect to any servers’, {‘127.0.0.1’: error(61, “Tried connecting to [(‘127.0.0.1’, 9

元記事を表示

OTHERカテゴリの最新記事