Oh, jeez. Yeah, that's entirely hideous.
You know there's a cure for this disease. It's called Scala. However, side
effects may include crawling compiles, awkward builds, and speaking
optionally in futures :-)
Seriously, if I'd known you were approaching this from Java, I'd advised
against using Streams.
You need the right language features and a good DSL to make this stuff
accessible and maintainable (which the Akka guys have done a great job with
so far, IMHO).
You're right on about the Future contained in an Agent. That's the key
interface between the two components (access and request). Like any
software, as long as you get the interfaces right, the implementation
should be swappable.
Good luck!
On Tuesday, August 11, 2015 at 10:32:57 AM UTC-4, David Pinn wrote:
>
> Lance, I've been translating your autoRefresh method into Java.
>
> Kill. Me. Now.
>
> You wrote this:
>
> val auto = Sink(
> Flow[(RefreshToken, Promise[AccessToken])],
> Merge[(RefreshToken, Promise[AccessToken])](2),
> request,
> Unzip[RefreshToken, Promise[AccessToken]],
> Zip[Future[RefreshResponse], Promise[AccessToken]],
> Broadcast[(RefreshResponse, Promise[AccessToken])](3)
> )((mat, _, _, _, _, _) => mat) {
> implicit b => (initial, merge, request, unzip, zip, bcast) =>
> ...
> }
>
>
>
> ... which translates into Java 7 like this:
>
> Sink<Pair<RefreshToken, F.Promise<OAuth2Info>>, BoxedUnit> auto =
> Sink.factory().create6(
> Flow.<Pair<RefreshToken, F.Promise<OAuth2Info>>>create(),
> Merge.<Pair<RefreshToken, F.Promise<OAuth2Info>>>create(2),
> request,
> Unzip.<RefreshToken, F.Promise<OAuth2Info>>create(),
> Zip.<Future<RefreshResponse>, F.Promise<OAuth2Info>>create(),
> Broadcast.<Pair<RefreshResponse, F.Promise<OAuth2Info>>>create(3),
> new Function6<BoxedUnit, BoxedUnit, BoxedUnit, BoxedUnit,
> BoxedUnit, BoxedUnit, BoxedUnit>() {
> @Override
> public BoxedUnit apply(BoxedUnit m1, BoxedUnit m2, BoxedUnit
> m3, BoxedUnit m4, BoxedUnit m5, BoxedUnit m6) {
> return m1;
> }
> },
> new Function7<FlowGraph.Builder<BoxedUnit>,
> FlowShape<Pair<RefreshToken, F.Promise<OAuth2Info>>, Pair<
> RefreshToken, F.Promise<OAuth2Info>>>,
> UniformFanInShape<Pair<RefreshToken, F.Promise<OAuth2Info>>,
> Pair<RefreshToken, F.Promise<OAuth2Info>>>,
> FlowShape<RefreshToken, F.Promise<RefreshResponse>>,
> FanOutShape2<Pair<RefreshToken, F.Promise<OAuth2Info>>,
> RefreshToken, F.Promise<OAuth2Info>>,
> FanInShape2<Future<RefreshResponse>,
>
> ...
--
>>>>>>>>>> Read the docs: http://akka.io/docs/
>>>>>>>>>> Check the FAQ:
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
---
You received this message because you are subscribed to the Google Groups "Akka
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.