我已经读过,跨多个线程共享一个JAXBContext对象可以大大降低使用JAXB的应用程序的CPU使用率。证明是here。我们目前正在使用Apache CXF来开发Web服务。 Apache CXF默认使用JAXB。
鉴于以上信息,如何在不使用基于Spring的配置文件的情况下将Apache CXF配置为使用单个JAXBContext,因为我正在查看使用没有Spring的servlet传输的代码库?是否可以为JAXBContext添加任何其他配置参数以进一步提高性能?
答案 0 :(得分:0)
您可以根据全局JAXBContext的定义尝试建议的here解决方案,但我不确定它是否能与jax-rs一起使用。
没有spring的更简单的解决方案是定义您自己的@Provider
,扩展org.apache.cxf.jaxrs.provider.JAXBElementProvider
,并使用openejb-jar.xml
文件在cxf中注册它,如果您正在使用{ {3}}
您的提供商看起来像:
@Provider
public class MyJAXBElementProvider<T> extends JAXBElementProvider<T> {
public MyJAXBElementProvider() {
super();
setSingleJaxbContext(true);
setExtraClass(...);
}
}
并且需要在您的网络应用中的WEB-INF/openejb-jar.xml
文件中注册,如:
<?xml version="1.0"?>
<openejb-jar>
<pojo-deployment class-name="jaxrs-application">
<properties>
cxf.jaxrs.providers = mypackage.MyJAXBElementProvider
</properties>
</pojo-deployment>
</openejb-jar>