2016-06-15 4 views
0

레거시 Java 응용 프로그램이 있으며 scala로 응용 프로그램을 확장 할 때 데이터베이스 연결 처리를 다시 사용하고자합니다. 좋아scala에서 Java connectionpool 재사용

class Rules { 
    val connHandle = NewConnectionPool.getRemotePool.getConnection 
    val session = connHandle.unwrap(classOf[java.sql.Connection]) 
    def loadTagRulesFromDb(name: String = "rules"): tagRuleSet = { 
     //val tagRules = NamedDB('remotedb) readOnly { implicit session => 
     val tagRules = DB readOnly { implicit session => 
      sql"select * from databasename.messaging_routing_matchers".map(
      rs => tagRule(
       rs.long("id"), 
       rs.string("description"), 
       rs.long("ruleid"), 
       rs.string("operator"), 
       rs.string("target") 
      ) 
     ).list.apply 
     } 
     for (tr <- tagRules) { 
      println(tr) 
     } 
     tagRuleSet(name,DateTime.now(),tagRules) 
     } 
    } 

과 전화 :

을 해봤 스칼라 코드

Connection dbConn = NewConnectionPool.getRemotePool().getConnection(); 
PreparedStatement ps = dbConn.prepareStatement(someQuery); 

:

기존의 응용 프로그램이 (시도/캐치 생략으로) 데이터베이스를 사용하지

Rules rr = new Rules(); 
rr.loadTagRulesFromDb("testing"); 

이 오류 (DB 및 NamedDB 버전 모두) "Connection pool is not yet initialized.(name:'"(이름은 eit) 그녀의 디폴트 또는 remotedb) :

java.lang.IllegalStateException: Connection pool is not yet initialized.(name:'default) 
    at scalikejdbc.ConnectionPool$$anonfun$get$1.apply(ConnectionPool.scala:76) ~[scalikejdbc-core_2.11-2.4.2.jar:2.4.2] 
    at scalikejdbc.ConnectionPool$$anonfun$get$1.apply(ConnectionPool.scala:74) ~[scalikejdbc-core_2.11-2.4.2.jar:2.4.2] 
    at scala.Option.getOrElse(Option.scala:121) ~[scala-library-2.11.8.jar:na] 
    at scalikejdbc.ConnectionPool$.get(ConnectionPool.scala:74) ~[scalikejdbc-core_2.11-2.4.2.jar:2.4.2] 
    at scalikejdbc.ConnectionPool$.apply(ConnectionPool.scala:65) ~[scalikejdbc-core_2.11-2.4.2.jar:2.4.2] 
    at scalikejdbc.DB$.connectionPool(DB.scala:151) ~[scalikejdbc-core_2.11-2.4.2.jar:2.4.2] 
    at scalikejdbc.DB$.readOnly(DB.scala:172) ~[scalikejdbc-core_2.11-2.4.2.jar:2.4.2] 
    at dk.coolsms.smsc.Rules.loadTagRulesFromDb(Rules.scala:28) ~[smsc.jar:na] 
    at dk.coolsms.smsc.SendMessage.sendMessage(SendMessage.java:206) ~[smsc.jar:na] 

는 내가 어떻게 든 BoneCP ConnectionHandle에에서 scalikejdbc 호환 연결을 얻을 수 있다고 가정?

편집 : 솔루션은 다음과 같습니다 것이 가장 좋은 방법이 될 것입니다 DBs.setupAll()javax.sql.DataSource 예를 통해 접근이 특정한 경우

답변

1

에 적용되지 않습니다 application.conf에 의존하기 때문에 DB readOnly etc.는 사용할 수 없습니다 있습니다 ScalikeJDBC를 기존 데이터베이스 연결과 통합합니다.

http://scalikejdbc.org/documentation/connection-pool.html

그러나 이미 원시 java.sql.Connection을 가지고, 그것은 단순히 아래 DBSession을 만들 수도 있습니다

implicit val session = DBSession(conn) 
sql"select * from databasename.messaging_routing_matchers".toMap.list.apply()