use Java Subject<T, R> as contravariant in T and covariant in R
add multicast, publish, replay