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

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

クラウドネイティブ時代のApache Camel

こんにちは、レッドハットの駒澤です。
今年のRed Hat Forumでは、Apache Camelの魅力について紹介しました。
Apache Camel はオープンソースのインテグレーションフレームワークです。2007年に産まれて10年以上、IT環境の変化とともに進化してきました。
クラウドネイティブなアプリケーションが増えてくると、連携の組み合わせもより複雑になっていきます。そのような連携をシンプルに開発する仕組みとして、EIPを実装しています。今回は、最新のサーバーレス技術である、Camel Kもデモを交えて紹介しました。

セッション資料:http://redhat.lookbookhq.com/rhft2019-matome/65-25?lx=ChT-oZ

今回私がテーマにしたかったのが、「企業システムにおけるインテグレーションのあり方」です。
長年蓄積されたIT資産は、もはや全体を把握することも難しいくらい複雑になっていますが、少し大きな視点でシステムを見つめ直すと解決策が見えてくるのではないかと思います。
そこで私は、「企業システムをシルクロードのような経済圏として見て

元記事を表示

2つのEntityでのやり取りで簡単そうなのに意外と難しかったやつメモ

##難しいというか長かった
完全に備忘録です

モデルが2個あって
PKがかぶってるデータを排除して
のこったデータをリストとして保持する

“`.java
package test;

public class Models {
class Model1 {
private String id;
private String name;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

class Model2 {
private String id;
private String name;

public String getId() {
return id;
}

元記事を表示

Java 7以降でのEnumの差別

1.中黒「.」(U+30FB)が使えなくなったため

  例:
  Java 7 以前の場合
   enum 学校 {
      …
      保育園・幼児園
   }
  Java 7 以後の場合
   enum 学校 {
      …
      保育園幼児園
   }
    

元記事を表示

jcmdを使ってみよう

みなさん`jstack`でスタックトレースを出力したり、`jmap`でヒープダンプを取得したことがあると思います。

でも最近(?)は`jcmd`だけでどちらも賄えます。

まず`jcmd`を引数なしで実行してみましょう。

“`sh
$ jcmd
62818 com.example.demo.DemoApplication
62819 jdk.jcmd/sun.tools.jcmd.JCmd
62810 org.apache.maven.wrapper.MavenWrapperMain spring-boot:run
“`

このようにマシン上で動いているJavaアプリケーションのPIDとメインクラスが一覧されます。

次に`jcmd`にPIDを渡してみましょう。ここでは`DemoApplication`のPIDを渡してみます。

“`sh
$ jcmd 62818
62818:
The following commands are available:
Compiler.CodeHeap_Analytics
Compiler.codecache
Compiler.codeli

元記事を表示

メソッドをオーバーライドする時にOverrideアノテーションをつけるべき理由

### Overrideアノテーション
Java1.5で追加されたアノテーションです。メソッド宣言だけに使えて、親クラスのメソッドをオーバーライドしていることを表現します。Overrideアノテーションをつけなくてもオーバーライドは可能です。では、なぜOverrideアノテーションをつけるべきなのか?というのが本記事になります。

### Overrideアノテーションをつけた方が良い理由
以下のような親クラスがあるとします。

“`Parent.java
public class Parent {

private String something;

protected void setSomething(String something) {
this.something = something;
}
}
“`

このクラスを継承しsetSomethingメソッドをオーバーライドする必要があったため以下のコードを書きました。

