* はじめに [#p1b1293a] やったー、とうとう、Javaもヒアドキュメント使えるようになったんだってね。 えっ3カ月たってたの 最近、知ったので、寝る前に、しらべてみるとします。わくわく。寝る前に、しらべてみるか。 以下、独断と偏見と眠たい頭で、書いた文章が続きます。ご注意を! * ダウンロード元 [#g6c98748] ** Liberica JDK 13 [#pfcd6f15] Java11は、AWSのCorrettoが、いいとおもうけど、安定板しか、対応してないみたい。 しらべてみると、いまのJavaって、Linuxのディストリビューションがたくさんあるみたいな感じになってきているみたい。 で、いま、がんばっている、Javaは、Liberica JDK 13みたい。 https://bell-sw.com/ 特徴は、オラクルより、サポート期間が長い。 オラクルの、ライセンス縛りは、商売上手というか、 自分は、いやな感じをしてたけど、リベリカは、優しい感じがするなぁ。 なにが、いやかというと、新しいJava言語で、なにか、儲けてから、ライセンスのとか請求されるのなら、払えるけど、 練習するだけとかで、お金を取ろうとすると、新規参入者が減って、言語が廃れる流れになるとおもうの マイクロソフトと、アップルだって、アップルは開発環境XCodeを無償で提供したから、アプリがたくさん増えて、便利になって、覇者になったと自分は、おもっているの。 応援しよう。 リベリカも、自分のところのJavaで作ったアプリを販売するサイトを作るビジネスモデルにしたら、世界とれるとおもうんだけどなぁ。 ** オラクルから [#dd7dee61] ライセンスよくわからんけど、ここからダウンロードできるみたい。調べる気もおきない。どうせ、ひどい縛りなんでしょ。はいはい。みたいな感じになってる。 https://www.oracle.com/technetwork/java/javase/downloads/jdk13-downloads-5672538.html * Javaのすごいところ [#c1327d51] Javaが優れているのは、言語自体ではなく、クラスをすべて構文解析済みで管理手している開発環境が神だからで、クラスをちゃんとオブジェクト指向でつくってあれば、ビジネスの概念と、オブジェクトに紐づけることができ、クラス数が1万を超えるソフトでも、開発環境の力をかりて、不具合なく管理できる点にあります。 各ライブラリのバージョンとの不整合も少ないです。 いま、仕事で、RubyとかGoとかさわらさせていただいておりますが、巨大なシステムであれば、あるほど、Javaの構文を完璧に構文解析して管理している開発環境のメリットを感じずにはいられません。 * IDEが管理しやすいと何が、いいのか [#ee5ecd37] 一括リファクタリング機能である。レベルの低いSEは、メンテナンスを考えずに、変数に、一文字のアルファベットを、短いコーディング俺スゲーとかおもって使いがちだが、ほかのひとからみたら、なんの意味?と、なっている場合が多い。だいたい、炎上しているプロジェクトは、そういう「オレオレ」プロジェクトで、メインの人が抜けてだれも、サポートできなくなってしまったというケースが少なくはない。でも、Javaだったら、変数を意味あるものに、置き換えるのが、プロジェクトに規模に関係なく、非常に簡単に行えるわけだ。 そのためには、単体テストが、自動化されていなくてはならない。 単体テストするには、DIの仕組みを使った設計にしなくてはめんどくさい。 というわけで、SpringBoot開発環境のSTSで、管理されたプロジェクトは、大規模開発に向いているわけなのだ。 *** STSインストール [#u4c19a86] というわけで、インストールしてっと。。。 ああ、そろそろねむくなってきたから、きょうは、このへんにしておこう。 おやすみなさい。 おはよう、続きです。 STSは、ZIPでダウンロードしたけど、解凍するとき、windows標準のZIP解凍と、lplsでの解凍は、2つファイル解凍に失敗した。 パス長 260 文字制限により正常動作しないとか、なんだろうか。7-zipで解凍した。 おもうんだが、マイクロソフトは、7-zipのライセンス買って、デフォルトにすべき。 こんなん、OSレベルでサポートすべきものでは?と思う。解凍スピードも、10倍ぐらいは、早い感じがしたぞ。早くて、エラーが起きない。神ですな。 * gradle [#xbe3820f] Javaのいいところは、依存ライブライの解決ツールがあるというところだと思う。 RubyのプロジェクトとかGoとかは、バージョンアップ時に、依存ライブラりが、最新にすると、バグっていて。。。パッチをあてるとか、をやるはめになるケースが多い。 Rubyや、Goは、最初のスタートダッシュはいいかもしれないけれど、メンテナンスには、向いていない。 でも、Mavenは、しっかりいい仕事してくれる。で、その後継のGradleは、Mavenのお堅い、XMLが、スクリプト言語化されたイメージだな、自分はそう感じている。 ** gradleをインストール [#vf58bd5c] SDKMAN、macでいうところのbrewみたいなもの。 *** STSでJava13をつかいたいよう [#q730f3fa] あれ、まだ、STSってば、ギリギリ対応してないの? しらべてみたところ、Eclipse4.14から、Java13に対応していて、いま(2019/12/20)のSTSは、Eclipse4.13ベース。。。 うぉーーー、ちょっとフライングしちまったぁ。。。 ** しょうがないJava13はあきらめて、Java12やるか [#zb6be4b0] そういえば、Java12さわってなかった、きっと、神様が、Java12も、いいんじゃよ、 といっているに違いない。 ** STS スタータプロジェクト [#k2d5e088] プロジェクトを作るときにスタータプロジェクトってあるよ。なんだろう。 いろいろなプロジェクトのひな形集。例えば、Amazon使う場合、とか、結構細かくあるみたい。 自分は、とりあえず、いま、ストリームを扱うのに興味があるので、kafkaと、kafka-streamを選択してやってみることにしよう。どうなるの?、わくわく。 あまり選択しないと、よく使う、lombokとかを手動でいれなくてはならないようだ。 RESTサーバを選ばないと、サーバの設定とか自分で頑張る必要があるみたい。 *** そん時適当にRESTの動作確認でつかったコード [#k6018a01] @SpringBootApplication //Configuration //EnableAutoConfiguration //ComponentScan //CommandLineRunner.run 実行します。 @RestController public class MyKafkaApplication implements CommandLineRunner { private static Logger logger = LoggerFactory.getLogger(MyKafkaApplication.class); public static void main(String[] args) { SpringApplication.run(MyKafkaApplication.class, args); } public void run(String... args) throws Exception { System.out.println("hello world"); } @RequestMapping(value = "/", method = RequestMethod.GET) public ResponseEntity<String> index() { System.out.println("hello world index"); logger.debug("index"); return ResponseEntity.ok("result!"); } } ビルドしてjarファイル作って、実行して、ブラウザのlocalhostにアクセスして、動作しているのを確認しました。 * Kafkaをwindowsにインストール [#oe43ac1f] Kafkaは、アンチwindows勢ですぞ。いろいろ試してみた結果、確信にいたりました。 特に、Confluent社は、アンチWindowsですな。 なので、Windowsユーザは、まずは、Apatch版を選ぶべし、 https://kafka.apache.org/downloads ダウンロードするも、.tgz拡張子の洗礼をうけることになるが、7-zipで、華麗に解凍する。 で、まずは、zookeeperの起動なのですが、ドキュメントみると、シェルファイル実行例しか書いてない! でも、ご安心を。 たとえば、アパッチのサイトに、 bin/zookeeper-server-start.sh config/zookeeper.properties と、書いてあれば、その.shに対応する.batファイルが、あって、下記のように書けるのです。 bin/windows/zookeeper-server-start.bat config/zookeeper.properties にあるのです。 QuickStartに説明書いてないけど、解凍したファイルみたら、そうなってました。 やってみたら、動いたんで、自分の推理はあってたみたいです。 次の、手順はkafkaサーバの起動です。 bin/kafka-server-start.sh config/server.properties と、QuickStartのガイドにかいてあったので、windowsに読み替えてみましょう bin/windows/kafka-server-start.bat config/server.properties で動くはず、えいっ、うごいた。やっぱりな。 ん~、ログファイルの書き換え処理で失敗してる風だが、こまかいところは、いいや。 ** トピックを作成 [#u330ca53] トピックっていうのは、水道管につけた名前みたいなもの。 ガイドでは、 bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test と説明されていたので、windowsでは、 bin/windows/kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test と、書くのだろう。なにも、レスポンスがないな。むっつり型のコマンドなのか? ** 一覧を見てみよう。 [#mfcfc2a7] bin/kafka-topics.sh --list --bootstrap-server localhost:9092 とあるから、windowsによみかえて、 bin/windows/kafka-topics.bat --list --bootstrap-server localhost:9092 を実行してみる。 test とでたので、やはり、むっつり君だったようだ。 * Springから、Kafkaをコントロールしてみたい。 [#s99eb95f] 下記のサイトを見た、 https://qiita.com/d-yosh/items/aaf77f17f20812d1c3d9 このサイトでのトピック名はsampleのようだった。 今回作ったトピック名はtestなので、 template.send("test", "value1"); のように、おきかえた * 確認 [#l67af3ef] クイックスタートでは下記のようになっているので、 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning windowsに読み替える bin/windows/kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning