當我在控制檯中運行應用程序時,通過手動啓動jetty手動連接到Jetty上的Scala應用程序中的DB2,工作正常(1-2秒)「java - jar start.jar「。但是,當我啓動Jetty作爲服務時,連接需要30-60秒才能建立。當應用程序作爲服務運行時,建立到DB2的連接需要時間
這是我花了幾天試圖解決的事情。
首先,我認爲這與使用的iSeries Access ODBC驅動程序有關。我有另一個用Javascript編寫的應用程序,運行在Node.js之上,似乎可以正常工作。我也玩過這個驅動提供的大部分選項,但他們似乎沒有幫助。然後,我認爲問題必須與JDBC,我試圖使用com.ibm.db2.jcc.DB2Jcc,但這似乎並沒有解決這個問題。
我放了一個記錄器來檢查連接發生了什麼,但是這並沒有帶來任何額外的幫助。這兩個連接似乎相似,除非以服務運行,建立連接所用的時間至少要延長十倍。
我認爲這個問題可能是因爲DB2驅動程序試圖對正在使用的Activer目錄進行身份驗證,所以我創建了一個本地用戶「foobar」。我將iSeries設置爲默認使用此用戶標識。這也沒有幫助。我也嘗試用我的用戶名運行服務,但這並沒有幫助。
我目前沒有想法。是否有可能在控制檯上手動啓動Jetty加載不同的設置,而不是將其作爲服務啓動(網絡啓動應用程序)。
任何幫助將不勝感激!
堆棧:
- DB2外部服務器上。沒有進入配置。
- 的iSeries訪問ODBC驅動程序,版本9.00.00.00
- 斯卡拉應用,Scalatra的框架
- 碼頭8.1.3容器
- NSSM包裹碼頭的服務。使用java.exe(複製到app-directory),選項是「-jar start.jar」。
- 在Windows 2003服務器
連接設置簡單地用DriverManager的:
private def foobarDbConnection: Connection = {
Class.forName(Settings.foobarDbDriver)
DriverManager.getConnection(Settings.foobarDatabase,
Settings.foobarUsername,
Settings.foobarPassword)
}
設置:
def foobarDbDriver = "com.ibm.db2.jcc.DB2Jcc"
def foobarDatabase = "jdbc:odbc:FOOBAR"
def foobarUsername = "foo"
def foobarPassword = "bar"
這裏的日誌從連接:
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: DriverManager.getConnection("jdbc:odbc:FOOBAR")
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: trying driver[className=com.ibm.db2.jcc.DB2Driver,[email protected]]
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: trying driver[className=sun.jdbc.odbc.JdbcOdbcDriver,[email protected]]
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: *Driver.connect (jdbc:odbc:FOOBAR)
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: JDBC to ODBC Bridge: Checking security
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: No SecurityManager present, assuming trusted application/applet
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: Allocating Environment handle (SQLAllocEnv)
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: hEnv=92738208
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: Allocating Connection handle (SQLAllocConnect)
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: hDbc=92739360
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: Connecting (SQLDriverConnect), hDbc=92739360, szConnStrIn=DSN=FOOBAR;UID=foo;PWD=bar
直覺是它是DNS問題或JVM差異(不同的JVM或不同的配置) – 2013-02-13 15:59:46
通用指令獲取更多信息:1)啓用驅動程序中的跟蹤。請參閱http://www.ibm.com/developerworks/data/library/techarticle/dm-0506fechner/。 2)當發生問題時,查看DB2的db2diag.log。 3)也生成ODBC跟蹤:http://support.microsoft.com/kb/274551 4)當等待提到的30-60秒時強制JVM的線程轉儲會讓你知道什麼組件可能導致問題...在* nix你會殺死-3,不知道Windows .. –
user918176
2013-02-13 17:54:45