0

数週間前、私は Alfresco 3.4.14 に基づいて AMP を開発しました。そのモジュールでは、いくつかのカスタマイズされたサービスを作成しました。サービスの 1 つは、新しいユーザーを作成する方法で、ユーザーを管理するために使用されました。

public NodeRef createUser(<my_parameters>) {
    ..........................
    ..........................
    HashMap<QName, Serializable> properties = new HashMap<QName, Serializable>();

    properties.put(ContentModel.PROP_USERNAME, username);
    properties.put(ContentModel.PROP_PASSWORD, password);
    ..........................
    ..........................
    NodeRef person = personService.createPerson(properties);
    return person;
}

すべてのサービスは、次の alfresco コンテキスト ファイルで定義されています。

<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="customUserService" class="com.mycustom.service.impl.CustomUsersServiceImpl">
        <property name="personService" ref="PersonService"/>
        <property name="nodeService" ref="NodeService"/>
    </bean>
    <bean id="customProjectsService" class="com.mycustom.service.impl.CustomProjectsServiceImpl">
        <property name="searchService" ref="SearchService"/>
        <property name="nodeService" ref="NodeService"/>
    </bean>
</beans>

すべてが正常に機能していました。ユーザーを作成し、他のカスタマイズされたサービスを実行できました...ここまでは完璧です!!!!!!!! アプリケーションは正常に動作していました。


数日前、コンテキスト内のすべての Bean を定義する代わりに、Spring アノテーションの使用を開始することにしました。

package com.mycustom.service.impl;

@Service("customUsersService")
public class CustomUsersServiceImpl implements CustomUsersService {

    @Override
    public NodeRef createUser(<my_parameters>) {
    }
}

コンテキスト ファイルで、Spring コンポーネント スキャンを使用するには、次のようにします。

<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:annotation-config/>
    <context:component-scan base-package="com.mycustom.service" />
</beans>

すべてのサービスは正常に動作しており、アプリケーションも正常に動作しているように見えました。アノテーションを使用してアプリケーションを切り離すことができたので、私たちは満足していました。

BUTTTTTTTTTTTT、ユーザーを作成しようとしたときに、エクスプローラーまたはアプリケーションを介して同じエラーが発生しました: Failed to create Person due to error: xxxxxxx beforeCreateNode: use PersonService to create person

ここに画像の説明を入力

4

1 に答える 1

0

PersonServiceImpl クラスをデバッグすると、エラーが beforeCreateNodeValidationBehaviour.enable(); の行にあることがわかりました。

public NodeRef createPerson(Map<QName, Serializable> properties, Set<String> zones) {
    .....................
    .....................
    NodeRef personRef = null;
        try
        {
            beforeCreateNodeValidationBehaviour.disable();

            personRef = nodeService.createNode(
                    getPeopleContainer(),
                    ContentModel.ASSOC_CHILDREN,
                    getChildNameLower(userName), // Lowercase:
                    ContentModel.TYPE_PERSON, properties).getChildRef();
        }
        finally
        {
            //ERROR!!!!!!!!!!!!!!!!
            beforeCreateNodeValidationBehaviour.enable();
        }
    .....................
    .....................
}

いくつかの調査の後、コードを元に戻し、スプリング コンポーネント スキャンを削除したところ、アプリケーションは再び正常に動作していました。

Alfresco サポートにチケットをオープンしたところ、この問題は alfresco 4.1.4 で修正されているとのことでした。

次に、私たちのように Alfresco の以前のバージョンを使用している人は、これに注意して、コンポーネント スキャンを削除し、手動の Bean ワイヤリングに置き換えます。

于 2014-07-25T21:40:06.727 に答える