Uploaded image for project: 'WildFly'
  1. WildFly
  2. WFLY-3369

Performance issue of jaxws-client on JDK 1.7.0_55

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • 9.0.0.Final
    • JBoss AS7 7.1.1.Final
    • Web Services
    • None
    • Hide

      a. As I described, to prepare one remote JAX-WS and generate the JAX-WS client classes

      b. To write simple test code for JAX-WS invocation, authorization is needed for this case, for example:

      QName qname = new QName("http://ws.jboss.org/hello", "Hello");
      URL url = new URL("http://hostname/services/wsdl/hello.wsdl");

      HelloService service = new HelloService(url, qname);
      HelloServiceApi serviceApi = service.getHelloServiceImplPort();
      if (serviceApi instanceof BindingProvider) {
      BindingProvider bp = (BindingProvider) serviceApi;
      bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "username");
      bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password");
      }
      // call the service and record the execution time

      c. Running test on Solaris.

      To add all JAR files to the classpath which belongs jboss-ws-jaxws-client, jbossws-cxf-client and related modules, 'cxf-rt-frontend-jaxws-2.4.8-patch-01.jar' is mandatory. To run test code using JDK 1.7.0_55, the average response time about 17ms.

      To run again by using JDK 1.7.0_25, the average response time about 7ms. The response time increases 10ms on my Soalris test environment.

      The similar issue also can be found on Linux, the average response time increase about 1ms.

      Show
      a. As I described, to prepare one remote JAX-WS and generate the JAX-WS client classes b. To write simple test code for JAX-WS invocation, authorization is needed for this case, for example: QName qname = new QName("http://ws.jboss.org/hello", "Hello"); URL url = new URL("http://hostname/services/wsdl/hello.wsdl"); HelloService service = new HelloService(url, qname); HelloServiceApi serviceApi = service.getHelloServiceImplPort(); if (serviceApi instanceof BindingProvider) { BindingProvider bp = (BindingProvider) serviceApi; bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "username"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password"); } // call the service and record the execution time c. Running test on Solaris. To add all JAR files to the classpath which belongs jboss-ws-jaxws-client, jbossws-cxf-client and related modules, 'cxf-rt-frontend-jaxws-2.4.8-patch-01.jar' is mandatory. To run test code using JDK 1.7.0_55, the average response time about 17ms. To run again by using JDK 1.7.0_25, the average response time about 7ms. The response time increases 10ms on my Soalris test environment. The similar issue also can be found on Linux, the average response time increase about 1ms.

      Assume that a JAX-WS deploys on somewhere else, developer generates the JAX-WS client side classes by using wsdl2java tools. These classes have been exported as 'exmaple-ws-client.jar'. When developer needs to access this JAX-WS in their web application, this JAR file would be published with WAR file together. By default, the JBoss AS would supply an instance of CXF's implementation for the JAX-WS client when web application be deployed to JBoss AS. The class name of this JAX-WS client would be 'org.apache.cxf.jaxws.JaxWsClientProxy'. The JAX-WS invocations of client side got a very bad performance since I upgraded JDK from 1.7.0_25 to 1.7.0_55, especially on Solaris.

              rhn-engineering-ema Jim Ma
              cavenaghi_jira Zhang Boya (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: