【发布时间】:2011-04-08 23:39:46
【问题描述】:
我正在编写一个 WLST 脚本来部署一些 WAR 和一个 EAR。但是,该脚本会间歇性地超时,因为它似乎无法获得编辑锁定(此脚本是许多其他脚本链的一部分)。我想知道,有没有办法覆盖或停止服务器上的任何当前锁?这只是一个临时解决方案,但考虑到时间,现在就可以了。
谢谢。
【问题讨论】:
我正在编写一个 WLST 脚本来部署一些 WAR 和一个 EAR。但是,该脚本会间歇性地超时,因为它似乎无法获得编辑锁定(此脚本是许多其他脚本链的一部分)。我想知道,有没有办法覆盖或停止服务器上的任何当前锁?这只是一个临时解决方案,但考虑到时间,现在就可以了。
谢谢。
【问题讨论】:
您可以尝试设置等待时间和超时时间:
startEdit([waitTimeInMillis], [timeoutInMillis], [exclusive]).
其他脚本是否出错,导致会话锁定?您可以尝试围绕这些添加异常处理。此外,如果您在管理控制台中启用了“自动获取锁定”并且您使用管理控制台有时会在同时运行脚本时导致问题,即使您没有进行“需要锁定”的更改。
另外,您是否对链式脚本使用相同的用户?
【讨论】:
在 WLST 中,您可以传递一个数字作为参数来获得排他锁。这允许脚本获取与管理员从控制台锁定时使用的常规锁定不同的锁定。它还可以防止同一脚本的两个实例相互踩踏。
但是,这会产生复杂的变更合并场景,最好避免(通过流程)。
可以在here找到Oracle关于配置锁的文档。
或者,如果您希望脚本暂时解除任何现有的锁定,而不管挂起的更改如何,您也可以从控制台禁用更改管理,从而最大程度地减少造成的不便。
WLST 还包含cancelEdit 命令,您可以在startEdit 之前运行该命令。希望这些选项之一成功!
【讨论】:
要从其他管理员那里获取配置更改锁定: 如果另一个管理员已经拥有配置锁,则会显示以下消息:另一个用户已经拥有该锁。您将需要等待锁被释放,或者获取锁。
【讨论】:
只要您以管理用户身份运行 WLST,您就应该能够使用 edit() 命令跳转到现有的编辑会话 - 我已经对两个管理员用户进行了快速测试,其中一个在 Admin控制台和一个使用 WLST 的控制台,它似乎工作正常 - 我可以在 WLST 解释器中看到管理控制台会话中的更改。
您可以在对startEdit 的调用周围放置一个非常简单的异常处理程序,该处理程序将记录异常的堆栈跟踪,但什么也不做。然后依靠edit 调用将您弹出到更改会话中。
如果另一个脚本已经启动了一个编辑会话并且期望能够自己提交该更改会话,那么依赖它将会很棘手 - 您将在多次调用中遇到异常和不可靠的行为。
【讨论】: