首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何断开Glassfish上的所有JDBC连接并解锁H2数据库?

如何断开Glassfish上的所有JDBC连接并解锁H2数据库?
EN

Stack Overflow用户
提问于 2015-01-08 19:30:28
回答 1查看 772关注 0票数 1

我正在以tcp/多用户模式运行带有H2数据库的Glassfish 4.1服务器。我试图以编程方式更新单例bean中的表。我总是得到以下例外:

代码语言:javascript
复制
org.h2.jdbc.JdbcSQLException: Timeout trying to lock table "GLOBALS"; SQL statement: ALTER TABLE "PUBLIC".GLOBALS ADD STARTFLAG VARCHAR(512) [50200-176]

我知道表是锁定的,因为其中一个容器管理的实体管理器似乎在该表上有一个打开的连接。但是在alter语句的时候,没有任何连接的必要.

因此,我想知道是否有可能使用容器管理的JPA关闭所有jdbc连接?

下面是用于启动/连接到H2数据库的初始化字符串:

代码语言:javascript
复制
jdbc:h2:tcp://localhost/~/datastore/database;AUTO_SERVER=TRUE;MVCC=TRUE 
  • 我已经试图在update语句执行之前关闭容器管理的实体管理器和实体管理器工厂(但我认为这不是正确的方法,因为它是由容器处理的)。
  • 在执行update语句之前,我试图分离托管对象。
  • 我尝试添加MVCC=TRUE选项(多版本并发)。
  • 也尝试设置FILE_LOCK=NO,但是我得到了另一个异常,它告诉我这种组合选项无效。

但到目前为止没有成功..。

任何想法,高度赞赏-谢谢提前!

EN

回答 1

Stack Overflow用户

发布于 2015-01-09 12:37:03

出现在我脑海中的解决方案是关闭服务器并重新打开连接。

如果您正在使用java配置,则可以使用server.stop()

代码语言:javascript
复制
import org.h2.tools.Server;
...
// start the TCP Server
Server server = Server.createTcpServer(args).start();
...
// stop the TCP Server
server.stop();

如果您要通过您的URL创建db。您可以创建一个bat文件并从您的应用程序中以编程方式调用它。

代码语言:javascript
复制
java org.h2.tools.Server -tcpShutdown tcp://localhost:9092

您可以从H2网站找到更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27848077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档