我已使用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.
atg.repository.RemovedItemException嘗試將項目添加到存儲庫時
我不知道爲什麼它試圖創建一個新的用戶具有相同的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)
這基本上是如何工作的。因此,爲了讓您刪除配置文件,您需要先註銷(或終止會話),然後再調用RemoveItem。 – radimpe
aaah ...感謝您的確認。不過,我有一個疑問,當我們添加一些測試數據並在測試後刪除它們時,我們也遇到了這個問題。在測試之前添加不是配置文件數據,一些新的目錄等,並在測試之後移除。當我們嘗試在不重新啓動服務器的情況下再次運行測試時,這會導致問題中提到的問題。你有建議嗎?會在這裏殺死會議作品嗎? – Buddha
您正在運行多少個實例以及您設置了哪種類型的緩存?也許這也是你的問題。刪除項目後,清除存儲庫緩存並查看它是否仍然存在問題。 – radimpe