「另一個進程鎖定」也許稱號,是自我解釋,但我想創建與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