“`Child.java
public class Child extends Parent {

元記事を表示

Javaでコンソールでのキー入力を1文字ずつハンドルしたいときにJLineを使う

# 概要

このエントリでは、Javaでコンソール入出力で動作するプログラムを書くときに、1文字ずつ入力をハンドリングしたい場合の方法について扱います。

# 背景

Javaでは、標準入出力を扱うStreamがありますが、1文字ずつ入力を「読み込む」ことはできますが、キー入力のイベントを直接ハンドルすることはできません。

このため、例えば「電卓」プログラムを作るときに「+」を押したらすぐに何かの処理を行う、といったことは標準のライブラリだけでは実現できません。

# JLineを使う

## JLineとは

[JLine3](https://github.com/jline/jline3)は、CUIアプリケーションを開発するときに使えるライブラリです。いくつかの有名どころのOSSでも利用されています。

JLine3は、Windows環境などでのプラットフォーム独自のターミナルの制御にも対応します。ここではプラットフォームネイティブのライブラリが必要となるため、[JNA](https://github.com/java-native-access/jna)もしくはJANSIを使用

元記事を表示

ユーザー視点のプログラムを書くために(1)

# ユーザー視点のプログラムってなんだろう?
今日もシステムは稼働しています。
さて、どうでしょう。
もし、ログインしてとある画面を操作してみたら、なかなか応答が返ってこないなぁ、、、
ということが起きたら。

これにはいくつかの影響が考えられるでしょう。

– プログラムの処理が終わっていない
– メモリ枯渇によるDBの応答不能、エラー
– 上記原因によるWebサーバの停止
– ホスティングサービス上の障害、メンテナンス
– etc

そして最悪なのが、自分が書いたプログラムがその原因だったのパターンですよね。

そうならないようにユーザー視点のプログラムを書けるようになりましょう。
そうすれば、自分の書いたプログラムが常に生きている状態となり、
ユーザーに喜んでもらえるシステムを維持することができます。

# (私的)良いプログラムの3点セット
– プログラム行数が短い
– 処理時間が短い
– メモリ使用が最適化されている
まずはこの3つを意識すれば、大体運用上死なないプログラムになります。
コードレビューやリファクタリングする際も、
この視点を持つことでより良いプログラムにできる

元記事を表示

Swift Network.framework Study 20191203

# Study

Network.framework
Study:Client側

## 環境

Client:Swift、Xcode
Server:Java、NetBeans

# Client Source Swift

“`swift
import Foundation
import Network

