【问题标题】:atg.repository.RemovedItemException when trying to add an item to Repository尝试将项目添加到存储库时出现 atg.repository.RemovedItemException
【发布时间】:2014-02-19 12:53:50
【问题描述】:

我使用InternalProfileFormHandler 添加了一个项目InternalProfileRepository。它已成功将项目(用户:iuser310002)添加到预期的存储库。添加后,我已访问 dyn/admin 以打开存储库并删除了我刚刚使用 <remove-item item-descriptor="user" id="iuser310002" /> 添加的项目。然后我再次使用调用的 InternalProfileFormHandler 来添加一项。然而这一次,我得到了一个atg.repository.RemovedItemException 说Attempt to use an item which has been removed: user:iuser310002.

我不确定它为什么要尝试创建一个与以前具有相同 id 的新用户,即使我这样做了,为什么删除的项目会导致此问题。我使用默认 idGenerator /atg/dynamo/service/IdGenerator 作为 InternalProfileRepository,所以我认为我不会生成相同的 id。

这是一次成功创建项目并从第二次失败的代码......

FormHandlerInvoker invoker = new FormHandlerInvoker("/atg/userprofiling/InternalProfileFormHandler", Nucleus.getSystemNucleus());

try {
    String paramName;
    int paramCounter = 1;
    while((paramName = (String) getCurrentTestParams().get("param" + paramCounter)) != null)
    {
        invoker.addInput(paramName, (String) getCurrentTestParams().get("value" + paramCounter));
        paramCounter++;
    }
} catch (ServletException e) {
    e.printStackTrace();
}
FormHandlerInvocationResult result;
ProfileFormHandler formHandler = null;
try {
    result = invoker.invoke();
    formHandler =
    (ProfileFormHandler)result.getDefaultFormHandler();
    formHandler.handleCreate(result.getRequest(), result.getResponse());
}

以下是异常日志...这是由formHandler.handleCreate方法调用引起的。

atg.repository.RemovedItemException: Attempt to use an item which has been removed: user:iuser310002
    at atg.adapter.gsa.ItemTransactionState.<init>(ItemTransactionState.java:385)
    at atg.adapter.gsa.GSAItem.getItemTransactionState(GSAItem.java:2421)
    at atg.adapter.gsa.GSAItem.getItemTransactionState(GSAItem.java:2364)
    at atg.adapter.gsa.GSAItem.getItemTransactionStateUnchecked(GSAItem.java:2600)
    at atg.adapter.gsa.GSAItem.getPropertyValue(GSAItem.java:1511)
    at atg.repository.RepositoryItemImpl.getPropertyValue(RepositoryItemImpl.java:151)
    at atg.adapter.composite.CompositeItem.createPropertyQuery(CompositeItem.java:739)
    at atg.adapter.composite.CompositeItem.getPropertyLinkedItem(CompositeItem.java:630)
    at atg.adapter.composite.CompositeItem.getContributingItem(CompositeItem.java:577)
    at atg.adapter.composite.CompositeItem.findContributingItem(CompositeItem.java:561)
    at atg.adapter.composite.MutableCompositeItem.findContributingItem(MutableCompositeItem.java:971)
    at atg.adapter.composite.MutableCompositeItem.getOrCreateContributingItem(MutableCompositeItem.java:985)
    at atg.adapter.composite.MutableCompositeItem.setPropertyValue(MutableCompositeItem.java:210)
    at atg.userprofiling.ProfileForm.updateProfileAttributes(ProfileForm.java:3761)
    at atg.userprofiling.ProfileForm.updateProfileAttributes(ProfileForm.java:3528)
    at atg.userprofiling.ProfileForm.createUser(ProfileForm.java:1507)
    at atg.userprofiling.ProfileForm.handleCreate(ProfileForm.java:1214)
    at atg.userprofiling.ProfileFormHandler.handleCreate(ProfileFormHandler.java:402)
    at atg.scenario.userprofiling.ScenarioProfileFormHandler.handleCreate(ScenarioProfileFormHandler.java:599)
    at atg.test.steps.CreateInternalUserStep.runTest(CreateInternalUserStep.java:45)

【问题讨论】:

    标签: exception atg atg-dynamo atg-dust


    【解决方案1】:

    经过一番挖掘,我找到了原因。除了创建用户,还会自动为同一用户创建会话。通过进入 dyn/admin 中的此路径可以找到该用户。 /atg/dynamo/servlet/sessiontracking/GenericSessionManager/notdefined/atg/userprofiling/Profile/

    下次我在 InternalProfileRepository 中删除项目时,项目已成功删除,但会话对象仍然存在。

    当我再次调用 formhandler.handleCreate 时,它​​正在检查配置文件对象是否存在。当它找到用户时,它会尝试更新同一个用户,而不是创建一个新用户。因此,我得到了 RemovedItemException。

    但是,我不太确定这是否符合预期。

    【讨论】:

    • 基本上就是这样。因此,为了让您删除配置文件,您需要先注销(或终止会话),然后调用 RemoveItem。
    • aaah... 感谢您的确认。但是我有一个随后的疑问,当我们添加一些测试数据并在测试后删除它们时,我们也遇到了这个问题。不是配置文件数据,一些新的目录等,在测试之前添加,在测试之后删除。当我们尝试在不重新启动服务器的情况下再次运行测试时,这会导致问题中提到的相同问题。你有什么解决办法吗?杀死会话也可以在这里工作吗?
    • 您正在运行多少个实例以及您设置了哪种类型的缓存?也许这也给你带来了问题。删除项目后清除存储库缓存,看看是否仍然存在问题。
    • @radimpe 我们运行单个实例。缓存很简单,但我们从未尝试过。会试一试,谢谢。
    猜你喜欢
    • 2012-01-01
    • 2016-01-26
    • 2021-07-09
    • 2021-12-27
    • 2012-08-14
    • 1970-01-01
    • 2019-12-09
    • 2017-05-04
    • 2013-01-04
    相关资源
    最近更新 更多