2017-08-11 21 views
1

我用芭蕾舞0.91,並嘗試做一個REST獲得服務爲獲得在Oracle DATABSE一些數據。以下是使用sql:ClientConnector的Oracle信息。WSO2芭蕾舞女演員使用DB連接與服務

service<http> MyService { 

@http:GET {} 
@http:Path {value: "/myService"} 
resource apiGET (message m) { 

    string driverClass = "oracle.jdbc.driver.OracleDriver"; 
    string dbURL = "jdbc:oracle:thin:@xxx:1521:yyy"; 
    string username = "aaa"; 
    string password = "bbb"; 
    map propertiesMap = {"driverClassName":driverClass,"jdbcUrl":dbURL, "username":username, "password":password}; 
    sql:ClientConnector myConnection = create sql:ClientConnector(propertiesMap); 

    <getting data from the database and prepare to send back to client> 

    message response = {}; 
    messages:setJsonPayload(response, myData);   
    sql:ClientConnector.close(myConnection);   

    reply response; 
} 
} 

因此,使用中的每個數據庫連接GET我都開到數據庫的連接,並在結束時再次將其關閉。這是花費時間的。

我也可以打開服務水平的DB連接,所以到外面,這將打開數據庫連接一次,並且得到我可以一直使用DB內。這是非常快,在運行裏面的服務作曲家一切工作正常,即使我用並行數次一些客戶搞定了,我不跑了DB聯繫。 但是當我編譯服務的我運行服務爲

ballerina run -s myService.balx 

所以我用完DB聯繫,我也得到了一些異常。

我該如何彙集數據庫連接的方式,以便我可以重用每個GET的連接,並在完成GET之前將其發送回池。 服務關閉時如何關閉數據庫連接?

任何一般的設計暗示是值得歡迎的。

回答

0

SQL客戶端連接器將默認創建10連接池大小。如果您需要更改池大小,您可以按如下所示傳遞屬性。

sql:ConnectionProperties properties = {maximumPoolSize:5}; 
sql:ClientConnector testDB = create sql:ClientConnector(sql:MYSQL, "localhost", 3306, "db", "sa", "root", properties); 

聲明服務級別上的連接器是正確的方法。然後,當您在GET中執行SQL操作時,它將從池中獲得連接並執行。

顯然,在.balx文件中使用時,它有連接器的問題。這在Github存儲庫[1]中被報告爲一個問題。

[1] https://github.com/ballerinalang/ballerina/issues/3222

+0

你好,謝謝你的迴應,我現在使用的0.92和改變根據新的規範我的代碼。至於在作曲家中使用它,它工作正常,並且使用編譯(balx)版本編寫時遇到了一些問題,所以期待修復。 – Igor

+0

嗨,上面的問題已經修復。你可以檢查0.95版本嗎? –