SOAP Web服务无论如何都不是最先进的技术-尽管它仍然存在,但是基于REST的Web服务却提供了激烈的竞争。 无论如何–这绝对不是REST vs SOAP帖子!
我观察到了一些实例,至少可以说,使用基于Java的SOAP Web服务的方式不太理想。 我认为,这是由于对一般的JAX-WS (基于SOAP的Web服务的Java EE规范)的一些基本知识缺乏了解而引起的。

这篇文章中提到的是与使用JAX-WS构建的基于SOAP的Web服务相关的基本知识。 讨论的一些要点是:

  • @WebService批注的POJO的生命周期是多少?
  • 线程安全吗? 如果在您的Web服务上触发并发客户端请求会怎样?

@WebService批注

从技术上讲,@ WebService批注是将POJO转换为SOAP端点所需的全部。 不足为奇的是,这就是我们通常要做的全部工作–用@WebService和其他辅助注释(例如@ WebMethod,@ WebParam等)注释类,部署WAR,启动SoapUI ,运行一些测试并荣耀一下!

您应该了解有关用@WebService注释的POJO的事情

  • Web容器提供在WAR中部署的带有@WebService批注的POJO(这很重要)
  • 生命周期 – POJO的单个实例服务于客户端的请求。 非常类似于Servlet。
  • 并发方面 (线程安全)–它们不是线程安全的多个线程可以同时访问 Bean的同一实例。 尽管如果您的服务是无状态的,即不使用实例变量来存储状态,这不是问题,尽管您可能仍然会遇到可伸缩性问题(毕竟,它只是一个实例!)。 如果您的POJO使用实例变量存储状态,那么您将陷入困境,并且肯定会遇到由于并发线程访问Web服务类的单个实例而导致行为不一致的问题。
// is this robust enough ?@WebService
public class POJO_WS{@WebMethodpublic String getDate(){System.out.println("hashCode -- "+ this.hashCode());return new Date().toString();}
}

  • 人们应该使Web服务成为无状态的 –忘却风格。 不要最终将状态存储在实例变量中
  • 如果您确实选择使用实例变量,请确保您是开发人员,以线程安全的方式对Web服务进行编码。 这里有多个选项,其中一些选项包括使用良好的旧同步 (虽然还不理想!), 线程安全集合 (ConcurrentHashMap)等。
  • 最佳解决方案IMO –如果使用的是与Java EE兼容的应用服务器(例如Weblogic),则应始终将Web服务部署为EJB (在这里我不会深入探讨EJB的详细信息!您可以参考我以前的文章)如果有兴趣)。
  • 你会从中得到什么? (1)EJB 默认线程安全的 。 您无需担心将并发和线程安全作为业务逻辑的一部分–您可以免费获得它! (2) EJB是池化组件 –容器将实例缓存在内存中,并根据请求将其分配给客户端。 免费的可伸缩性注意 – EJB池配置是特定于容器的,并且每个服务器都定义了实现此目标的特定方式)(3) EJB默认是跨国的 –如果您将后端数据库作为Web服务逻辑的一部分进行访问,EJB是理想的(事务的细节最好由真正了解它们的人来处理!我不会试图表现得好像我知道它们是端到端一样让自己感到尴尬)
  • 如何“启动”我的Web服务? (1) 仅使用@Stateless批注 –这将使您纯粹的POJO变成一个成熟的EJB ,它现在可以享受所有容器服务(2) 将您的Web服务部署为不是作为WAR,而是作为打包在EAR中的EJB-JAR 。 这将确保EJB容器抓住您的POJO,并编织出我一直吹牛的所有魔力!
//not perfect - but better than just @WebService
//will recieve free services from the EJB container, courtsey @Stateless !@Stateless
@WebService
public class POJO_EJB_and_SOAP {public String fetchDate(){System.out.println("hashCode -- "+ this.hashCode());return new Date().toString();}
}

测试中

我不是测试专家,但是JMeter这样的工具可以让我看起来更聪明! 为自己和用户JMeter提供一个方便,以简化SOAP Web服务测试过程。 没那么难。 下面的琐碎示例

客户角度

  • 至于从现有的WSDL生成存根,我肯定会选择Java SE本身内标准功能 。 我只是在说明这一点,因为过去它对我来说是完美无缺的,而不是尝试使用其他实现(例如Axis 2或Apache CXF)
  • 我并不是要破坏它们,但是当JDK本身有一个有据可查的标准工具时,我看不到浪费时间研究其他东西的价值! 只需跳到JAVA_HOME / bin ,寻找wsimport命令并进行破解即可。
  • 提供存根生成功能的大多数IDE都利用此工具

