- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在打开的事务中,创建非事务性的顶点类型会关闭之前打开的数据库。以下示例抛出异常:
public class OrientDBTest {
public static void main(String[] args) {
final String url = "plocal:/Users/d022051/tmp/orientdbtest";
final OrientGraphFactory factory = new OrientGraphFactory(url);
final OrientGraph graphTx = factory.getTx();
final ODatabaseDocumentTx documentTx = graphTx.getRawGraph();
final OrientGraphNoTx graphNoTx = factory.getNoTx();
graphTx.begin();
OrientVertexType sequenceClassType = graphNoTx.createVertexType("Sequence");
sequenceClassType.createProperty("No", OType.LONG).setMin("0").setDefaultValue("0");
sequenceClassType.createProperty("Name", OType.STRING);
OSQLSynchQuery<ODocument> selectSequenceCommand = new OSQLSynchQuery<>("select from Sequence where Name = 'GLOBAL'");
List<ODocument> sequences = documentTx.query(selectSequenceCommand);
if (sequences.isEmpty()) {
graphTx.addVertex("class:" + "Sequence", "Name", "GLOBAL");
}
graphTx.shutdown();
}
}
异常显示“当前数据库未在当前线程上打开”。然而,如果在创建顶点类型后将 graphTx.begin() 语句向下移动,则一切都很好。因此 graphNoTx 命令正在关闭 documentTx 的数据库。我认为原因是当事务仍然打开时无法完成架构更改,因此事务被隐式关闭。但是,实际上交易仍然处于打开状态,并且使用 graphTx 的后续命令成功了:
public class OrientDBTest {
public static void main(String[] args) {
final String url = "plocal:/Users/d022051/tmp/orientdbtest";
final OrientGraphFactory factory = new OrientGraphFactory(url);
final OrientGraph graphTx = factory.getTx();
final ODatabaseDocumentTx documentTx = graphTx.getRawGraph();
final OrientGraphNoTx graphNoTx = factory.getNoTx();
graphTx.begin();
OrientVertexType sequenceClassType = graphNoTx.createVertexType("Sequence");
sequenceClassType.createProperty("No", OType.LONG).setMin("0").setDefaultValue("0");
sequenceClassType.createProperty("Name", OType.STRING);
graphTx.addVertex("class:" + "Sequence", "Name", "GLOBAL");
graphTx.shutdown();
}
}
运行没有错误。这看起来很奇怪吗?原因是什么?
最佳答案
@wolf4ood 是对的。在您的代码中,您创建附加了新数据库的事务图实例,并使该数据库处于 Activity 状态 final OrientGraph graphTx =factory.getTx();
然后您将其激活通过调用 final OrientGraphNoTx graphNoTx =factory.getNoTx();
来使用新数据库实例(与第一个不同)的非 tx 图形实例,但随后使用 Activity 的非 tx 图形数据库尝试启动属于图的 tx 实例的非 Activity 数据库上的事务。
如何避免这种情况。非常简单,只需在获取任何图实例factory.setupPool(5, 15)
之前执行以下代码即可。此代码将创建数据库池。 Pool 具有以下功能 - 对于相同的数据库 URL 和相同的线程,将返回相同的数据库实例(无论您是否获取事务图)。
关于java - 非事务性命令关闭 OrienttDB 中的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32838541/
在打开的事务中,创建非事务性的顶点类型会关闭之前打开的数据库。以下示例抛出异常: public class OrientDBTest { public static void main(Str
我是一名优秀的程序员,十分优秀!