Я пытаюсь создать расширение, используя quarkus, чтобы использовать ibm mq как для собственного исполняемого файла. До сих пор я создал (в модуле времени выполнения) производителя ConnectionFactory:
@ApplicationScoped
public class ConnectionFactoryProducer {
@Produces
@ApplicationScoped
@DefaultBean
public JmsConnectionFactory connectionFactory() throws JMSException {
JmsFactoryFactory ff;
JmsConnectionFactory factory;
ff = JmsFactoryFactory.getInstance(JmsConstants.WMQ_PROVIDER);
factory = ff.createConnectionFactory();
// Always work in TCP/IP client mode
factory.setIntProperty(CommonConstants.WMQ_CONNECTION_MODE, CommonConstants.WMQ_CM_CLIENT);
factory.setStringProperty(CommonConstants.WMQ_HOST_NAME, "localhost");
factory.setIntProperty(CommonConstants.WMQ_PORT, 1414);
factory.setStringProperty(CommonConstants.WMQ_CHANNEL, "DEV.ADMIN.SVRCONN");
factory.setStringProperty(CommonConstants.WMQ_QUEUE_MANAGER, "QM1");
factory.setStringProperty(WMQConstants.USERID, "admin");
factory.setStringProperty(WMQConstants.PASSWORD, "passw0rd");
return factory;
}
}
Модуль развертывания содержит процессор:
public final class IbmExtProcessor {
private static final String FEATURE = "ibm-ext";
@BuildStep
FeatureBuildItem feature() {
return new FeatureBuildItem(FEATURE);
}
}
Где FEATURE - имя расширения.
Но когда я пытаюсь выполнить код, используя расширение, импортируя его как зависимость в моем проекте, ничего не происходит. Похоже, что классы, которые используют зависимость, больше не находятся в контексте приложения. Пример производителя сообщения:
public class NumberProducer implements Runnable {
private final Random random = new Random();
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
@Inject
private ConnectionFactoryProducer cf;
private ConnectionFactory c;
void onStart(@Observes StartupEvent ev) throws JMSException {
c=cf.connectionFactory();
scheduler.scheduleWithFixedDelay(this, 0L, 1L, TimeUnit.SECONDS);
}
void onStop(@Observes ShutdownEvent ev) {
scheduler.shutdown();
}
@Override
public void run() {
JMSContext context = c.createContext();
Queue destination=context.createQueue("queue:///DEV.QUEUE.1");
try {
TextMessage message = context.createTextMessage(String.format("Value : %d", random.nextInt(100)));
JMSProducer producer = context.createProducer();
producer.send(destination, message);
System.out.println(message);
} catch (Exception e) {
throw e;
}
}
}
В этом случае я никогда не получу печать переменной сообщения. Кто-нибудь может помочь? Я думаю, что что-то упустил в расширении, но я не могу понять, что может быть.