当我在控制台中运行应用程序时,在Jetty上从我的Scala-app连接DB2工作正常(1-2秒),手动启动jetty“java -jar start.jar”。但是,当我将Jetty作为服务启动时,建立连接需要30-60秒。
这是我花了几天时间试图解决的问题。
首先,我认为这与使用的iSeries Access ODBC驱动程序有关。我有另一个用Javascript编写的应用程序,运行在Node.js之上,这似乎可以正常使用此连接。我也玩过这个驱动程序提供的大多数选项,但它们似乎没有帮助。然后我认为问题必须在JDBC上,我试图使用com.ibm.db2.jcc.DB2Jcc,但这似乎没有解决问题。
我放了一个记录器来检查连接发生了什么,但这并没有带来任何额外的帮助。两个连接看起来都很相似,除非作为服务运行时,建立连接所需的时间至少要长十倍。
我认为问题可能是DB2-driver尝试对正在使用的Activer目录进行身份验证,因此我创建了一个本地用户“foobar”。我将iSeries设置为默认使用此用户ID。这也没有帮助。我还尝试使用我的用户名来运行该服务,但没有帮助。
我目前没有想法。是否有可能在控制台上手动启动Jetty加载不同的设置,而不是将其作为服务启动(net start app)。
非常感谢任何帮助!
堆栈:
只需使用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
答案 0 :(得分:0)
经过几天的跟踪和使用Wireshark后,我设法通过在Windows服务器中添加本地用户来解决这个问题。在这种情况下,本地用户的名称无关紧要(不必与DB2连接中使用的用户名相同)。如果本地用户属于Administrator-group,则问题仍然存在,因此我创建了没有该组的本地用户。听起来只有域名或admin-group上的用户才能被活动目录检查。