0

以前InternalProfileFormHandlerはアイテムを追加していましたInternalProfileRepository。アイテム (user:iuser310002) が目的のリポジトリに正常に追加されました。追加したら、dyn/admin にアクセスしてリポジトリを開き、.xml を使用して追加したばかりのアイテムを削除しました<remove-item item-descriptor="user" id="iuser310002" />。次に、呼び出された InternalProfileFormHandler を再度使用して、もう 1 つ項目を追加しました。しかし、今回はこんなatg.repository.RemovedItemException言葉がありました。Attempt to use an item which has been removed: user:iuser310002.

以前と同じ ID で新しいユーザーを作成しようとする理由がわかりません。作成したとしても、削除されたアイテムがこの問題を引き起こす理由はわかりません。InternalProfileRepository にデフォルトの idGenerator/atg/dynamo/service/IdGeneratorを使用しているため、同じ ID を生成するとは思いません。

これは、アイテムを1回正常に作成し、2回目から失敗したコードです...

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)
4

1 に答える 1

0

いろいろ調べてみると、その理由がわかりました。ユーザーの作成に加えて、同じユーザーのセッションも自動的に作成されます。dyn/admin のこのパスに移動すると、ユーザーを見つけることができます。/atg/dynamo/servlet/sessiontracking/GenericSessionManager/notdefined/atg/userprofiling/Profile/

次回、InternalProfileRepository のアイテムを削除すると、アイテムは正常に削除されますが、セッション オブジェクトはまだ存在します。

formhandler.handleCreate をもう一度呼び出すと、プロファイル オブジェクトが存在するかどうかがチェックされます。ユーザーが見つかった場合、新しいユーザーを作成する代わりに、同じユーザーを更新しようとしています。したがって、RemovedItemException を取得しています。

ただし、それが期待どおりかどうかはよくわかりません。

于 2014-02-20T02:42:56.880 に答える