Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试将项目添加到存储库时atg.repository.RemovedItemException_Exception_Atg_Atg Dynamo_Atg Dust - Fatal编程技术网

尝试将项目添加到存储库时atg.repository.RemovedItemException

尝试将项目添加到存储库时atg.repository.RemovedItemException,exception,atg,atg-dynamo,atg-dust,Exception,Atg,Atg Dynamo,Atg Dust,我已经使用InternalProfileFormHandler添加了一个项目InternalProfileRepository。它已成功地将项目(用户:iuser310002)添加到预期的存储库中。添加后,我访问了dyn/admin以打开存储库,并删除了我刚才使用添加的项目。然后我再次使用调用的InternalProfileFormHandler添加了一个项目。然而,这一次,我得到了一个atg.repository.RemovedItemException说试图使用一个已被删除的项目:user:

我已经使用
InternalProfileFormHandler
添加了一个项目
InternalProfileRepository
。它已成功地将项目(用户:iuser310002)添加到预期的存储库中。添加后,我访问了dyn/admin以打开存储库,并删除了我刚才使用
添加的项目。然后我再次使用调用的InternalProfileFormHandler添加了一个项目。然而,这一次,我得到了一个
atg.repository.RemovedItemException
试图使用一个已被删除的项目:user:iuser310002。

我不知道为什么它试图创建一个与以前相同id的新用户,即使我这样做了,为什么删除的项目会导致这个问题。我正在为InternalProfileRepository使用默认的idGenerator
/atg/dynamo/service/idGenerator
,因此我认为不会生成相同的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)
atg.repository.RemovedItemException:尝试使用已删除的项目:用户:iuser310002
位于atg.adapter.gsa.ItemTransactionState.(ItemTransactionState.java:385)
位于atg.adapter.gsa.GSAItem.getItemTransactionState(GSAItem.java:2421)
位于atg.adapter.gsa.GSAItem.getItemTransactionState(GSAItem.java:2364)
在atg.adapter.gsa.GSAItem.getItemTransactionStateUnchecked(GSAItem.java:2600)中
位于atg.adapter.gsa.GSAItem.getPropertyValue(GSAItem.java:1511)
位于atg.repository.RepositoryItemImpl.getPropertyValue(RepositoryItemImpl.java:151)
位于atg.adapter.composite.CompositeItem.createPropertyQuery(CompositeItem.java:739)
位于atg.adapter.composite.CompositeItem.getPropertyLinkedItem(CompositeItem.java:630)
位于atg.adapter.composite.CompositeItem.getContributingItem(CompositeItem.java:577)
在atg.adapter.composite.CompositeItem.FindContributionItem(CompositeItem.java:561)中
在atg.adapter.composite.MutableCompositeItem.FindContributionItem(MutableCompositeItem.java:971)中
在atg.adapter.composite.MutableCompositeItem.getOrCreateContributingItem(MutableCompositeItem.java:985)中
位于atg.adapter.composite.MutableCompositeItem.setPropertyValue(MutableCompositeItem.java:210)
在atg.userprofiling.ProfileForm.updateprofileAttribute(ProfileForm.java:3761)中
在atg.userprofiling.ProfileForm.updateprofileAttribute(ProfileForm.java:3528)中
位于atg.userprofiling.ProfileForm.createUser(ProfileForm.java:1507)
位于atg.userprofiling.ProfileForm.handleCreate(ProfileForm.java:1214)
在atg.userprofiling.ProfileFormHandler.handleCreate(ProfileFormHandler.java:402)中
在atg.scenario.userprofiling.ScenarioProfileFormHandler.handleCreate(ScenarioProfileFormHandler.java:599)
在atg.test.steps.CreateInternalUserStep.runTest(CreateInternalUserStep.java:45)中

经过仔细研究,我找到了原因。在创建用户的同时,还会自动为同一用户创建会话。可以通过在dyn/admin中转到此路径找到用户<代码>/atg/dynamo/servlet/sessiontracking/GenericSessionManager/notdefined/atg/userprofiling/Profile/

下次删除InternalProfileRepository中的项目时,该项目将被成功删除,但会话对象仍然存在

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


但是,我不太确定这是否是预期的结果。

基本上就是这样。因此,为了删除配置文件,您需要先注销(或终止会话),然后调用removietem.aaah。。。谢谢你的确认。然而,我有一个后续的疑问,当我们添加一些测试数据并在测试后删除它们时,我们也遇到了这个问题。非概要数据、一些新目录等在测试前添加,并在测试后删除。当我们尝试在不重新启动服务器的情况下再次运行测试时,这会导致问题中提到的相同问题。你有什么建议吗?终止会话也可以在这里工作吗?您正在运行多少实例以及设置了什么类型的缓存?也许这也给你带来了问题。删除项目后,请清除存储库缓存,看看是否仍然存在问题。@radimpe我们只运行一个实例。缓存很简单,但我们从未尝试过。我会试一试的,谢谢。