Java

第十九回 #渋谷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で呼び出すことを想定…

マルチリソース、マルチテナントに対応したDBマイグレーションツール「solidbase」1.0.0をリリースしました

Javaベースのデータベースマイグレーションツールsolidbase 1.0.0をリリースしました。 github.com これは元々GitBucketで使用するために開発したものです。GitBucketではこれまで独自に実装した簡易的なマイグレーションシステムを使用していたのですが、外…

Lagomのサービスの入出力にJSONを使用する

Lagomを試してみるシリーズ第4回です。今回はサービスの入力・出力としてJSONを使う方法を試してみました。 基本的にはサービスのRequestやResponseにJavaクラスを指定しておけば自動的にJacksonでJSONとのデシリアライズ、シリアライズを行ってくれるようで…

Lagomでイミュータブルなデータクラスを作る

Lagomを試してみるシリーズ第三回です。今回はLagomでイミュータブルなデータクラスを作る方法について見ていきたいと思います。Lagomの本質にたどり着くにはまだまだ時間がかかりそうですw Lagomのドキュメントを読んでいると以下のようなアノテーションて…

Lagomでサービス呼び出しのIdを通じてパスから複数のパラメータを受け取る

Lagomを試してみるシリーズの第2回です。前回はLagomを使用したサービスの最も簡単な実装例として、以下のようなサービスを定義しました。 public interface HelloService extends Service { ServiceCall<String, NotUsed, String> hello(); @Override default Descriptor descriptor(</string,>…

リアクティブなマイクロサービスフレームワーク「Lagom」を試してみる

Lagomとは? LagomはLightbend社(旧Typesafe社)がリリースした新しいマイクロサービス向けのフレームワークです。 www.lightbend.com 元々Scalaの開発元であったLightbend社が開発しているだけあり、PlayやAkka、sbtといったScalaベースの技術基盤上に構築…