View builder-patterns.md

ミュータブルなビルダー

ビルダークラスを簡単に作ろうとすると,どうしてもミュータブルになりがちです.

class Builder {
  String foo;
  String bar;
View build.gradle
plugins {
id 'java-library'
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
View cds-spring-boot.md

それではさっそく、 Java 10 の Class Data Sharing で Spring Boot の起動を速くしていきたいと思います。


Class Data Sharing は異なるJVM上で同一のクラスの情報を共有する仕組みです。 Java 8 の時点ですでに組み込まれていましたが、コマーシャルな機能であったため、 使っている人は少ないと思います。 Java 10 からはこの機能が OpenJDK でも利用できるようになったため、早速試してみたいと思います。


View cfp.md

セッション概要

Netty はハイパフォーマンスなネットワーク入出力のためのライブラリーです。 Elasticsearch や Akka といったミドルウェアや Play Framework や Spring WebFlux のコンポーネントの一部、 async-http-client や Lettuce などのネットワーククライアントライブラリーのコンポーネントなど広く使われています。

本セッションでは OIO(従来の InputStream/OutputStream を使ったブロッキングなI/O)や NIO(Java1.4で追加されたノンブロッキングなI/O)と比較しつつ、 Netty の設計やコンポーネントの解説をしていきます。

View app-cds.md

Java10 に Class Data Sharing なる機能が追加されたので試したけど、テストケースが良くない場合の話。


サンプル

Spring Boot の maven プロジェクト

View FutureToMono.java
class FutureToMono {
final ExecutorService executor = Executors.newSingleThreadExecutor();
<S> Mono<S> mono(final Future<? extends S> future) {
final MonoProcessor<S> processor = MonoProcessor.create();
executor.submit(() -> {
try {
final S stat = future.get();
processor.onNext(stat);
View JJUG-CCC-2018-Spring-CFP.md

概要

Spring の WebFlux フレームワークで使われるようになった Reactor のハンズオンです。 MonoFlux といった Reactor の基本的なデータ型の作り方から始めて、最終的には簡単な Spring WebFlux アプリケーションを作ります。

内容

このハンズオンでは以下の要領で Reactor に習熟していきます

View StepVerifierTest.java
class StepVerifierTest {
@Test
void test() {
final Supplier<Flux<Long>> flux = () -> Flux.interval(Duration.ofSeconds(5L), Duration.ofSeconds(1L)).take(3L).log();
final StepVerifier.Step<Long> verifier = StepVerifier.withVirtualTime(flux, 3L)
.expectSubscription()
.thenAwait(Duration.ofSeconds(5L));
final StepVerifier.Step<Long> intermediate = Interval.fromTo(0, 2).injectInto(verifier,
(step, index) -> step.expectNext((long) index).thenAwait(Duration.ofSeconds(1L)));
intermediate.verifyComplete();
View eclipse-collections.md

primitive な コレクションを使いたい

  • IntLists factory を使う
import org.eclipse.collections.impl.factory.primitive.IntLists

def list = IntLists.mutable.of(1,2,3,4)
// -> [1, 2, 3, 4]
View date-and-time-api.md

今さら聞けない Date and Time API

全部を書くとすごい分量になる(そして僕がよく知らない)ので、要点だけかいつまんで提示します。

  • Date and Time API は ISO8601 の部分実装

  • 時刻をあらわす4つの基本的なクラス

    • LocalDateTime - 時差なし日時
    • ZonedDateTime - タイムゾーンつき日時