在 Fedora 15 上,在 Fedora 上启动 Lift 应用程序,获取 org.h2.jdbc.JdbcSQLException

Posted

技术标签:

【中文标题】在 Fedora 15 上,在 Fedora 上启动 Lift 应用程序,获取 org.h2.jdbc.JdbcSQLException【英文标题】:on Fedora 15, start Lift app on Fedora getting org.h2.jdbc.JdbcSQLException 【发布时间】:2011-07-02 19:44:17 【问题描述】:

在 Fedora 15 上,执行 mvn jetty:run 后,尝试为用户初始化 MetaMapper 时出现以下异常

org.h2.jdbc.JdbcSQLException: Exception opening port "H2 TCP Server (tcp://
192.168.1.105:33463)" (port may be in use), cause: "timeout" [90061-138]
(full stack trace is pasted last in the mail) 

以下是我生成项目的方式

mvn archetype:generate \
-DarchetypeGroupId=net.liftweb \
-DarchetypeArtifactId=lift-archetype-basic_2.8.1 \
-DarchetypeVersion=2.3 \
-DarchetypeRepository=http://scala-tools.org/repo-releases \
-DremoteRepositories=http://scala-tools.org/repo-releases \
-DgroupId=com.mytest \
-DartifactId=helloworld \
-Dversion=2.0

我尝试将 OpenJDK 替换为 Sun JDK,但仍然无法正常工作。 H2有什么问题吗?我需要重新安装 H2 吗?还是电梯问题?

如果我终止运行并重新启动另一个,我将得到相同的异常,但只是不同的 tcp 端口,例如

org.h2.jdbc.JdbcSQLException: Exception opening port "H2 TCP Server
(tcp://208.68.143.50:55325)" (port may be in use), cause: "timeout" [90061-138]

【问题讨论】:

您可以尝试使用更新版本的 H2 吗?根据错误码,您使用的是1.2.138版本(2010-06-27),最近的版本(我相信是1.3.156版本)对错误信息进行了改进。 当前版本似乎是由 maven2 安装的,因为它是 lift 应用程序的依赖项之一。如果我安装一个新版本,maven2 还能用吗? 下载:scala-tools.org/repo-releases/com/h2database/h2/1.3.156/… [INFO] 无法在存储库 scala-tools.releases (scala-tools.org/repo-releases) 中找到资源 'com.h2database:h2:jar:1.3.156' 下载:repo1.maven.org/maven2/com/h2database/h2/1.3.156/h2-1.3.156.jar 13:30:26.505 [main] 调试 net.liftweb.mapper.MetaMapper - 为用户 org.h2.jdbc.JdbcSQLException 初始化 MetaMapper:异常打开端口“H2 TCP 服务器 (tcp://208.68) .143.50:36909)"(端口可能正在使用中),原因:org.h2.message.DbException.getJdbcSQLException(DbException.java:327) 处的“超时”[90061-156] 仍然遇到与 h2 156 相同的异常。 【参考方案1】:

也许您的应用程序仍在运行或端口尚未关闭。 使用“netstat”进行验证。

您可能想阅读 so_reuseaddr。

我的计算机上运行着一个服务器(它是 Common Lisp 而不是 H2,但这没关系):

xxx@fp:~$ netstat -tulpen
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp        0      0 127.0.0.1:4005          0.0.0.0:*               LISTEN      1000       68449       7559/sbcl       

我希望有一个进程正在侦听 208.68.143.50:55325。如果这个 IP 不是您的计算机,那么就会发生一些奇怪的事情。 您可以使用

开始您的应用程序
sudo strace -f mvn ... 2>&1 test.out

然后调查 test.out 文件。 'strace' 工具允许您记录程序发出的所有系统调用。在文件test.out 中搜索listen。

【讨论】:

我做了 netstat,端口上没有运行任何东西。我更新了问题。对于tcp ip+port组合,为什么每次都不一样?有没有办法将其设置为“恒定”?而且IP地址肯定不在我的网络上。【参考方案2】:

这很可能是网络配置问题。你能检查你的主机文件是否有奇怪的条目吗?我的主机文件是(Mac OS):

> cat /etc/hosts
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0     localhost

如果这个文件没有什么奇怪的,请下载H2并运行./build.sh testNetwork(或build.bat testNetwork for Windows)。在我的系统上,我得到:

Target: testNetwork
localhost:localhost/127.0.0.1
  localhost/127.0.0.1
  localhost/0:0:0:0:0:0:0:1
  localhost/fe80:0:0:0:0:0:0:1%1
getLocalHost:Thomas-Muellers-MacBook-Pro.local/192.168.0.105
  /192.168.0.105
byName:/192.168.0.105
ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=55489]
server accepting
client:/192.168.0.105:55489
server accepted:Socket[addr=/192.168.0.105,port=55490,localport=55489]
client:Socket[addr=/192.168.0.105,port=55489,localport=55490]
server read:123
client read:234
server closing
server done
done
Done in 1666 ms

当然 H2 可以只使用“localhost”,但是某些功能将无法按设计工作。

【讨论】:

以上是关于在 Fedora 15 上,在 Fedora 上启动 Lift 应用程序,获取 org.h2.jdbc.JdbcSQLException的主要内容,如果未能解决你的问题,请参考以下文章

fedora15 软件升级错误

fedora 15 中使用yum命令出错

fedora安装过程要求联网

fedora15下如何打开IDLE(python)?

新系统fedora15安装源码软件出现 make: *** 没有指明目标并且找不到 makefile。 停止

fedora 更新源命令