9

我读过跨多个线程共享单个 JAXBContext 对象可以大大降低使用 JAXB 的应用程序的 CPU 使用率。一个证明是here。我们目前正在使用 Apache CXF 来开发 Web 服务。Apache CXF 默认使用 JAXB。

  • 据此,可以通过配置文件将 Apache CXF 配置为使用 JAXBContext 的单个实例
  • 据此,我们可以提供一个配置文件给CXF。这个配置文件是一个 Spring 配置文件。
  • 据此,Apache CXF 可以在没有 Spring 的情况下使用

鉴于上述信息,我如何将 Apache CXF 配置为使用单个 JAXBContext 而不使用基于 Spring 的配置文件,因为我正在查看使用没有 Spring 的 servlet 传输的代码库?是否可以为 JAXBContext 添加任何其他配置参数以进一步提高性能?

4

1 回答 1

0

您可以尝试这里提出的解决方案,基于全局 JAXBContext 的定义,但我不确定它是否能与 jax-rs 一起使用。

一个没有 spring 的更简单的解决方案是定义你自己的@Provider、扩展的org.apache.cxf.jaxrs.provider.JAXBElementProvider,并在 cxf 中注册它,openejb-jar.xml例如,如果你正在使用tomee ,则使用该文件。

您的提供者将如下所示:

@Provider
public class MyJAXBElementProvider<T> extends JAXBElementProvider<T> {
  public MyJAXBElementProvider() {
    super();
    setSingleJaxbContext(true);
    setExtraClass(...);
  }
}

它需要WEB-INF/openejb-jar.xml在您的 webapp 的文件中注册,例如:

<?xml version="1.0"?>
<openejb-jar>
  <pojo-deployment class-name="jaxrs-application">
    <properties>
    cxf.jaxrs.providers = mypackage.MyJAXBElementProvider
    </properties>
  </pojo-deployment>
</openejb-jar>
于 2017-08-30T13:26:33.707 回答