ISORequestListener中的并发问题

问题描述

我正在使用jpos库进行事务管理(Spring启动项目)。我正在实施ISORequestListener,如下所示。

@Component
public class MyRequestListner implements ISORequestListener,Configurable {

    protected String var1;
    protected String var2;

    @Override
    public void setConfiguration(Configuration cfg) throws ConfigurationException {
        var1 = cfg.get("var1");
        var2 = cfg.get("var2");
    }

    @Override
    public boolean process(ISOSource source,ISOMsg m) {
        Context ctx = new Context();
        ctx.put("ctx1",var1);
        ctx.put("ctx2",var2);
        return true;
    }
}

在运行SonarQube代码分析工具)时,出现以下错误消息:

用“ @Autowired”,“ @ Resource”,“ @ Inject”或“ @Value”注释全局变量,或者不要在Spring @ Component,@ Controller,@ Service和@Repository类上使用。 / p>

Spring @ Component,@ Controller,@ Service和@Repository类认为单例,这意味着在应用程序中仅实例化了该类的一个实例。

这样的类可能有一些静态成员,例如logger,但是所有非静态成员都应该由Spring管理。也就是说,它们应具有以下注释之一:@ Resource,@ Inject,@ Autowired或@Value。

这是否会导致任何并发问题(或线程问题)或由jpos内部处理?如果确实引起问题的话,正确的实现方法是什么?

解决方法

如果在jPOS自己的Q2微内核中运行jPOS,则没有问题。如果不是这种情况,恐怕您通常只能靠自己了。在Q2中运行非常简单,它是一个单一的衬里:new Q2().start();,您可以从任何其他框架运行,然后让Q2配置您的jPOS组件。