AEM 6.2:实现预处理器的多个类。首先挑选哪一个?

时间:2017-09-19 19:20:10

标签: aem cq5

我创建了两个实现com.day.cq.replication.Preprocessor接口的类(例如MyClass1和MyClass2)。

在两者中,我覆盖preprocess()并添加日志。

当我激活页面时,始终首先打印MyClass1(例如)日志语句。 这是什么原因以及如何控制首先应该选择哪个预处理器类?

我的课程如下:

@Service(Preprocessor.class)
@Component(metatype = true, 
label="Class One",
description="Do something")
public class MyClass1 implements Preprocessor {

private static final Logger LOG = LoggerFactory.getLogger(MyClass1.class);


@Reference
private Replicator replicator;

/**
 *
 * 
 * @see Preprocessor#preprocess(ReplicationAction, ReplicationOptions)
 */
@Override
public void preprocess(ReplicationAction action, ReplicationOptions options) 
throws ReplicationException {
LOG.info("In MyClass1")
    }
}

1 个答案:

答案 0 :(得分:0)

如果订单对预处理器服务很重要,您会看到其中记录的是JavaDoc,例如6.3 doc does not mention order

  

我不相信有一种指定顺序的方法,但是,您可能想要打开日托票并让adobe告诉您是否有可能,因为他们有源代码。

您可以尝试并提供服务排名并测试是否有效并告诉我们。

这是您的服务,排名最低:

  

我基本上添加了注释@Property和OSGI服务排名。您也可以将intValue更改为尽可能高的Integer.MAX_VALUE,看看是否有效。

import org.osgi.framework.Constants;

@Service(Preprocessor.class)
@Component(metatype = true, 
label="Class One",
description="Do something")
@Property(name = Constants.SERVICE_RANKING, intValue = Integer.MIN_VALUE) // < -----------------
public class MyClass1 implements Preprocessor {

private static final Logger LOG = LoggerFactory.getLogger(MyClass1.class);


@Reference
private Replicator replicator;

/**
 *
 * 
 * @see Preprocessor#preprocess(ReplicationAction, ReplicationOptions)
 */
@Override
public void preprocess(ReplicationAction action, ReplicationOptions options) 
throws ReplicationException {
LOG.info("In MyClass1")
    }
}
祝你好运!