“另一个进程锁定”也许称号,是自我解释,但我想创建与H2数据库的嵌入式实例的Web应用程序。我正在配置Tomcat 7以使用JDBC领域进行基于表单的身份验证。 server.xml
有:嵌入式H2 + Tomcat的7 JDBC领域+ Hibernate的=
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="org.h2.Driver"
connectionURL="jdbc:h2:/someDir/myDB"
connectionName="userName"
connectionPassword="password"
userTable="user_enabled"
userNameCol="user_name"
userCredCol="pass"
userRoleTable="user_role"
roleNameCol="role_name" />
我也使用Hibernate进行持久化。 persistence.xml
有:
<property name="hibernate.connection.driver_class" value="org.h2.Driver" />
<property name="hibernate.connection.url" value="jdbc:h2:/someDir/myDB" />
<property name="hibernate.connection.username" value="userName" />
<property name="hibernate.connection.password" value="password" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.show_sql" value="true" />
<property name="current_session_context_class" value="org.hibernate.context.internal.ThreadLocalSessionContext" />
如果我尝试启动我得到的服务器:
(...) Caused by: org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process".
我的web应用程序无法启动。
启动一个H2 TCP服务器,并与jdbc:h2:tcp://myIP/
更换JDBC的URL工作正常。所以我的数据库文件没有问题。另外,我确定没有其他人试图使用这些文件。所以冲突只能在JDBC领域和Hibernate之间进行。
为什么我想要一个嵌入式服务器?出于经典原因:我想分发这个应用程序,我不希望用户必须启动两个进程而不是一个进程。此外,这不会是一个共享数据库,所以不需要为此创建新的进程。最后,没有额外的服务器端口为数据库打开,这对安全性有好处。
的可能的复制[H2数据库错误:数据库可能已经在使用中:“另一个进程锁定”(https://stackoverflow.com/questions/ 8158969/H2-数据库错误数据库可待已经在使用的锁定逐另一处理)。 –
它不是重复的。发生的事情是一样的,但它是Tomcat JDBC领域和Hibernate之间的不兼容。这不是我的代码造成问题的原因,因此这个问题在这里不适用。 – Akira