Не удается найти фабрику бизнес-объектов с extensionID - PullRequest
0 голосов
/ 29 июня 2018

Я работаю над бизнес-слоем в Intershop 7 и пытаюсь создать пользовательский бизнес-объект A1PromotionBO со связанным бизнес-репозиторием (расширением) .

Я уже сделал слой Persistent Object (A1PromotionPO, Mgrs, модель EDL, автоматически сгенерированные классы, база данных ..).

Следуя этой книге - Бизнес-объекты (https://support.intershop.com/kb/index.php/Display/27K270), я

создан пакет * .a1promotion.capi, содержащий:

 - interface A1PromotionBO extends BusinessObject
 - interface A1PromotionBORepository extends BusinessObjectRepository
 - interface A1PromotionBORepositoryExtension extends BusinessObjectExtension<RepositoryBO>, A1PromotionBORepository

создан пакет * .a1promotion.internal, содержащий:

 - class ORMA1PromotionBOImpl extends AbstractExtensibleObjectBO<A1PromotionPO> implements A1PromotionBO
 - class ORMA1PromotionBORepositoryImpl extends AbstractDomainRepositoryBOExtension implements A1PromotionBORepository, ObjectMapper<Object, A1PromotionBO>
 - class A1PromotionBORepositoryExtensionFactory extends AbstractDomainRepositoryBOExtensionFactory

EXTENSION_ID = "A1PromotionBORepository" определяется как в интерфейсе A1PromotionBORepositoryExtension, так и в классе A1PromotionBORepositoryExtensionFactory.


И теперь конвейер, который возвращает коллекцию A1PromotionBO, не работает в режиме онлайн при создании A1PromotionBORepository PromotionBORepository:

public class GetPromotions extends Pipelet {
    @Inject
    private CurrentApplicationBOProvider applicationBOProvider;

    /** The domain mgr. */
    @Inject
    private DomainMgr domainMgr;

    @Override
    public int execute(PipelineDictionary dict) throws PipeletExecutionException {
        final ApplicationBO applicationBO = applicationBOProvider.get();
        final A1PromotionBORepository promotionBORepository = applicationBO.getRepository(A1PromotionBORepositoryExtensionFactory.EXTENSION_ID);

        final String promotionDomainName = dict.get("PromotionDomain");
        final Domain promotionDomain = domainMgr.getDomainByName(promotionDomainName);
        if (null == promotionDomain) {
            throw new PipeletExecutionException("Mandatory input parameter 'ProductsDomain' not available in pipeline dictionary.");
        }

        final Collection<A1PromotionBO> promotions = (Collection<A1PromotionBO>)promotionBORepository.getAllPromotions();
        dict.put("Promotions", promotions);

        return PIPELET_NEXT;
    }
}

Полный трек стека исключений:

Caused by: com.intershop.component.application.capi.ApplicationBOException: Can not find business object factory with extensionID A1PromotionBORepository in application ApplicationBO(Shop@A1-Site (app=a1Shop.Backoffice))
    at com.intershop.component.application.internal.ApplicationBORepositoriesExtensionImpl.getRepository(ApplicationBORepositoriesExtensionImpl.java:49)
    at com.intershop.component.application.internal.ApplicationBOImpl.getRepository(ApplicationBOImpl.java:222)
    at hr.a1.bo.promotion.pipelet.GetPromotions.execute(GetPromotions.java:44)
    at com.intershop.beehive.core.internal.pipeline.PipeletNode.executeNode(PipeletNode.java:346)
    ... 42 more
...