这只是种快速的咆哮。 希望有道理

干杯!

翻译自: https://www.javacodegeeks.com/2015/02/do-you-really-understand-webservice.html

您真的了解@WebService吗?相关推荐

  1. Dubbo的使用及原理浅析.

    前面几个博文中关于SSM 框架已经搭建完成, 这里来讲下项目中使用到的Dubbo以及自己了解到的关于Dubbo的一些知识. Dubbo是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天 ...

  2. Dubbo的使用及原理浅析

    前面几个博文中关于SSM 框架已经搭建完成, 这里来讲下项目中使用到的Dubbo以及自己了解到的关于Dubbo的一些知识. Dubbo是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天 ...

  3. 我们真的需要那么多功能吗? - 国外主流开源 CMS 功能评点

    世界上最好用的工具是锤子,因为上面一个按纽都没有,很多工具没人使用不是因为功能不好,而是功能太多.CMS 是网站内容管理系统,它的作用是帮助网站所有者自主创作站点内容,并对这些内容进行组织.目前,全球 ...

  4. WebService的事务处理 (转)

    因为这个问题讨论起来内容比较多一些,所以另开一个话题.       如果你只是要解决两个系统之间的事务同步问题,可以采用判断服务是否成功的办法来解决,即:         * A系统开始自己的事务,处 ...

  5. PHP教程:WebService最常用的两种方法

    国内用PHP写WebService的真的很少,网上资料也没多少,公司的项目开发过程中,经历了不少这方面的东西,写出来以供大家参考(谢谢老农提供的WSDL和程序文件) 客户端 代码: 01.   02. ...

  6. WebService的两种方式SOAP和REST比较 (转)

    由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript提供API, ...

  7. 菜鸟之webservice(一) 服务端搭建

    首先说一下,为什么取名叫菜鸟之webservice,由于本人技术真的不咋滴,写博客仅仅是为了对所学知识的总结.webservice对于我来说一直都是高大上的感觉,一个java web和javase都没 ...

  8. 【JavaEE】WebService到底是什么?

    一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...

  9. gsoap写一个c++ webservice

    由于对gsoap不熟.网上很多人都说,c++要调用webservice,可以用gsoap这个开源的开发包,于是就下载了gsoap,我下载的是2.8.3版本,是2011年6月25日release的.地址 ...

最新文章

  1. rop检查_注意!这几类人一定要定期检查眼底!
  2. C#语言基础— 输入与输出
  3. Activity的生命周期及各生命周期方法的作用
  4. yum 安装oraclejdk_kubernetes-16:制作oraclejdk镜像
  5. 关于对DataTable进行操作的几个例子总结
  6. android最新版本8.0,安卓8.0系统安装包下载
  7. 叶三《我们唱》-野孩子(白银饭店)
  8. 苹果计算机磁盘格式,苹果电脑上怎么进行格式化磁盘?
  9. STM32驱动SG90舵机
  10. 凤凰男,你若孤老终身,便是晴天
  11. 网络协议系列一 - 基本认识
  12. 【Lilishop商城】No4-1.业务逻辑的代码开发,涉及到:会员B端第三方登录使用及后端接口(微信、QQ等)
  13. C#.NET程序尝试—修复Excel批注错误
  14. 新版标准日本语中级_第十一课
  15. Allegro174版本新功能介绍之和172版本兼容设置
  16. Android中Vitamio使用解析-电视台直播为例
  17. 一个DC FIFO的仿真实验
  18. 帆软BI绕过限制思路
  19. 高效阅读英语信息的方法
  20. matlab 画3维图像

热门文章

  1. ssm(Spring+Spring mvc+mybatis)Dao层配置sql的文件——DeptDaoMapper.xml
  2. A configuration error occurred during startup.Please verify the preference field with the prompt: To
  3. 判断字符串相等能否用==
  4. centos5.9 mysql_CentOS 5.9系统服务器使用yum安装Apache+PHP+MySQL环境
  5. weex安装环境_WEEX跨平台开发环境搭建
  6. 项目背景怎么描述_产品经理写简历,如何让「项目经验」更出众?
  7. redis创建集群报错can‘t connect to node 192.168.163.203
  8. X86汇编语言中的registers相关
  9. mockito接口没法赋值_Mockito:无法实例化@InjectMocks字段:类型是接口
  10. java每个阶段的学习时间_每个Java学习者都会犯的10个最常见的1个错误