如何解锁Xodus数据库?

时间:2018-08-19 03:51:59

标签: java xodus

我的应用程序崩溃了,然后

Caused by: jetbrains.exodus.ExodusException: Can't acquire environment lock after 0 ms.

 Lock owner info: 
null
    at jetbrains.exodus.log.Log.tryLock(Log.java:935)
    at jetbrains.exodus.log.Log.<init>(Log.java:91)
    at jetbrains.exodus.env.Environments.newLogInstance(Environments.java:137)
    at jetbrains.exodus.env.Environments.newLogInstance(Environments.java:115)
    at jetbrains.exodus.env.Environments.newLogInstance(Environments.java:104)
    at jetbrains.exodus.env.Environments.newInstance(Environments.java:59)
    at jetbrains.exodus.entitystore.PersistentEntityStores.newInstance(PersistentEntityStores.java:65)
    at jetbrains.exodus.entitystore.PersistentEntityStores.newInstance(PersistentEntityStores.java:69)

我知道这是因为对Xodus的所有访问都是专有的,但是在这种情况下如何“强制”解锁?

1 个答案:

答案 0 :(得分:3)

我做了一些挖掘:

  • 在最新版本的Xodus中,import wx import wx.stc as stc class MyFrame(wx.Frame): def __init__(self, *args, **kwds): kwds["style"] = wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self, *args, **kwds) self.tc = stc.StyledTextCtrl(self, style=wx.TE_MULTILINE | wx.TE_WORDWRAP) self.bt_find = wx.Button(self, -1, "find") self.Bind(wx.EVT_BUTTON, self.on_button, self.bt_find) self.Bind(wx.EVT_FIND, self.on_find) self.pos = 0 self.size = 0 # sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.tc, 1, wx.EXPAND, 0) sizer.Add(self.bt_find, 0, wx.ALIGN_CENTER_HORIZONTAL, 0) self.SetSizer(sizer) sizer.Fit(self) self.Layout() def on_button(self, event): self.txt = self.tc.GetValue() self.data = wx.FindReplaceData() # initializes and holds search parameters dlg = wx.FindReplaceDialog(self.tc, self.data, 'Find') dlg.Show() def on_find(self, event): self.tc.StartStyling(pos=0, mask=0xFF) self.tc.SetStyling(length=len(self.txt), style=0) fstring = event.GetFindString() self.size = len(fstring) while True: self.pos = self.txt.find(fstring, self.pos) if self.pos < 0: break self.tc.StyleSetSpec(1, "fore:#FF0000,back:#000000") self.tc.StartStyling(pos=self.pos, mask=0xFF) self.tc.SetStyling(length=self.size, style=1) self.pos += 1 self.pos = 0 if __name__ == "__main__": app = wx.App() frame_1 = MyFrame(None, wx.ID_ANY, "") frame_1.Show() app.MainLoop() 类不再存在。

  • 在Xodus的早期版本中,使用Log在Xodus如果找不到该目录将创建的目录上实现锁定。这种锁是任意的,并在拥有该锁的应用程序退出时自动释放

因此,如果遇到这种情况,则必须 正在运行该应用程序的另一个实例。导致该实例退出应释放锁定。

如果这样做没有帮助,请添加您正在使用的Xodus版本,以便我们更深入地了解。