当我在控制台中运行应用程序时,通过手动启动码头“java -jar start.jar”,从码头顶部的 Scala 应用程序连接到 DB2 工作正常(1-2 秒)。但是,当我将 Jetty 作为服务启动时,建立连接需要 30-60 秒。
这是我花了几天时间试图解决的问题。
首先,我认为这与使用的 iSeries Access ODBC 驱动程序有关。我有另一个用 Javascript 编写的应用程序,在 Node.js 之上运行,它似乎可以与这种连接一起工作。我也玩过这个驱动程序提供的大多数选项,但它们似乎没有帮助。然后我认为问题出在 JDBC 上,我尝试使用 com.ibm.db2.jcc.DB2Jcc,但这似乎并没有解决问题。
我放置了一个记录器来检查连接发生了什么,但这并没有带来任何额外的帮助。两个连接看起来很相似,除了作为服务运行时,建立连接需要至少十倍的时间。
我认为问题可能是如果 DB2-driver 尝试对正在使用的 Activer 目录进行身份验证,所以我创建了一个本地用户“foobar”。我将 iSeries 设置为默认使用此用户 ID。这也没有帮助。我还尝试使用我的用户名运行该服务,但没有帮助。
我目前没有想法。是否有可能在控制台上手动启动 Jetty 加载不同的设置而不是将其作为服务启动(网络启动应用程序)。
任何帮助将非常感激!
堆:
- 外部服务器上的 DB2。无权配置。
- iSeries Access ODBC 驱动程序,版本 9.00.00.00
- Scala 应用程序,Scalatra 框架
- 码头 8.1.3 容器
- NSSM 将 Jetty 包装为服务。使用 java.exe(复制到 app-directory),选项是“-jar start.jar”。
- 视窗 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,com.ibm.db2.jcc.DB2Driver@f6e15e]
13.2.2013 13:45:54 com.foo.lib.DbConnectionFactory$JDBCLogWriter write
INFO: trying driver[className=sun.jdbc.odbc.JdbcOdbcDriver,sun.jdbc.odbc.JdbcOdbcDriver@e8fdc9]
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