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;
そして今、それは注入されています。ちなみに、別のロガー実装を使用したいので、少し当惑しています..