EJB3.0学习总结(二)--EJB3.0容器模型的WEB服务

JAX-WS

  JAX-WS规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。
  在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将这些API的调用转换成为对于SOAP消息。
  在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI (service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。
  在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。
  通过web service所提供的互操作环境,我们可以用JAX-WS轻松实现JAVA平台与其他编程环境(.net等)的互操作。
  JAX-WS与JAX-RPC之间的关系
  Sun最开始的web services的实现是JAX-RPC 1.1 (JSR 101)。这个实现是基于Java的RPC,并不完全支持schema规范,同时没有对Binding和Parsing定义标准的实现。
  JAX-WS2.0 (JSR 224)是Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XML Binding (JAXB, JSR 222),在parsing层,使用的是the Streaming API for XML (StAX, JSR 173),同时它还完全支持schema规范。

 

 

目的:使用ejb3 的 @WebService  注解开发一个webservice服务端,然后使用JAX-WS 技术完成客户端代码的生成和调用

 

webservice 服务器端的开发:

 

 

 

 

 

  步骤1: 写一个webservice 需要传输的对象

 

package cn.itcast.bean;

import java.io.Serializable;

public class Order implements Serializable{
	private static final long serialVersionUID = -5898452101455689209L;
	
	private String id;
	private String name;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

 

  

步骤2: 定义webservice服务器端需要暴漏的方法接口

 

package cn.itcast.service;

import java.util.List;

import cn.itcast.bean.Order;

public interface OrderService {
	public String getUserName(String name);
	public Order getOrder(String orderid);
	public List<Order> getOrders();
}

 

 

 

  步骤3: 定义暴漏方法的实现

 

 

package cn.itcast.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.jws.WebService;

import cn.itcast.bean.Order;
import cn.itcast.service.OrderService;


/*使用这个注解,就可以这个会话bean中的方法暴漏成webservice方法  
 * 如果你只想暴漏其中的某些方法,你可以再想对外暴漏的方法上  
 * 加上@WebMethod 注解,那么没有这个注解的方法就不会暴漏  
 * 成webservice方法了   
 * targetNamespace 命名空间 也就是wsdl中的 targetNamespace  
 * name 端点接口的名称 也就是wsdl中的portType name  
 * serviceName 服务的名称  
 * 不修改上面的3个属性也没关系,就是你发布的wsdl的可读性差  
 * */ 
@WebService(targetNamespace="http://ws.itcast.cn",name="OrderService",
		serviceName="OrderServiceBean")
@Stateless
@Remote(OrderService.class)
public class OrderServiceBean implements OrderService {

	public Order getOrder(String orderid) {
		Order order = new Order();
		order.setId(orderid);
		order.setName("小鸭子");
		return order;
	}

	public List<Order> getOrders() {
		List<Order> orders = new ArrayList<Order>();
		
		Order order1 = new Order();
		order1.setId("001");
		order1.setName("小一");
		
		Order order2 = new Order();
		order2.setId("002");
		order2.setName("小二");
		
		orders.add(order1);
		orders.add(order2);
		return orders;
	}

	public String getUserName(String name) {
		return name;
	}

}

 

 

 

 步骤4: ant 打包(build.xml,项目根目录下) 

 

<?xml version="1.0" encoding="UTF-8"?>
<!--.表示同一目录 ..表示在上一目录-->

<project name="WebService" basedir=".">  
   <property name="src.dir" value="${basedir}\src"/>
   <property environment="env"/>
   <property name="jboss.home" value="${env.JBOSS_HOME}"/>
   <property name="jboss.server.config" value="default"/>
   <property name="build.dir" value="${basedir}\build"/>
    
    <path id="build.classpath">
        <fileset dir="${jboss.home}\client">
            <include name="*.jar"/>
         </fileset>
    	<pathelement location="${build.dir}"/>
    </path>


    <target name="prepare" >
       <delete dir="${build.dir}"/>
       <mkdir dir="${build.dir}"/>
    </target>


    <target name="compile" depends="prepare" description="编译">
    <javac srcdir="${src.dir}" destdir="${build.dir}">
       <classpath refid="build.classpath"/>
    </javac>
    </target>
  

    <target name="ejbjar" depends="compile" description="创建ejb发布包">
       <jar jarfile="${basedir}\${ant.project.name}.jar">
           <fileset dir="${build.dir}">
            <include name="**/*.class"/>
            </fileset>

        <!--把persistence.xml打包到META-INF目录下-->

       	<!--<metainf dir="${src.dir}\META-INF"></metainf>-->
       </jar>
    </target>

    <target name="deploy" depends="ejbjar" description="ejb发布">
       <copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"/>
    </target>
                                                                                                                                                                               
    <target name="undeploy" description="卸载ejb">
       <delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"/>
    </target>
</project>

 

 

 

 

步骤5:验证输入 http://localhost:8080/jbossws/   找到 View a list of deployed services  点击可以看到你发的webservice的wsdl文件

 

webservice 客户端的开发:

 

 

步骤1: 建立一个空的项目,从 https://jax-ws.dev.java.net/2.1.7/ 下载 jax-ws,使用  java -jar JAXWS2.1.7-20090419.jar,解压缩后会有lib ,讲lib下的 jar包加到classpath下 

 

步骤2:使用ant 从服务器的wsdl 生成本地调用框架

 

 

<?xml version="1.0" encoding="UTF-8"?>
<project name = "WSClient"  default="wsclient" basedir =".">  
<property name = "src.dir" value = "${basedir}/src"/>  
<path id="build.classpath" description="设置类路径">  
  <fileset dir="${basedir}/lib">  
   <include name="*.jar"></include>  
  </fileset>  
 </path>  
  
<target name = "wsclient" description ="生成webservice客户端代码">  
    <taskdef name = "wsimport" classname ="com.sun.tools.ws.ant.WsImport" classpathref="build.classpath"/>  
    <wsimport wsdl="http://127.0.0.1:8080/WebService/OrderServiceBean?wsdl"  
    sourcedestdir="${src.dir}" package="cn.com.xinli.ws.client" keep="true"  
    verbose ="true" destdir="${basedir}/bin"/>  
    </target>    
</project> 

 

 

 

 

步骤3:使用junit4 写单元测试

 

 

package junit.test;


import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;

import cn.com.xinli.ws.client.Order;
import cn.com.xinli.ws.client.OrderService;
import cn.com.xinli.ws.client.OrderServiceBean;

public class WSTest {
	private static OrderService orderService;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		OrderServiceBean orderServiceBean = new OrderServiceBean();
		orderService =orderServiceBean.getOrderServicePort();
	}

	@Test
	public void getUserName(){
		System.out.println(orderService.getUserName("小明"));
	}
	
	@Test
	public void getOrder(){
		Order order = orderService.getOrder("999");
		System.out.println(order.getId());
		System.out.println(order.getName());
	}
	
	@Test
	public void getOrders(){
		List<Order> orders = orderService.getOrders();
		for(Order order : orders)
			System.out.println(order.getId()+","+order.getName());
	}
}

  

 

 

验证: 保证服务器的wsdl 能正确访问,调用单元测试就好了。

 

 

 

6、EJB 2.x 与 EJB 3.0:从复杂到简化的企业级开发变革 本文详细对比了EJB 2.x与EJB 3.0之间的演进与变革,分析了EJB 2.x在开发、部署及测试中的复杂性问题,并重点介绍了EJB 3.0的简化开发模型及其优势。通过采用POJO风格和注解配置,EJB 3.0显著提升了代码简洁性和开发效率,同时保留并增强了核心功能如事务管理、分布式支持和并发处理。文章还探讨了EJB 3.0在不同应用场景中的实践以及未来发展趋势。 阅读详情

相关推荐

2、深入了解 EJB 3.2 架构与 CDI 服务

本文深入解析了 EJB 3.2 的架构核心与 CDI 服务,涵盖了 EJB 的发展历程、组件模型、容器功能及其核心特性。通过实际代码示例和详细对比,展示了 EJB 在企业级多层应用开发中的强大功能和灵活性,同时强调了与 JPA 和 CDI 的集成,为构建可扩展的企业应用提供了全面指导。

ff678的博客 75

WebService 之 EJB容器模型

路虽远行则将至,事虽难做则必成 228

EJB 3 Web服务开发实战指南

Enterprise JavaBeans(EJB)是一种基于Java的服务器端组件架构,主要用于简化企业级应用的开发。作为Java EE(Java Platform, Enterprise Edition)技术的一部分,EJB提供了声明式事务管理、安全性和持久化等企业级服务。它允许开发者专注于业务逻辑的实现,而将底层的系统服务管理交给EJB容器。@Stateless定义Web服务接口是创建Web服务的另一重要步骤。接口定义了Web服务将要暴露的方法,而这些方法的实现则由Bean类提供。

weixin_42348783的博客 1103

初学J2EE

        工作2年了,一直用的是C/S进行开发,近来公司要转向B/S开发,不得不学习J2EE架构了,听前辈的讲述,学J2EE是很难学的,一般3个月能入门就已经不错了,根据我现在学习的进程前辈的话是很正确的,J2EE学的东西非常的多,什么Struts,Spring,EJB,Hibernate等等,我看一样东西多要一月半月的,公司也不出钱让我们去哪里培训一下,但也没办法,谁叫我们是劳动者啊,没得

Rolling的专栏 2392

EJB3开发部署全过程

手动部署EJB 亲自体验EJB开发流程,包含完整代码。

SNAP实战:Sentinel-1 GRD数据从预处理到后向散射系数生成全流程解析

本文详细解析了Sentinel-1 GRD数据从预处理到后向散射系数生成的全流程,包括辐射定标、噪声处理、地形校正等关键步骤。通过SNAP软件实战操作,帮助用户掌握SAR影像处理技巧,提升数据质量与分析效率,适用于地表变化监测、灾害评估等应用场景。

weixin_29239661的博客 536

ejb的基本概念

Enterprice JavaBeans是一个用于分布式业务应用的标准服务端组件模型。采用Enterprice JavaBeans架构编写的应用是可伸缩的、事务性的、多用户安全的。采用ejb编写的这些应用,可以部署在任何支持Enterprice JavaBeans规范的服务器平台

yjsuge的专栏 994

FPGA实战:手把手教你用Verilog驱动4.3寸RGB触摸屏(附完整代码)

本文详细介绍了如何使用Verilog语言在FPGA上驱动4.3寸RGB触摸屏,包括时序设计、信号交互原理及完整代码实现。通过双计数器引擎设计和参数化模块,开发者可以高效构建800*480分辨率的显示驱动,并解决工程实践中的信号完整性和时序收敛问题。

rice5的博客 703

带你走进EJB--EJB容器

当你建立一个简单的java类的时候,你需要java虚拟机去执行它,同样的道理,当你执行SessionBeans或者MDBs的时候,你也需要类似Java虚拟机的东西去执行它,这个东西就是EJB的容器.而执行Entities Beans 的时候你需要的这个东西是持久化提供者.            在这片文章中我们将会对EJB 的容器和持久化对象进行深一步学习和了解.接着上一篇文章里的图,

潛龍,勿用 2474

MySQL常见面试题汇总(建议收藏!!!)

目录一、索引相关(1)什么是索引?(2)索引是个什么样的数据结构呢?(3)为什么使用索引?(4)Innodb为什么要用自增id作为主键?(5)Hash 索引和 B+ 树索引有什么区别或者说优劣呢?(6)什么是聚簇索引(6)非聚簇索引一定会回表查询吗?(6)聚簇索引和非聚簇索引的区别(6)MyISAM和InnoDB实现B+树索引方式的区别是什么?(6)MySQL中有四种索引类型,可以简单说说吗?(6)覆盖索引是什么?(6)联合索引是什么?为什么需要注意联合索引中的顺序?(6)创建的索引有没有被使用到?或者说怎

蔡政洁的博客 7万+

HUAWEI华为荣耀MagicBook MateBook B D E X 13 14 16 笔记本MateStation台式机原装Win10出厂Windows11系统

HUAWEI华为MateBookX原装出厂系统恢复原厂系统,型号:MACHC-WAE9LP、EUL-W29P、MACHR-W19L、MACHR-W29、MACHD-WFE9、MRGF-16、MACHR-W19BL、MACHD-WFE9Q、WT-W19、Mach-W19、Mach-W29、WT-W09、WT-W19、MACH-W29等。HUAWEI华为MateBookE原装出厂系统恢复原厂系统,型号:PAK-AL09、GK-W7X、GK-G58、GK-W76、DRC-W76等。

QQ17855069的博客 17万+

传智播客ejb学习, EJB和Spring的比较及EJB3.0的运行环境

       今天开始学习ejb,黎活明老师讲的,黎老师是国内ejb方面的权威,《EJB3.0入门经典》就是黎老师写的,EJB领域销量很好的一本书。黎老师讲了ejb的优点,或者说它的侧重点,它和Spring提供的服务很多都是相同的,它主要就是提供分布式服务,Spring是做不到的。分离出了业务层,软件功能改变,只需修改业务层,为后期软件维护提供了方便。业务功能共享。软件实现了最大程度的组件方面的重

TuiRoger的专栏 1767

HC-05蓝牙模块详细配置、连接与使用过程

用手按着模块上的按键,再给蓝牙模块上电。当蓝牙模块上的灯慢闪的时候就说明进入了配置模式了。在配置蓝牙的时候一定要将串口助手按这个要求配置:设置波特率 38400,数据位 8 位,停止位 1 位,无校验位,这是固定操作! 根据蓝牙的主从模式进行不同的设置,二者主要区别就在于AT+ROLE这个指令如果这里没返回OK可能有一下几种情况:如果正常返回OK,那就可以进行下一步了 配置蓝牙密码的时候,特别是配置HC05,密码必须加双引号"",否则不能正常设置!!!! 给从机模式蓝牙配置好之后,将蓝牙重

qq_51688022的博客 2万+

JBoss3.0 下配置和部署EJB简介

1.JBoss简介 JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规范中最新的技术,并且它还在the JavaWorld Editors Choice 2002评选中获得“最佳Java

!Java 3746

把 ABAP 选择屏幕 Selection Screen 打造成可维护的交互面板:常用屏幕元素与动态控制全解析

本文详细介绍了ABAP报表中Selection Screen的设计技巧,包括空行(SKIP)、横线(ULINE)、注释(COMMENT)等基础元素的使用方法,以及如何通过MODIF ID实现动态界面调整。重点讲解了行内布局(BEGIN OF LINE)、按钮(PUSHBUTTON)和区块(BLOCK)等高级功能,帮助开发者将选择屏幕从"能用"提升到"好用、易扩展、可维护"的水平。文章还分享了项目实践中的命名规范和分组策略,特别适合需要优化ABAP报表用户体验的开发人员

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 332

【PowerBI专栏】PowerBI导入MYSQL数据库

本文介绍了在PowerBI中连接MySQL数据库的方法。首先需要下载并安装MySQL官方.NET连接驱动(推荐8.4.0版本),安装完成后重启PowerBI。连接时需填写服务器IP和数据库名称等必填参数。文章详细说明了连接配置步骤,包括账户设置、数据表选择以及可能遇到的数据格式转换问题处理。最后指导用户完成数据清洗后进入PowerPivot进行后续计算。特别提醒最新9.4版本可能存在兼容性问题,建议使用稳定的8.4版本连接器。

技术与管理的平衡木- 694

java ejb3.0_传智播客ejb学习, EJB和Spring的比较及EJB3.0的运行环境

今天开始学习ejb,黎活明老师讲的,黎老师是国内ejb方面的权威,《EJB3.0入门经典》就是黎老师写的,EJB领域销量很好的一本书。黎老师讲了ejb的优点,或者说它的侧重点,它和Spring提供的服务很多都是相同的,它主要就是提供分布式服务,Spring是做不到的。分离出了业务层,软件功能改变,只需修改业务层,为后期软件维护提供了方便。业务功能共享。软件实现了最大程度的组件方面的重用。它前景还是...

weixin_29722785的博客 223

使用 PLS 回归进行近红外光谱的异常值检测

在光谱数据中,并非每个数据点都是有效的,因此,在构建模型时找到与大部分数据不符合的数据点是一种必要的操作。这些数据我们称之为。在这篇文章中,我们将使用PLS回归进行红外光谱数据的异常值检测。

qq_44204759的博客 1424

ejb学习, EJB和Spring的比较及EJB3.0的运行环境

今天开始学习ejb,黎活明老师讲的,黎老师是国内ejb方面的权威,《EJB3.0入门经典》就是黎老师写的,EJB领域销量很好的一本书。黎老师讲了ejb的优点,或者说它的侧重点,它和Spring提供的服务很多都是相同的,它主要就是提供分布式服务,Spring是做不到的。分离出了业务层,软件功能改变,只需修改业务层,为后期软件维护提供了方便。业务功能共享。软件实现了最大程度的组件方面的重用。它前景还是...

开发笔记 144

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

5.JBoss3.0中EJB使用JavaMail服务的配置

1.JBoss简介JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规范中最新的技术,并且它还在the JavaWorld Editors Choice 2002评选中获得“最佳Java应

allenzhong0932的专栏 921

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

学习EJB3.0

1.为了存取那些服务对象,你需要通过服务器的JNDI 来查找存根对象(session bean)或消息队列(MDB)。JNDI查找是把客户端与实际的服务端实现解藕的关键步骤。但是,直接使用一个字符串来进行JNDI查找并不优雅。有这样几个原因:·客户端与服务端必须有一致的基于字符串的名字。它没有在编译时得到认证或在部署时得到检查。·从JNDI返回的服务对象的类型没有在编译时进行检查,有可能在运行时出

Young_suse的专栏 743

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Web容器是什么?

在学习之前,我们想想什么是 Web 容器,以及怎么学习 Web 容器。在学习一门技术之前,想想这两个问题,可以达到事半功倍的效果。 让我们回顾一下web技术的发展历史,可以帮助你理解web容器的由来。 早期的web应用主要应用于浏览静态网页,HTTP服务器(比如Apache、Nginx)向浏览器返回静态HTML,浏览器负责解析HTML,将结果呈现给用户。 随着互联网发展,我们已不满足于仅仅浏览静态网页,还希望通过一些交互操作来获取动态结果,因此也就需要一些扩展机制能够让Http服务器调用服务端程序。

cherry_vicent的专栏 1959

基于OpenEJB + Tomcat + MyEclipse + MySQL进行EJB 3.0开发

基于OpenEJB + Tomcat+ MyEclipse + MySQL进行EJB 3.0开发   本文介绍在MyEclipse下进行EJB 3.0开发的方法,J2EE服务器使用Tomcat+EmbededOpenEJB,数据库使用MySQL。 一、环境配置 本文所用的软件版本都经过验证,但所采用的方法不只适用于这些版本,如有兴趣,其它版本请另行验证。需要注意,所有软件的安装路径最好不要

乙酰水杨酸的专栏 2447

EJB3.0:是脱胎换骨,还是重蹈覆辙?

开发者在线 Builder.com.cn 更新时间:2008-05-06 今年EJB3.0规范已经正式发布了。Sun非常自信地向业界宣布,这个EJB版本将有效地减轻开发难度,通过使用EJB3.0,可以大大降低开发成本。但也有人批评说,Sun在EJB中加入了很多Java EE 5的新特性,如EJB3.0将使用注释(annotations)来进行配置。这将增加开发人员的学习成本,虽然从表面上是简单了,...

xihongshi926414的专栏 181

01 | Web容器学习路径

你好,我是李号双。在开篇词里我提到要成长为一名高级程序员或者架构师,我们需要提高自己知识的广度和深度。你可以先突破深度,再以点带面拓展广度,因此我建议通过深入学习一些优秀的开源系统来达到突破深度的目的。我会跟你一起在这个专栏里深入学习Web容器Tomcat和Jetty,而作为专栏更新的第1篇文章,我想和你谈谈什么是Web容器,以及怎么学习Web容器。根据我的经验,在学习一门技术之前,想一想这两个问...

优快云学习 413

EJB3.0技术体系---学习笔记

EJB3.0技术体系: 1.Enterprise Bean(企业Bean)理论及实例   Seession Bean   MDB 2.Persistence (JPA--数据持久化框架)   Entity Bean   EntityManager   EJB-OL(EJB查询语言)   OR映射 3.EJB事物处理(Transactions)及其与Spring容器事物的比较 4

添柴程序猿的专栏 1315
上一篇: EJB3.0学习总结(一)--实体Bean(EntityBean)
下一篇: EJB3.0学习总结(三)--Java消息服务(JMS)
LC2586
博客等级 码龄17年 5粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值