如何在JPOS QServer监听器中@autowired spring beans?

时间:2017-06-20 11:47:44

标签: java spring-boot jpos

我们正在运行spring boot应用程序。在Spring启动之后,我们尝试运行JPOS QServer。它从Q2开始,我们可以从模拟器clinet中恢复ISOmsgs,我们也可以响应beck。

为了启动Q2,我们使用了xml配置,如下所示。

sudo service memcached start

从上面的xml看,它监听ISOMessangerListener类,它自然不是Spring相关的类,而且我认为spring和QServer正在不同的Servlet上运行。所以这里出现的问题是我们在这里没有任何与Spring相关的bean,我们不能@Autowired任何。但我们所有的业务逻辑都是在春天写的。

到目前为止我们尝试了什么

1)保持应用程序上下文是静态的,并在ISOMessageListener中需要时使用它(在接收到侦听器的消息后上下文为null)。

2)做这样的事情。 <server class="org.jpos.q2.iso.QServer" name="Server-A-Server" logger="Q2"> <attr name="port" type="java.lang.Integer">8118</attr> <attr name="maxSessions" type="java.lang.Integer">100</attr> <attr name="minSessions" type="java.lang.Integer">0</attr> <!-- Format server name: "Project Name" + "-" + "Channel" --> <channel name="Server-A-Channel" class="org.jpos.iso.channel.XMLChannel" logger="Q2" packager="org.jpos.iso.packager.XMLPackager"> </channel> <request-listener class="fi.neocard.jpos.ISOMessageListener"> <property name="timeout" value="10000"/> </request-listener>

并且很多艺术家都知道如何从春天以外获得背景。

到目前为止,我检查了SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);,Q2和Springboot都作为单个应用程序运行。

希望至少得到一些建议。

1 个答案:

答案 0 :(得分:1)

如果有人对此感兴趣我是如何工作的,而不是通过Q2(xml文件)运行ISOServer我只是在我的spring已经启动时手动完成,然后获取已经存在的ISORequestListener bean并将其传递给服务器。

@Component
public class ISOserver implements ISORequestListener {

@Autowired
ISOserver isOserver;

@EventListener(ContextRefreshedEvent.class)
public void contextRefreshedEvent() throws Exception{
    Logger logger = new Logger();
    logger.addListener(new SimpleLogListener(System.out));
    ServerChannel channel = new XMLChannel(new XMLPackager());
    ((LogSource) channel).setLogger(logger, "channel");
    ISOServer isoServer = new ISOServer(8118, channel, null);
    isoServer.setLogger(logger, "server");
    isoServer.addISORequestListener(isOserver);
    new Thread(isoServer).start();
}

@Override
public boolean process(ISOSource isoSource, ISOMsg receivedISOmsg) {

    return false;
}
}