View compare-annotations.groovy
import java.lang.annotation.*
@Retention(RetentionPolicy.RUNTIME)
@Target([ElementType.TYPE, ElementType.METHOD])
@interface Foo {
String bar()
int baz()
}
@Foo(bar = 'test', baz = 1)
View App.java
/*
* Copyright 2018 Shinya Mochida
*
* Licensed under the Apache License,Version2.0(the"License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,software
View EchoServer.java
class EchoServer {
public static void main(String[] args) {
var serverSocket = new ServerSocket(8000); //(1)
while(true) {
Socket socket = serverSocket.accept(); // (2)
var reader = toBufferedReader(socket.getInputStream());
var writer = toPrintWriter(socket.getOutputStream());
String line;
while ((line = reader.readLine()) != null && !line.isEmpty()) { //(3) & (4)
writer.println(line); // (5)
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 に習熟していきます