Java

jgitverでMavenのバージョン番号をGitの情報から自動設定する

sbtではsbt-dynverプラグインを使ってGitのタグ、コミット情報から自動でバージョン番号を付与できるのですが、同じようなことをMavenでやるにはどうするのがいいのかなぁと以前から疑問に思っていたので、どのような方法があるのか少し調べてみました。結論…

jenvで複数バージョンのJDKを切り替える

仕事でJava 8とJava 11を行ったり来たりしたり、Javaの特定のマイナーバージョンでのみ発生する問題の調査などをしないといけないケースが出てきて、最初は都度環境変数で切り替えていたのですが、切り替え忘れてうっかり別のバージョンでコンパイルしてしま…

相対時間で表記した期間をパースするJavaライブラリを作ってみた

正確に言うと自分で作ったのではなく、AirframeというScalaライブラリに相対時間で表記した期間をパースしてくれる機能があるのですが、わけあってこれをJavaにポーティングしてみました。 github.com Maven Centralにdeployしてあるのでpom.xmlに以下の依存…

自動テストでElasticsearchを使うためのJavaライブラリ

その昔、ElasticsearchではEmbeddedモードという、アプリケーションに組み込んで使用したり、自動テストで使用するのに便利な機能がサポートされていました。しかし、この機能はElasticsearch 5.0でサポートされなくなってしまいました。詳しくはElastic社の…

第二十回 #渋谷java でElasticsearch + Akka Streamsの話をしました

shibuya-java.connpass.com 渋谷javaもいつの間にか二十回、今回は久しぶりに蓮沼さんや小宮さんにも発表していただきました。 当日の様子は以下のTogetterまとめをご覧ください。 togetter.com emegさんが紹介されていたActiveMQ Artemisは、後でお話を聞い…

第十九回 #渋谷java を開催しました

6月17日(土)に弊社オフィスで第十九回 #渋谷javaを開催しました。当日の様子や皆さんの発表内容については以下のtogetterまとめをご覧ください。 togetter.com 今回は以下の皆さんに発表していただきました。 セッション枠 hagino_takahiro 「PredictionIO…

Mirage 1.3.0をリリースしました

少し前にMirageのヘビーユーザーだというAdrianがコミッタに加わってくれたのですが、彼の会社でカスタマイズした部分をOSS化するなどいろいろやっていきたいとのことだったので、自分があまりメンテできていないこともあり、organizationに移して開発を行っ…

JJUG CCC 2017 Springにプラチサスポンサーとして参加します

5月20日(土)に西新宿で開催されるJJUG CCC 2017 Spring、これまでもスポンサーとしてサポートさせていただいていましたが、今回はプラチナスポンサーとして参加させていただくことになりました。 セッションでは弊社の若者が以下の2つのセッションでお話さ…

JDBCレイヤでDBのシャーディングを行うsharding-jdbcを試してみた

DBのデータ量が増えてきた場合の対策の1つとしてユーザIDなどをキーにデータベースを分割するシャーディングと呼ばれる手法があります。これをJDBCのレイヤで実現してしまうsharding-jdbcというライブラリを見つけました。 github.com sharding-jdbcは中国の…

第十八回 #渋谷java を開催しました

1月28日(土)に弊社オフィスで第十八回 #渋谷javaを開催しました。 おや、なにか様子がおかしいですね…。謎のマークが…。 今回は以下の皆さんに発表していただきました。 セッション枠(20分) ayato_p 「筋肉でテストを救う」 Ikuru K 「サムネイルを作る話…

第十八回 #渋谷java でZipkinとBraveの紹介をしました

最近RestyにBraveを組み込んだり、仕事でもZipkinを触っていたりするのでZipkinとBraveの概要について発表させていただきました。発表資料はこちらです。 Tracing Microservices with Zipkin from takezoe www.slideshare.net ZipkinはTwitter社が開発した分…

pac4jでGitHubのOAuth認証を使ってみる

GitHubアカウントでログインできるWebアプリケーションを作りたいなーと思っていたのですが、Javaだとpac4jというライブラリを使うとGitHubを始め、TwitterやFacebookなど様々なサービスのOAuth認証を扱うことができるようです。 github.com SpringMVCやJAX-…

Apache DrillでExcelを検索するプラグインを作った

ExcelをDBに入っているデータとジョインできたら便利なのでは?ということで作ってみました。 github.com GitHubのリリースページからダウンロードしたjarファイルをDRILL_HOME/jars/3rdpartyにコピーし、ストレージ設定でdfsに以下のフォーマットの設定を追…

第十七回 #渋谷java を開催しました

10月1日(土)に弊社オフィスで第十七回 #渋谷javaを開催しました。 今回は以下の皆さんに発表していただきました。 セッション枠(20分) ayato_p 「Clojureで状態管理をするためには」 shimamoto 「doobieの紹介」 Shunsuke Tadokoro 「平成生まれの楽しい…

第十六回 #渋谷java を開催しました

7月23日(土)に弊社オフィスで第十六回 #渋谷javaを開催しました。 今回は以下の皆さんに発表していただきました。 セッション枠(20分) Shunsuke Tadokoro 「JISの歴史から迫る文字コード入門」 ayato_p 「翻訳にまつわるエトセトラ」 通常枠(10分) yy_t…

