2014-02-19 1 views
0

Я использовал 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 при попытке добавить элемент в репозиторий

Я не уверен, почему он пытается создать нового пользователя с тем же идентификатором, что и раньше, и даже если бы я это сделал, почему элемент, который удаляется, должен вызвать это вопрос. Я использую default idGenerator /atg/dynamo/service/IdGenerator для InternalProfileRepository, поэтому я не думаю, что я буду генерировать одинаковый идентификатор.

Вот код, который успешно создали деталь раз и отказами во второй раз ...

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) 

ответ

0

После некоторого рытья вокруг, я выяснил причину. Наряду с созданием пользователя, сеанс также создается для одного и того же пользователя автоматически. Пользователь можно найти, перейдя по этому пути в dyn/admin. /atg/dynamo/servlet/sessiontracking/GenericSessionManager/notdefined/atg/userprofiling/Profile/

В следующий раз, когда я удаляю элемент в InternalProfileRepository, элемент удаляется успешно, но объект сеанса все еще существует.

Когда я вызываю formhandler.handleCreate снова, он проверяет, существует ли объект профиля. Когда он нашел пользователя, он пытается обновить одного и того же пользователя, а не создавать новый. Следовательно, я получаю исключение RemovedItemException.

Однако я не совсем уверен, что это то, что ожидается.

+0

Это в основном, как это работает. Поэтому, чтобы удалить профиль, вам необходимо сначала выйти из системы (или убить сеанс), а затем вызвать RemoveItem. – radimpe

+0

aaah ... Спасибо за подтверждение. Однако у меня есть последующие сомнения, мы также получили эту проблему, когда добавляем некоторые тестовые данные и удаляем их после наших тестов. Не данные профиля, некоторый новый каталог и т. Д. Добавляются перед тестами и удаляются после тестов. Это вызывает ту же проблему, о которой упоминалось в вопросе, когда мы снова пытаемся запустить тесты без перезагрузки сервера. Вы предлагаете любую работу вокруг? также будет убивать сессию здесь? – Buddha

+0

Сколько экземпляров вы используете и какой тип кэширования у вас есть? Возможно, это также вызывает у вас проблемы. Очистите кэш хранилища после удаления элементов и выясните, все еще проблема. – radimpe