0

CDI を JBeret SE で動作させようとしています。これは私のコードです:

SampleBatchlet クラス

@Named
public class SampleBatchlet extends AbstractBatchlet
{
    @Inject
    @BatchProperty(name = "foo")
    String foo;

    @Inject
    StepContext stepContext;


    @Inject
    Logger logger;

    @Override
    public String process() throws Exception {
        final String say = stepContext.getProperties().getProperty("say");
        System.out.println("hello foolish");
        return null;
    }
}

SampleBatchletTest クラス

@EnableWeld
class SampleBatchletTest {

    @Inject
    Logger logger;

    @WeldSetup
    public WeldInitiator weld = WeldInitiator
            .from(
                    LoggerProducer.class
            )
            .activate(
                    RequestScoped.class,
                    ApplicationScoped.class
            )
            .build();


    @Test
    void app() throws InterruptedException {

        final JobOperator jobOperator = BatchRuntime.getJobOperator();

        long id = jobOperator.start("simplebatchlet", null);

        final JobExecutionImpl jobExecution = (JobExecutionImpl) jobOperator.getJobExecution(id);
        jobExecution.awaitTermination(5, TimeUnit.SECONDS);
        Assertions.assertEquals(BatchStatus.COMPLETED, jobExecution.getBatchStatus());
    }

}

サーバークラス

@ApplicationScoped
public class Server {

    @Inject
    private Logger logger;

    public void init(@Observes @Initialized(ApplicationScoped.class) Object init) throws InterruptedException {
        logger.info("init");
}

LoggerProducer クラス

public class LoggerProducer {
    @Produces
    public Logger produceLogger(InjectionPoint injectionPoint) {
        return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
    }
}

問題は、Logger インスタンスが SampleBatchlet に挿入されていないのに対し、上記のテスト クラスとサーバー クラスのいずれかに正しく挿入されていることです。

ヒントはありますか?

少し更新

このリファレンスを読むことで

https://jberet.gitbooks.io/jberet-user-guide/content/batch_properties/

java.util.logging.Logger を注入できることを発見しました。

したがって、私は追加しました

<batchlet ref="it.infocert.shop.main.SampleBatchlet" >
    <properties>
        <property name="logger" value="java.util.logging.Logger" />
    </properties>
</batchlet>

値は実際には何でもかまいません..

SampleBatchletに追加しました

@Inject
@BatchProperty
Logger logger;

そして今、それは注入されています。ちなみに、別のロガー実装を使用したいので、少し当惑しています..

4

2 に答える 2