手动释放代理占用的资源?
Manually releasing a seized resource from an agent?
我有一个相当简单的过程:
batch-seize-delay process
Order agent types 被分批为 Batch agent type,然后第三个 agent type 作为该 Batch 的 Resource。在占用时,一条消息被发送到资源代理的状态图,以便采取一些行动。但是,如果在收到消息后满足特定条件,则 Batch 代理需要释放 Resource 代理并占用另一个资源代理,以便完成该过程。我在 Resource 代理中编写了代码,当它被拒绝 (rejectionsCollection.add(Batch)
) 时,将被拒绝的 Batch 代理添加到上面显示的集合中。然后,使用注入调用将 Batch 代理重新插入到第二个源块中,我用 rejectionsCollection.get(0)
对 'New agent' 选项进行了编码。但是,我还必须在 seize 和 delay 块中调用 remove()
否则我会得到流程图错误(同一代理同时在两个块中)。
当我使用 seize.remove(batch)
作为满足条件时要采取的操作,但问题是资源代理没有被释放。我还将 seize 高级选项 'Canceled units' 设置为 'go to release' 并将 'Release for canceled units' 设置为我的释放块,但这不起作用。第三个代理仍然被占用,最终我 运行 没有资源代理(这不应该发生)。
我也试过将它复制到 NewBatch 代理中 Batch newBatch = batch;
但它仍然给出流程图错误。我也尝试过使用 clone()
但我还没有找到正确的语法(我不是最有经验的 java 程序员)。我收到错误消息 'cannot convert from Object to Batch'。不确定它是否相关,但 Batch 代理中也有两个集合。
我的下一个想法是我可以手动释放资源代理,但帮助文件说即使被占用的资源可以公开访问,用户也不应该这样做。我还能尝试什么?
抱歉文字墙,但任何想法都会受到赞赏!
您没有手动释放资源。该设置以代理为中心,因此您必须告诉代理放弃资源。这是通过让代理“移动”到释放块来完成的。
在您的情况下,您可以将延迟持续时间设置为有条件的:如果代理满足您的条件,则延迟时间应为 0,否则为正常延迟时间。
使用这种表示法:agent.condition == true ? 0. : normalDelayTime
您也可以在“Seize”之后使用“Split”元素,并为您的特工完全绕过“delay”对象。
很多选项,但请记住以代理为中心:)
我有一个相当简单的过程:
batch-seize-delay process
Order agent types 被分批为 Batch agent type,然后第三个 agent type 作为该 Batch 的 Resource。在占用时,一条消息被发送到资源代理的状态图,以便采取一些行动。但是,如果在收到消息后满足特定条件,则 Batch 代理需要释放 Resource 代理并占用另一个资源代理,以便完成该过程。我在 Resource 代理中编写了代码,当它被拒绝 (rejectionsCollection.add(Batch)
) 时,将被拒绝的 Batch 代理添加到上面显示的集合中。然后,使用注入调用将 Batch 代理重新插入到第二个源块中,我用 rejectionsCollection.get(0)
对 'New agent' 选项进行了编码。但是,我还必须在 seize 和 delay 块中调用 remove()
否则我会得到流程图错误(同一代理同时在两个块中)。
当我使用 seize.remove(batch)
作为满足条件时要采取的操作,但问题是资源代理没有被释放。我还将 seize 高级选项 'Canceled units' 设置为 'go to release' 并将 'Release for canceled units' 设置为我的释放块,但这不起作用。第三个代理仍然被占用,最终我 运行 没有资源代理(这不应该发生)。
我也试过将它复制到 NewBatch 代理中 Batch newBatch = batch;
但它仍然给出流程图错误。我也尝试过使用 clone()
但我还没有找到正确的语法(我不是最有经验的 java 程序员)。我收到错误消息 'cannot convert from Object to Batch'。不确定它是否相关,但 Batch 代理中也有两个集合。
我的下一个想法是我可以手动释放资源代理,但帮助文件说即使被占用的资源可以公开访问,用户也不应该这样做。我还能尝试什么?
抱歉文字墙,但任何想法都会受到赞赏!
您没有手动释放资源。该设置以代理为中心,因此您必须告诉代理放弃资源。这是通过让代理“移动”到释放块来完成的。
在您的情况下,您可以将延迟持续时间设置为有条件的:如果代理满足您的条件,则延迟时间应为 0,否则为正常延迟时间。
使用这种表示法:agent.condition == true ? 0. : normalDelayTime
您也可以在“Seize”之后使用“Split”元素,并为您的特工完全绕过“delay”对象。
很多选项,但请记住以代理为中心:)