Używam aplikacji Play Framework 2.1.1 z zewnętrzną biblioteką Java, która generuje wynik java.util.concurrent.Future. Używam scala future w przeciwieństwie do Akka, co uważam za słuszne w przypadku Play 2.1. Jak mogę zawinąć java.util.concurrent.Future do pliku scala.concurrent.Future, zachowując jednocześnie kodowanie nieblokujące?Opakowanie scala.concurrent.Future dla java.util.concurrent.Future
def geConnection() : Connection = {
// blocking with get
connectionPool.getConnectionAsync().get(30000, TimeUnit.MILLISECONDS)
}
Powyższy kod zwraca połączenie, ale używa się tak, że staje się blokowanie
def getConnectionFuture() : Future[Connection] = {
future {
// how to remove blocking get and return a scala future?
connectionPool.getConnectionAsync().get(30000, TimeUnit.MILLISECONDS)
}
}
Idealnie chcę funkcję scala zwracającą połączenia jako przyszłego podobnego kodu powyżej, ale bez kodu blokowania przez get. Co jeszcze muszę dodać do funkcji, aby nie blokować.
Wszelkie wskaźniki byłyby świetne.
Która wersja Scali używasz? Począwszy od 2.10.x, Scala przyjęła przyszłość Akki jako swoją. –
Play 2.1.1 używa Scala 2.10.0 pod osłonami –