场景描述在开发中,一直使用的RollingFileAppender,但是存在几个问题: 这个appender是按照序号作为后缀来命名日志文件的,生产中日志较为频繁的情况下,根据发生时间定位问题日志需要全局grep,耗费时间并且对业务运行有一定的影响。 rolling的时候会统一将所有已经存在的日志文件序号向后偏移,即原来是test.log、test.log.1,现在变成了test.log(新建的 ...
more>>

前言在进行WCG项目优化的时候,性能测试的效果一直不理想。于是乎进行性能分析,除了查找内存、CPU等基本的参数之外,还从业务角度入手,查找了日志打印出来的时间,按照报文的时间进行分析对比。其中一项就是用jstack分析线程的情况。这里记录一下整个分析的过程以及收获。 整体过程 首先用jps查看java应用的进程号 然后根据进程号查找java中各个线程的情况,命令如下: 1top -Hp [pid] ...
more>>

本文起源于一次测试环境下构造报文发送时对于java编码的疑惑,经过查找资料和分析总结而成。对于JVM和Java代码中的编码问题和原理进行了较为深入的分析。如有错漏,欢迎指正。

more>>

概述

第一篇实践中,我们讲述了如何用standalone的方式部署一个webservice服务。但是很多情况下,我们需要将webservice部署在web服务器上,因此本文实践如何在tomcat服务器上部署webservice。

本文中,我们将讲述web容器的两种配置部署方式,一种是基于Java Servlet的方式,一种是基于Spring框架的方式。我们知道CXF本身设计就是与Spring无缝集成的,因此基于Spring框架的方式更方便通用;但是,有时候我们也希望通过简单的servlet就能够快速搞定一个webservice的发布。

more>>

概述

总体而言,构建Webservice的方式有很多种,概括起来可以分为以下几种:

  1. 通过Stub的方式,用工具生成客户端的代理,具体的工具可以细分为很多:
    a. jdk1.6+/bin中自带工具: wsimport
    b. cxf/bin中的工具: wsdl2java
    c. axis/bin中工具
  2. 通过CXF动态调用:
    a. DynamicClientFactory
    b. JaxWsDynamicClientFactory
  3. 通过Axis动态调用:
    a. Service.createCall()
  4. 通过HTTPURLConnection的方式调用(手动组装SOAP报文)
  5. 通过SOAPConnection的方式调用
more>>

JAX-WS

JAX-WS(Java API for XML Web Services),是SOAP协议的一个Java的实现规范,这个新规范是为了简化基于SOAP的Java开发。JAX-WS规范其实就是一组XMLweb services的JAVA API,JAX-WS允许开发者可以选择RPCoriented或者message-oriented来实现自己的web services。通过使用Java™ API for XMLWeb Services (JAX-WS) 技术设计和开发 Web服务,可以带来很多好处,能简化 Web 服务的开发和部署,并能加速 Web 服务的开发。

JAX-WS将本地的远程调用转换为XML协议(一般为SOAP格式),从而开发者不需要编写任何SOAP组装消息代码;同样,在服务端的JAX-WS会将SOAP消息解析为具体的函数调用,并返回结果。

jax-runtime

more>>

场景

在性能测试的时候,使用apache httpclient连续发送报文到server进行压测。压测的配置如下:

1
2
3
总数:10000
并发:400
每个发送线程的QPS限制:20

出现的问题是: 大概1000左右的报文会出现 NoHttpResponseException [server ip] failed to respond。调低并发度到300一下时,不会出现这样的异常。

more>>