Web服务也是一种分布式技术,它与EJB最大的不同是,Web服务属于行业规范,可以跨平台及语言。
而EJB属于java平台规范,尽管理论上可以跨平台,但实现起来比较复杂,所以其应用范围局限在了
java平台。
看上去两者好像是互相竞争的关系,其实不是。他们两者的偏重点不一样,Web服务偏重
的是这个系统对外提供什么功能,而EJB偏重的是如何使用一个个组件组装这些功能。
就好比一个硬盘,他对外提供的是存储服务,这时Web服务的关注点,对于怎样组装这个硬盘,怎样
构造这些小零件,web服务并不关心,但这些却是EJB所关心的。
JavaEE为web service提供了两种不同的编程模型:EJB容器模型及Web容器模型
下面以JAX-WS2.x规范(Java API for XML-based Web Service)介绍 webservice开发
新建一个java Project项目,取名为WebService 将jboss\client下所有jar包引入
这里使用EJB容器模型,所以建立一个无状态会话bean,将这个无状态会话bean发布为webservice
首先定义接口OrderService (com.jboss.service包)
接口中:第一个方法,获得用户名称 public String getUserName(String name);
第二个方法取得Order:public Order getOrder(String orderid);
Order是一个javaBean(实体bean)
第三个方法获取全部Order:public List<Order> getOrders();
新建Order javaBean(com.jboss.bean包),实现序列化接口
private String orderid;
private String name;
编写接口实现类OrderServiceBean (com.jboss.service.impl包)
指定无状态bean和远程接口
编写方法业务代码
通常Order是实体bean,从查询数据库获取信息,此处只是模拟
把这里的所有方法暴露为WebService方法:在类前添加@WebService注解
如果指向暴露其中某个方法,而不是全暴露
则在该方法前,加上@WebMethod注解标注要暴露的方法
如果这里标志了一个@WebMethod,下面两个方法将不暴露
下面不标注@WebMethod是不会暴露的
从HelloWorld项目中拷贝ANT,修改项目名后,发布到jboss中
观察控制台输出,看到WebService已成功发布
进入jboss管理后台查看:http://localhost:8080/jbossws
点击View a list of deployed services 查看发布服务的列表
就会看到刚才所发布的服务,可以通过点击这个服务,查看该描述语言
<definitions targetNamespace>进入后会看到默认的命名空间为:包名
<portType>端点接口名称采用了 接口名+Bean
<service name>服务名称采用实现类简单类名+Service
可以通过@WebService注解的属性进行修改
targetNamespace 命名空间
name属性设置端点接口名称
serviceName 服务名
将命名空间改为http://ws.jboss.com
端点接口名称改为 接口名称
服务名称改为 实现类名称
修改后,重新发布,再观察是否修改掉
当Web服务开发完,开发Web服务的客户端
开发步骤如下:
1.在应用的类路径下放入JAX-WS的jar文件(下载路径:https://jax-ws.dev.java.net)。
如果用的是JDK6,这一步可以省略,因为JDK6已经绑定了JAX-WS。目前JDK6绑定的JAX-WS版本是2.0
当某些应用使用的JAX-WS版本高于2.0时,就有可能发生版本问题,此时需要升级JDK6中的JAX-WS版本
下载最高版本的JAX-WS,在产品额度lib目录中找到jaxws-api.jar和jaxb-api.jar,把这两个文件
copy到JDK6_HOME/jre/lib/endorsed目录下
通常endorsed目录是不存在的,需要手动创建
如果用的开发工具是MyEclipse,这时应该把MyEclipse所使用的jdk更改为系统安装的jdk
2.利用WebService客户端生成工具来生成辅助类
3.借助辅助类使用webService
---------------------------------------------------------------
这里使用wsimport工具的Ant任务类生成辅助类
新建build.xml,把下面代码粘贴进
--------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!-- 缺省任务,执行wsclientgen -->
<project name="WSClient" default="wsclientgen" basedir=".">
<property name="src.dir" value="${basedir}/src" />
<path id="build.classpath" description="设置类路径">
<!-- 把项目下lib中的jar都设置到类路径下-->
<fileset dir="${basedir}/lib">
<include name="*.jar"/>
</fileset>
</path>
<target name="wsclientgen" description="生成webservice客户端辅助代码,执行后请刷新项目">
<!-- 为com.sun.tools.ws.ant.WsImport类,定义使用标签 -->
<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport" classpathref="build.classpath"/>
<!--wsdl指向web服务描述语言所在的位置-->
<!--sourcedestdir生成的源文件所存放在的目录-->
<!--package生成的java源文件所用到的java包-->
<!--keep是否替换旧文件-->
<!--verbose是否显示执行细节-->
<!--destdir源文件编译后存放在的目录-->
<wsimport wsdl="http://127.0.0.1:8080/WebService/OrderServiceBean?wsdl"
sourcedestdir="${src.dir}" package="com.jboss.ws.client" keep="true"
verbose="true" destdir="${basedir}/bin"/>
</target>
</project>
-----------------------------------------------------------------
运行ANT生成客户端调用辅助代码
之后刷新WSClient项目(客户端),在src下看到生成的java文件
新建单元测试,调用这些web服务
如何调用web服务?
http://localhost:8080/jbossws/
首先找到服务名称<service name="..."> 找到与其对应的javaBean(生成的)
1.生成对象
2.获取端点名称
3.通过端点名称,调用webservice方法
在进行WebService开发时,如果是返回List的对象,尽量用泛型,EJB容器会解析对象并把它翻译成
对应的XML类型
分享到:
相关推荐
在本主题"ejb3 第12讲 --开发EJB容器模型的WEB服务"中,我们将探讨如何利用EJB 3.0版本来创建和整合Web服务。EJB 3.0是一个重要的里程碑,因为它显著简化了EJB的使用,引入了更多的POJO(Plain Old Java Object)...
**EJB 3.0 学习总结(二)——EJB 3.0 容器模型的 WEB 服务** EJB(Enterprise JavaBeans)3.0 是 Java 平台企业版(Java EE)中的一项核心技术,它为构建可扩展、安全且易于管理的企业级应用程序提供了强大的支持...
**EJB 3.0 容器模型与 Web 服务** EJB(Enterprise JavaBeans)是Java EE(Enterprise Edition)平台中的核心组件,用于构建可扩展、安全且可靠的分布式企业级应用。EJB 3.0是其一个重要的版本,引入了许多改进,...
EJB容器提供的服务包括: - **安全性**:基于角色的访问控制(Role-Based Access Control,RBAC)。 - **事务管理**:支持不同级别的事务隔离度和恢复机制。 - **并发控制**:管理多个客户端对同一个EJB实例的访问。...
2. JNDI查找:在EJB容器中,EJB组件被注册到JNDI目录下,Web应用程序可以通过查找EJB的全局唯一名称来获取其引用。 3. EJB远程接口:EJB提供了远程接口,允许Web应用程序在不同的Java虚拟机(JVM)上进行跨进程调用...
J2EE架构采用多层分布式应用程序模型,包括Web层、商业逻辑层(EJB容器)和企业信息系统层。Web层通常由Web服务器托管,处理HTTP请求,与JSP(Java Server Pages)和Servlet协同工作,生成动态网页。EJB容器负责执行...
它们可以是容器管理的持久性(CMP),由EJB容器处理数据的存储和检索,或者是bean管理的持久性(BMP),其中bean自己负责数据管理。在本示例中,实体bean可能展示了如何处理数据库操作和事务控制。 **3. 消息驱动...
- **1.1.5 EJB容器提供者(EJB Container Provider)**:提供容器服务,这是EJB组件运行的环境,负责管理EJB组件的生命周期、提供服务如事务管理和持久化,并确保组件间的通信。 - **1.1.6 系统管理员(System ...
5. **EJB容器服务** - 容器负责管理Bean的生命周期,如实例化、初始化、销毁等。 - 提供事务管理,保证多操作的原子性。 - 容器还提供安全性管理,确保只有授权的用户才能访问特定的Bean。 6. **分布式计算与...
2. **EJB容器服务** - **事务管理**:EJB容器自动管理事务,确保数据一致性。 - **安全性**:提供用户认证和授权,保护应用程序资源。 - **并发控制**:对于有状态会话Bean,容器管理多个客户端的并发访问。 - *...
### EJB3开发部署全过程详解 #### 一、EJB3简介及背景 EJB (Enterprise JavaBeans) 是Java平台为企业级...此外,本文还介绍了如何在JBoss 4.0中集成Tomcat 5.0,这对于同时需要Web容器和EJB容器的项目来说非常实用。
- EJB容器负责Bean的创建、初始化、销毁等生命周期管理,开发者无需手动管理对象的生命周期,可以更专注于业务逻辑。 3. **事务管理:** - EJB 3.0提供自动的事务管理,根据不同的方法注解(如`@...
可嵌入式EJB引擎是指可以直接嵌入到应用程序中的EJB容器,这样可以在没有完整应用服务器的情况下运行EJB应用。 #### 16.8 小结 - **16.8.1 小结** 本章总结了EJB应用开发的核心概念和技术细节,为读者提供了...
EJB服务器作为容器和底层平台的桥梁,它管理EJB容器并提供对系统服务的访问,如数据库管理、事务处理等。EJB容器本身负责管理所有EJB实例的生命周期,处理大部分系统级别的问题,使开发者能够专注于应用逻辑,而无需...
EJB容器提供了多种服务,如: - **事务管理**:EJB容器自动管理事务边界,确保数据的一致性。 - **安全性**:通过容器级的安全机制,如角色基访问控制(RBAC),确保只有授权用户能访问特定的EJB。 - **生命周期...