RxJS の BehaviorSubject を share しようとして上手く行かなかったやつと上手く行ったやつ
以前はまったやつの備忘録 たぶん Angular 5.0.x, RxJS 5.5.x くらい
BehaviorSubject で Shared Service を作った時に、フィールドの Observable を直接参照するのではなく、メソッドを介して Observable を返す処理があった1
以下のように share した subject を分けると1度しか subscribe できない
import { Component, OnInit, Input } from '@angular/core'; import { Observable } from 'rxjs/Observable'; import { BehaviorSubject } from 'rxjs/BehaviorSubject'; import { share, tap } from 'rxjs/operators'; @Component({ selector: 'my-app', template: ` <ul> <li>counter: {{counter}} <li>direct: {{direct|async}} <li>return: {{returnValue|async}} <li>direct2: {{direct|async}} <li>return2: {{returnValue|async}} </ul> `, }) export class AppComponent implements OnInit { direct: Observable<string>; returnValue: Observable<string>; message$: Observable<string>; subject: BehaviorSubject<string> = new BehaviorSubject<string>('initial'); counter: number = 0; ngOnInit() { this.message$ = this.subject.asObservable().pipe(tap(() => this.counter++), share()); this.direct = this.message$; this.returnValue = this.getObservable(); this.subject.next('Hello!'); } getObservable(): Observable<string> { return this.message$; } }
share しないと複数回呼べる
Observable の Cold/Hot についてまだちゃんと理解できてないと感じたので、改めて調べよう
Play Framework 2.5.x (java) で Swagger 1.5.x を使う時に Ebean が _ebean_intercept を各モデルにつけてしまう問題の対処
Play Scala 2.2 + swagger 1.3.3 とかだと以下で対処できるようですが、タイトルの組み合わせではこのやり方は使えなかったので、試行錯誤の結果を残しておきます。
java - Swagger is showing _ebean_intercept with everymodel in my play application - Stack Overflow
import com.wordnik.swagger.converter.SwaggerSchemaConverter class IgnoreConverter extends SwaggerSchemaConverter{ override def skippedClasses: Set[String] = Set("com.avaje.ebean.bean.EntityBeanIntercept") override def ignoredClasses: Set[String] = Set("com.avaje.ebean.bean.EntityBeanIntercept") override def ignoredPackages: Set[String] = Set("com.avaje.ebean") }
public class Global extends GlobalSettings { @Override public void beforeStart(Application app) { Logger.info("Registering custom converter"); ModelConverters.addConverter(new IgnoreConverter(), true); } }
変更点
Play 2.5
GlobalSettings - 2.5.x - Play Framework
GlobalSettings が非推奨になりました。各クラスのコンストラクタで設定しましょう。
Swagger 1.5
Overriding Models · swagger-api/swagger-core Wiki
公式ドキュメントは現時点 (2017-04-10) で 1.3 系のままなので、テストクラスを参考にしてくれとのことみたいです。
How do you override models with swagger-core 1.5.3? · Issue #1499 · swagger-api/swagger-core
実装
public class IgnoreConverter implements ModelConverter { @Override public Property resolveProperty(Type type, ModelConverterContext context, Annotation[] annotations, Iterator<ModelConverter> chain) { JavaType _type = Json.mapper().constructType(type); if (_type != null) { Class<?> cls = _type.getRawClass(); // Ebean class (_ebean_intercept) if (EntityBeanIntercept.class.isAssignableFrom(cls)) { return null; } } if (chain.hasNext()) { return chain.next().resolveProperty(type, context, annotations, chain); } else { return null; } } @Override public Model resolve(Type type, ModelConverterContext context, Iterator<ModelConverter> chain) { if (chain.hasNext()) { return chain.next().resolve(type, context, chain); } else { return null; } } }
@Api public class HomeController extends Controller { @Inject public HomeController(MessagesApi messagesApi) { ModelConverters.getInstance().addConverter(new IgnoreConverter()); } public Result index() { return ok("Hello, World!"); } }
Effective Java 第3版 は 2017年に出るかもしれない
Java の良書といえば真っ先に名前が上がるだろう Effective Java ですが、第2版の原本が出たのが既に 9年近く前で、流石に古くなってる感があります。
ラムダや Optional の使い方等、最近の Java の機能を加えた改訂版を待っていたのですが、 Quora の回答から、著者の言及にたどり着いたので、紹介しておきます。
@RamMayur Yes. Revising the book will be my first priority after the term ends in December.
— Joshua Bloch (@joshbloch) 2016年11月11日
@ajaysharma2007 @RamMayur No official release date yet, but I can say with reasonable confidence that it's this year.
— Joshua Bloch (@joshbloch) 2017年3月17日
今年中には出るんじゃないかってことみたいです。
追記 2017/04/19
Amazon で予約受付が始まりました。
https://www.amazon.co.jp/dp/0134685997
- 作者: Joshua Bloch
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2017/12/29
- メディア: ペーパーバック
- この商品を含むブログを見る
追記 2017/10/18
ピアソンのページが出来てました。 12/19 発売で、eBook もあります。
Java 9 にも対応するみたいです。