Netflixのオープンソースソフトウェア

ここのところHystrixについて調べていたのですが、Netflixは他にもGitHub上で様々なOSSを公開しています。 github.com Javaのものが中心ですがPythonやGo、Cで書かれているものもあります。ライブラリ的なものからミドルウェアや運用ツールまで多岐に渡って…

マイクロサービスにレジリエンスをもたらすHystrixを試してみる

github.com HystrixはNetflixが開発しているオープンソースのJavaライブラリで、主として分散システムにおけるサービス間のやり取りをラップして以下のような機能を提供します。 スレッドプールの分離 フォールバック、サーキットブレーカー タイムアウト キ…

Apache DrillでLTSVを検索するためのプラグインを作ってみた

DrillはJSONやCSV、TSVなどはデフォルトでサポートしているのですが残念ながらLTSVはサポートしていません。もちろんLTSVはシンプルなのでJSONなどへの変換も容易なのですが、S3にバックアップしたLTSV形式のログを直接Drillから検索できると便利かなと思っ…

Apache DrillでS3にアクセスする設定をREST APIで行ってみる

Apache Drillを取り上げているブログ記事などを見るとストレージの設定はWebコンソールから行う方法が紹介されていることが多いのですが、環境構築の自動化などを考えると設定などはコマンドラインで済ませたいところです。DrillはREST APIも備えており、こ…

組み込みMySQLを使ったユニットテスト

GitBucketがMySQL、PostgreSQL対応したのでマイグレーションのテストをMySQLやPostgreSQLで実行できるようにしたいなぁと思って方法を考えています。 テスト用のDBを立てたりDockerを使ったりするのが一般的な方法なのではないかと思いますが、Javaで利用可…

Lagomのクラスタリングとデプロイ

Lagomを試してみるシリーズ第13回です。今回はクラスタリングとデプロイについてです。実際に動かしてみるのは面倒なのでここはドキュメントを読むだけに留めておきたいと思います。 クラスタリング LagomはAkka Clusterでクラスタリングが可能なようです。 …

LagomにおけるJSONのシリアライズとマイグレーション

もはや若干やけくそ感もあるLagomを試してみる第12回です。今回はLagomにおけるJSONのシリアライズ/デシリアライスを見ていきたいと思います。 ここまで見てきたようにLagomはHTTPやWebScoketなど外部とのやりとりにはJSONを使用しますが、コマンドやイベン…

LagomでPublish/Subscribeを試してみる

ちょっと間が空いてしまいましたがLagomを試してみるシリーズ第11回です。 今回はPub/Subモデルによるメッセージ送信を試してみようと思いますが、その前にLagomの1.0.0-M2がリリースされ、APIが少し変わっているようです。中でも影響が大きいのはServiceCal…

Lagomの永続化APIで実現するCQRS

Lagomを試してみるシリーズ第10回です。今回はPersistenceの続きでRead-sideについて見ていきたいと思います。 前回も書いたようにLagomのPersistence APIは一般的なDBアクセスのためのものではなく、イベントソーシング+CQRSを実現することを目的としていま…

Lagomの永続化APIで実現するイベントソーシング

Lagomを試してみるシリーズ第9回です。ドキュメントの順番でいくとユニットテストの章なんですが、ひとまず飛ばして永続化周りについて見ていきたいと思います。 Lagomの永続化APIはいわゆるORMのようにRDBMSなどのストレージへのアクセスを単純に抽象化した…

Lagomのサーキットブレーカーを試してみる

Lagomを試してみるシリーズ第8回です。今回はLagomの特徴的な機能の1つであるサーキットブレーカーを試してみました。 マイクロサービスのベストプラクティスのひとつに障害の発生したサービスをシステムから切り離すことでサービス全体を停止せずに運用する…

Lagomのサービスから別のサービスを呼び出してみる

Lagomを試してみるシリーズ第7回です。今回はサービスから別サービスの呼び出しを試してみました。少しずつリアクティブっぽい感じになってきましたね。 別のサービスを呼び出すのは簡単で、以下のようにサービスのインターフェースをDIするだけで呼び出すこ…

第十五回 #渋谷java を開催しました

4月23日(土)に弊社オフィスで第十五回 #渋谷javaを開催しました。 今回は以下の皆さんに発表していただきました。 セッション枠(20分) gakuzzzz 「制約をロジックではなく型で表現する」 ayato_p 「Clojure テストの話 (Clojure 成分濃いめ)」 making 「C…

LagomでAkka Streamsを使ってWebSocketによるサービスを実装してみる

Lagomを試してみるシリーズ第6回です。今回はAkka Streamsを使ったストリーミングを試してみました。 まずは簡単な例としてレスポンスをストリームで返すサービスを定義してみます。Responseの型にAkka StreamsのSourceを指定している以外は通常のサービスと…

LagomでrestCall以外のサービス定義について調べてみた

Lagomを試してみるシリーズ第5回です。まだまだ基本的なところですが、今回はサービス呼び出しの定義方法について少し調べてみました。 これまでのサンプルではrestCallを使ってサービスを定義してきました。restCallはその名の通りRESTで呼び出すことを想定…