func startConnection() {
let myQueue = DispatchQueue(label: “ExampleNetwork”)
let connection = NWConnection(host: “localhost”, port: 7777, using: NWParameters.tcp)
connection.stateUpdateHandler = { (newState) in
switch(newState) {
case .ready:
print(“ready”)
sendMessage(connection)
c

元記事を表示

新卒でJava Silverに合格した体験記

2019年3月に**Oracle Certified Java Programmer, Silver SE 8 認定資格**を取得していて、これから受験しようと思っている人のためになればと思い、記事を作成しました。

## Java Silverとは
Oracle社が提供しているJava技術者向けの資格の1つで、今回僕が受けたテストは、「**Oracle Certified Java Programmer, Silver SE 8 認定資格**」です。
公式によると

> Oracle Certified Java Programmer, Silver SE 8 認定資格は、Javaアプリケーション開発に必要とされる基本的なプログラミング知識を有し、上級者の指導のもとで開発作業を行うことができる開発初心者向け資格です。
> https://www.oracle.com/jp/education/certification/jse8-2489021-ja.html

この試験のレベルは入社してからJavaの基礎的な研修を受けて、業務を数ヶ月こなせば初見でも全く分からない問題はないかなとい

元記事を表示

API等で取得した情報をMySQLのデータベースに格納するときに、2バイト文字が文字化けしてしまったときに確認すること

#はじめに

取得した2バイト文字が文字化けしてしまい、色々確認して解消したというメモに近いものです。

#環境

– MySQL
– Java

JavaのHttp Clientを利用してAPIを取得したデータを、
JDBCドライバーを利用してMySQLに接続し、DBに入れようとしています。

#そのいち

テーブルを作成した際に、お決まりの呪文を唱えているか。
お決まりの呪文は、以下の通りです。

“`SQL
set character_set_client = utf8;
set character_set_connection = utf8;

CREATE TABLE `TABLE_NAME` (

(略)

) DEFAULT CHARSET=utf8′;

“`

ポイントはSQLを流す前に呪文を唱えることですが、
心配性な方は、CREATE TABLE文の終わりでも呪文を唱えましょう。

#そのに

HttpClientでリクエストをビルドする際、呪文を唱えているか

“`Java
HttpClient client = HttpClient.newBuil

元記事を表示

Mavenのscopeに何を書いたら良いのかわからなかったので調べてみた

Maven使うときにpom.xmlにimportするとき、だいたいネットから拾ってコピーしてくるけど、ものによってタグが異なることに躓いたので、メモ。

公式([Dependency Scope : Maven – Introduction to the Dependency Mechanism](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope))によると、主に5種類のパターンがある。(依存型pom – dependencyManagement でのみ使える、Maven 2.0.9で追加された `import` を含めると6種類)

> | scopeの種類 | 説明 |
|:–|:–|
| compile | scope の指定を省略した場合のデフォルト値です。全ての状況でクラスパスに追加されます。 |
| provided | ライブラリが JDK やコンテナによって提供される場合に指定します。コンパイル時

元記事を表示

Javaでレベルの低い文字列比較の話

この記事は[静大情報LT大会 Advent Calendar 2019](https://adventar.org/calendars/4733) 3日目の記事です。

#はじめに
レベルの低い話です
Javaがとりあえず普通並みにできると読みやすいです。
文字列比較したことがあればとりあえず読めます。

#復習(?)
Javaで文字列比較を行うときは、 「==」で比較してはいけません。
String#equalsメソッドを使いましょう。

“`java
public class Test {
public static void main(String[] args) {
String a = “HelloWorld”;
String b = “Hello”;
b += “World”;

System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
}
}
“`

#ちょっとまってくれ「==」でもtrueになるけど

“`java
publ

元記事を表示

BOM付きのCSVインポート

こんにちは、エンジニアのミスダです。今回は、csvインポートでBOM付きのUTF-8の書き込み、読み込みに挑戦したことを記載します!

## 背景
業務系のシステムを開発していると一括で「データを作成したい!」って要望を受けます。。。
そんな時、私は、csvでのインポートを最初に考えます。APIを作成すると相手にも開発コストがかかりますしね。

**ここで結構問題になるのは、csvの編集方法です。**
*Microsoft Excel*を利用してないですか?やはり、編集しやすいですよね!

## 問題
*Microsoft Excel*の利用を考えて際に、Shift-JISでCSVを作成すれば編集できます。もし、DBがUTF-8だと、サーバー側で文字コードのコンバートが必要になります。こうなると、文字コードとの戦いです。正直、勝てる気がしません。

そんな時、BOM(byte order mark)付きのUTF-8であれば、*Microsoft Excel*で文字化けしないで開けるようです!

## BOM付きでUTF-8ファイルの生成
今回は、JAVAでファイルの生成します。UTF

元記事を表示

Javaによる任意の文字列作成コード

“`java
import java.util.Random;

public class Test {
public static void main(final String[] args) {
final String romaji = “abcdefghijklmnopqrstuvwxyz”;
final String number = “0123456789”;
final String generator = romaji + romaji.toUpperCase() +number;
System.out.println(getStr(generator, 10));
System.out.println(getStr(generator, 10));
System.out.println(getStr(generator, 10));
}

private static String getStr(final String input, final

元記事を表示

Java / 文字列と変数の比較でヌルポになるのを避ける

## やりたいこと
DBが取得したフラグのようなものを条件分岐する場合、以下のようなコードを書きがち。

“`java
class Playground {
public static void main(String[ ] args) {

//DBから取得したデータだとする
String item_flag = “0”;

if(item_flag.equals(“0”)){
System.out.println(“通常品”);
}
}
}
“`

ただし、item_flagにnullが入った場合は、

“`java
class Playground {
public static void main(String[ ] args) {

String item_flag = null;

if(item_flag.equals(“0”)){
System.out

元記事を表示

ScalaでつくるCloud Dataflowテンプレート

# はじめに
以前にCloud Dataflowについて以下の記事を書きました。
https://qiita.com/yuyu_hf/items/e8e738f542e1f30d7be4

記事内では当時Apache Beamに慣れていたわけでもないので、ScalaではなくJavaを使用しましたが、Java、Scala、Scala+Scioのどれを使うか検討する際に、一目で比較できるようなものがあれば良いなと思い簡単な処理でそれぞれ試してみました

BigQueryの特定のカラムを抽出し、GCSに吐き出すとてもシンプルな処理です

# テンプレート作成(Java編)
## プロジェクト作成
“`shell
mvn archetype:generate \
-DarchetypeGroupId=org.apache.beam \
-DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
-DgroupId=com.example \
-DartifactId=bigquery-to-

元記事を表示

Spring Boot + Swagger2.0の触り心地を確かめてみる

https://start.spring.io/ からwebのみを選択してパパッと作成
Swaggerはなかったので、Maven Repositoryから持ってきた
versionなどは `build.gradle` 参照してもらいたい

サンプルコード
https://github.com/ririkku/swagger-demo

# 試せる最小構成

### コード全量

“`build.gradle
plugins {
id ‘org.springframework.boot’ version ‘2.2.1.RELEASE’
id ‘io.spring.dependency-management’ version ‘1.0.8.RELEASE’
id ‘java’
}

group = ‘com.example’
version = ‘0.0.1-SNAPSHOT’
sourceCompatibility = ‘1.8’

repositories {
mavenCentral()
}

dependencies {
implementation ‘org.spri

元記事を表示

LombokのBuilderパターン解説

## はじめに

本記事は [Java Advent Calendar 2019](https://qiita.com/advent-calendar/2019/java) の3日目の記事です。
LombokのBuilderパターンについて解説します。

## 「Builderパターン」とは?

GoFのデザインパターンの一種で、生成処理を積み上げてインスタンスを生成するパターンです。
処理を積み上げて生成していく様子から「Builder(建築者)パターン」と呼ぶようです。

## 環境

– Java:10.0.2
– IDE:IntelliJ IDEA 2019.2.3 (Community Edition)
– Lombok plugin:0.27-2019.02

## Builderパターンの適用方法

Builderパターンを適用するクラスを定義します。
Lombokでは、クラスに `@Builder` を付けることでBuilderが自動生成されます。

外部からの変更を防ぐため、各プロパティに `private` や `final` を付けています。

“`java:F

元記事を表示

Konduit-Servingでかんたんモデルデプロイ

こんにちは、 @kmotohas です。[SB-AI Advent Calendar 2019](https://adventar.org/calendars/4324) の2日目、よろしくお願いします。

本稿では**Javaベースの機械学習モデルデプロイツール**である **[Konduit-Serving](https://github.com/KonduitAI/konduit-serving)** の紹介をします。

が、実は私、ソフトバンク株式会社公認のクラブ活動である **SB AI部** の発起人でして、この団体の紹介や設立の背景から始めようと思います。

# SB AI部とは

ソフトバンク株式会社には福利厚生の一環として**クラブ活動をサポートする制度**があります。

社内には多数の部活がありますが、大きく分けて**スポーツ系**、**文化系**のジャンルがあります。

スポーツ系はイメージしやすいかと思いますが、バスケやフットサルなど、いわゆるクラブ活動感があるラインナップとなっています。
文化系にはテクノロジー企業らしく、ロボットやIoTを扱うPepper部や

元記事を表示

ひとり開発でポートフォリオをストーリーで語るサービスを作った話

この記事は、[ひとり開発 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/solo-developer)の19日目の記事になります。(現時点ではフライング気味)

# はじめに
こんにちは、ひで (@blue_islands)です。

ひとり開発をしていて、自分の作品とかを何かにまとめたりしていますか?

よく見かけるポートフォリオは、ただ作品の完成物を載せているものが多く、実際の苦労話とか、ドヤリングしたい場所など、事細かく乗せることができないものがほとんどです。
そこで、自分が開発をしているCHROCO(クロコ)というサービスを作ったのですが、その時の開発の苦労話が少しでもほかの開発者の参考になればと思っています。

この記事は、自分の作品たちをまとめるサービスを作った時の戦いの綴りです。

# CHROCOとは
最初に、今回作ったWebサービスである[CHROCO](https://chroco.ooo/)について先に紹介しておきます。

![FireShot Capture 007 – CHROCO――ポ

元記事を表示

OTHERカテゴリの最新記事