2018-01-01から1年間の記事一覧
swift で HTTP でAPIを呼び出すときなどは URLSession#dataTask(with:,completionHandler:) を使うのが一般的らしい。 guard let url = URL(string: "http://localhost:8080/api") else { throw MyURLError.invalidURL } URLSession.shared.dataTask(with: u…
Kubernetes の名前は 2年ちょっと前くらいから耳にはしていたけど、全然触ったことないわりに、最近方方から聞こえてくるので触ってみることにした。 なお、基本的な内容はこちらのものを、ただコピペしてくだけの作業… docs.microsoft.com いくつかチュート…
ChannelOperationsHandler reactor-netty が提供している ChannelHandler の実装クラス 内部に ContextHandler を持ち、これを通じて処理の登録などを行っている模様 channelActive(ChannelHandlerContext) ContextHandler#createOperations(Channel, Object…
HttpRequest の組み立て HttpClient#get などのメソッドから HttpClient#request メソッドを呼び出し HttpClient#request にて Mono<HttpClientResponse> を返すが、実体は MonoHttpClientResponse 2.の際に HttpClient#handler というメソッドが呼び出され、 Function<HttpClientRequest,Publisher<Void>> が MonoH</httpclientrequest,publisher<void></httpclientresponse>…
Bootstrap の組み立て Bootstrap は以下の2箇所のいずれかで組み立てる PoolResources#selectOrCreate(SocketAddress,Supplier,Consumer,EventLoopGroup) PoolResources が利用できる場合のみ PoolResources では接続先アドレス(ポート含む)ごとに Channel …
HttpClient#create(String,int) : アドレスとポートを Consumer<HttpClientOptions.Builder> にラップして(options.host(address).port(port)) HttpClient.Builder#options(Consumer<HttpClientOptions.Builder>) で設定して HttpClient を生成する HttpClientOptions.Builder は ClientOptions.Builder<B extends ClientOptions.Builder<B>> を継承した</b></httpclientoptions.builder></httpclientoptions.builder>…
Swift4 での JSON 文字列からオブジェクトへの変換方法のメモ. もっと詳しく調べたい場合は公式のドキュメントを調べた方がよい. これからデコードするJSON { "id": 219038 , "name": "James Thunder" , "password": "s0r23ndsn0q3mf083259" , "created_at":…
infrastructor は Groovy でできたサーバープロビジョニングツールで、まあ、 Chef とか itamae とか Ansible の類のツールです。2018/06/07 現在のバージョンは 0.1.8 ということで、まだ開発が始まってから1年くらいの若いツールです。 github.com この記…
単なるメモ Swift-NIO の ChannelInboundHandler/ChannelOutboundHandler を記述する際のポイント ChannelInboundHandler Netty の ChannelInboundHandler と同じく、基本的には channelRead(ctx:ChannelHandlerContext, data: NIOAny) を実装する NIOAny 型…
とある理由により、 Swift Package Manager を使っているけど、どこに書いてある方法を真似しても(Swift のドキュメントですら)エラーが出てしまうので、自分用にメモを取ることにした プロジェクトの作成 プロジェクトを作成するには swift package init コ…
表題の通り 2018/05/26 開催された JJUG CCC にて発表してきました。 www.java-users.jp セッションが1つとLTが1つです。 セッションの方は 「(俺が)はじめての Netty」 で、LT のタイトルは「Spring Boot アプリケーションの起動を速くする 108 の Tips」で…
Java Day Tokyo 2018 に行ってきたので、そのメモ。 キーノート 目黒駅で東京駅南口行きバスのりばを探すのに時間がかかってしまったため、20分遅刻してしまった。 僕が参加したときには Java の新しいリリースモデルの説明。 OpenJDK は 半年間しかサポート…
最近、自分専用のライブラリーを書いていて、 CompletableFuture#thenApply および CompletableFuture#thenApplyAsync などを複数回呼び出せるのかがわかっていなかったし、 Javadoc にも書いていないようなので実験してみることにしました。 書いたのは次の…
JSUG のLT会で 『Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた』というタイトルでLTしてきたところ、 Spring 5 から @Component のインデックススキャンがサポートされるようになったことを教えてもらったので、試してみました。 …
Java 10 の Class Data Sharing で Spring Boot の起動を速くしてみます。 Class Data Sharing は異なるJVM上で同一のクラスの情報を共有する仕組みです。 Java 8 の時点ですでに組み込まれていましたが、コマーシャルな機能であったため、 使っている人は少…
CompletableFuture<T> から Mono<T> に関しては、 Mono#fromFuture(CompletableFuture) というメソッドがあるのだが、 Future<T> からは Mono<T> への変換メソッドはないし、もっと言えば Future<T> から CompletableFuture<T> への変換メソッドもない。 最初は次のような変換</t></t></t></t></t></t>…
Spring WebFlux Security でカスタム認証を実装します。ベースとなるユーザー認証部分は以前に実装したとおりです。 mike-neck.hatenadiary.com 今回は権限まわりの実装します。〜〜のパスには〜〜の権限が必要みたいなやつです。 特定のリソースへの特定の…
Spring WebFlux フレームワークは戻り値の方は Mono<V> になるのだが、この Mono<V> が empty の場合、Spring 側でよしなにやってくれると思ったら、実はそうでもないらしい。 例えばこのようなハンドラーを作ってみる Mono<ServerResponse> test(final ServerRequest request) { f</serverresponse></v></v>…
Gradle4.6 がリリースされ、 JUnit5 に対応しました。以下にGradle から JUnit5 のテストを実行するための build.gradle を示しますが、特殊なことをするわけではありません。 build.gradle plugins { id 'java' } repositories { mavenCentral() } test { u…
Spring WebFlux で project Reactor が使われていて、まだ手に馴染んでいないので、 チュートリアル をやっていたところ、 StepVerifier#withVirtualTime の使い方がわからず、検索しても要領を得ず、いろいろ試して使い方がわかったので、そのメモ tech.io …
IntelliJ での基本的なリファクタリングの手順です。 次のような二つのクラスを考えます。 public class WithAccessTokenSecurityContextFactory implements WithSecurityContextFactory<WithAccessToken> { @Override public SecurityContext createSecurityContext(final Wi</withaccesstoken>…
Spring Security の WebFlux Security Configuration という公式のドキュメントにあるセクションにも書いてあるのだが、ユーザー認証の実装はこれまでの Spring Security にある UserDetails の Reactive 版である ReactiveUserDetails を実装したオブジェク…
Spring 5 から Reactive Web というのになるらしく、サーバーの性能が落ちにくくなると聞いた(違うかもしれない)ので、 家で試してみることにした。 環境 Spring Boot: 2.0.0.RC1 Java: 1.8 ビルドファイル 以下の curl コマンドで取得できるもの curl https…
同じURL(/foo/bar)に異なるメソッド(baz(Baz baz) と qux(Qux qux) の二つのメソッド)を割り当てる方法 @Canonical class Text { String text } @Canonical class Bidirecional { String question String answer1 String answer2 } @Canonical class Result<T> </t>…
spring-security-oauth を用いてリソースサーバーを実装する場合、 tokenServices という名前の ResourceServerTokenServices を実装するクラスのビーンを作ります。これを実装する時に気をつける必要があるのが、 ResourceServerTokenServices に、 loadAut…
Spring Security OAuth2 を用いたリソースサーバーを、データベース連携で実装するパターンの実験をしてみた。 spring-security-oauth のドキュメント の Resource Server Configuration の部分を読むとリソースサーバーの実装については、次のように書いて…
Spring MVC で日本語を含むURLにリダイレクトすると… @GetMapping(path = "bar") String somePage() { return "redirect:/to/日本語url"; } $ curl -v http://localhost:8080/foo/bar * Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) por…
ドキュメント探しても、ググってもstack overflowを探しても明確に書かれていなかったっぽいので(本来的には hal の仕様を見るのが正しいかもしれない) 次のような二つのエンティティが存在するものとする。 @Entity class Book { @Id private Integer id; p…