第一次调用JAX-WS Web服务太慢了

时间:2012-11-27 11:54:51

标签: web-services jaxb axis2 websphere-7

概述:

目前我们有一个包含多个模块的Web应用程序。 我们正在使用以下技术堆栈

  1. JAX-WS
  2. Spring框架(Spring MVC除外)
  3. JS​​F
  4. 休眠
  5. Application Server: IBM Websphere 7.0(生产),Apache Tomcat 7.0.X(开发) 我们使用JAX-WS注释将类标记为Web服务,除此之外我们不在Data Objects中使用任何JAXB注释,我们将此任务留给ws runtime。

    问题陈述:

    在Apache Tomcat上部署应用程序后,Web服务不会在AS上发布。 作为解决方案,我们需要在spring上下文文件中添加“org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter”属性,然后Web服务才能完美地运行。但是当我们在WAS上部署应用程序时,Web服务无需设置前面提到的属性即可发布。当我们第一次向网络服务提出请求时,它的反应很慢,在本期研究期间,我们发现了以下内容;

    1. IBM使用AXIS2 Web服务引擎
    2. JAXB实现为层次结构中的所有类加载类className_used_in_web_service_method$JaxbAccessorM_getFieldName_setFieldName_java_util_Set from: <unknown>。这只是第一次发生。 我们试图在应用程序启动时加载这些,但无法成功。 任何人都可以帮助我们解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

在web.xml中尝试AxisServlet加载启动

答案 1 :(得分:0)

您是否尝试使用SimpleHttpServerJaxWsServiceExporter代替SimpleJaxWsServiceExporter

一旦完成端点配置,似乎SimpleHttpServerJaxWsServiceExporter启动了web服务。

答案 2 :(得分:0)

您可以创建自己的ServletContextListener

实施

例如:

package kernel.flowcontrol;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class WsLifecycleListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {

    // some init work ...

    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {}
}

并将其添加到web.xml

<listener>
    <listener-class>kernel.flowcontrol.WsLifecycleListener</listener-class>
</listener>