2014-12-18 2 views
2

내 스칼라 애플리케이션은 활성 세션의 한계가있는 Oracle Database에서 작동합니다. Typesafe Slick의 Oracle DB와 동시 작업을 위해 AKKA 배우를 사용하고 있습니다.Slick 새로운 세션을 생성하고 열어 두십시오.

def marketPlaceDataRefresh[T](targetArea:String, customerId:String, wave:String) =  
    clientPool.withClient(targetArea.toUpperCase) { 
    implicit session => 
     sql"""BEGIN MARKETPLACE_PKG.INIT_DATA_REFRESH($customerId,$wave,$wave,$wave); COMMIT; END;""".as[Int].firstOption 
    } 

암시 세션 개구 DEF AKKA 배우 호출 marketPlaceDataRefresh 때마다 개폐 :

배우에 대한 일 예이다.

나는 동시성과 Slick의 기초만을 알고있다.

단일 세션을 만들고 모든 동시 작업에 대해 열린 상태로 유지하려면 어떻게합니까?

+0

질문에 대한 답변이 없습니다. 고려해야 할 사항은 아닙니다. 세션을 열고 사용하고 db 세션 풀로 반환했는데, 빠르고 안전한 메커니즘입니다. 액터에서 세션을 열고 어쩌면 사용하지 않으면 어떨까요? 배우가 충돌하고 세션이 올바르게 닫히지 않으면 최악의 경우가 발생합니까? –

답변

1

세션을 오랫동안 열어 두어서는 안됩니다. 즉, 항상 세션을 수동으로 처리 할 수 ​​있습니다. docs에서, 당신은 사용하여 세션을 열 수 있습니다

val session : Session = db.createSession 
...run the queries normally... 
session.close // close the session 

그러나, 나는만큼 위험한 뭔가를 사용하지 않습니다. 머지 않아 버그가 생기고 세션이 종료됩니다 (즉, 닫는 것을 잊어 버릴 것입니다). 그러면 DB가 중단됩니다.

관련 문제