0

是否可以在 Payara Server 5.193.1 上将 Eclipse MicroProfile Metrics 与基于 SOAP 的 Web 服务一起使用?@Counted 和 @Timed 似乎不适用于 @WebService 和 @WebMethod?虽然,@Metric 有效。这是设计使然还是有问题?

这是我的代码:

界面:

package nl.tent.laboratory.emp.metrics;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface MyWebService {

    @WebMethod
    String sayHello();

}

执行:

package nl.tent.laboratory.emp.metrics;

import javax.jws.WebService;
import org.eclipse.microprofile.metrics.annotation.Counted;

@WebService(endpointInterface = "nl.tent.laboratory.emp.metrics.MyWebService")
public class MyWebServiceImpl implements MyWebService {

//    @Inject
//    @Metric
//    Counter counter;

    public MyWebServiceImpl() {
        super();
    }

    @Counted(name = "myCounter")
    @Override
    public String sayHello() {
//        counter.inc();
        return "Hello Marc!";
    }

}
4

1 回答 1

2

@Counted 并且@Timed 是方法拦截器,仅适用于 CDI bean。@Metric 注入度量对象并在支持注入的地方工作,包括 Servlet 和 Web 服务。

在 Payara Server 中,Web 服务对象默认实现为 servlet。Servlet 可以注入 CDI bean,但它们本身不是 CDI bean,CDI 拦截器对它们不起作用。

您需要将您的 WS 转换为 CDI bean(例如使用 @RequestScoped)或 EJB(@Stateless)以启用 Metrics 拦截器。

于 2019-11-26T12:43:29.500 回答