`
Luob.
  • 浏览: 1592679 次
  • 来自: 上海
社区版块
存档分类
最新评论

EJB容器模型的WebService服务

阅读更多
---WEB服务
WEB服务市一种分布式技术,它与EJB最大的不同是,WEB服务属于行业规范,可以跨平台及语言.而EJB属于java平台规范.理论上可以跨平台,但是实现起来比较复杂.所以其应用范围局限了java平台.看上去是竞争关系,其实不是

WEB服务:偏重这个系统对外提供什么功能.
EJB :偏重如何使用这个组件组装这些功能.

JavaEE 为web service 提供了两种不同的编程模型.
EJB容器模型 
web容器模型 

下面用最新的JAX-WS 2.2.7 (JAVA  API for XML-base WEB Service )来介绍EJB 容器模型的 webservice开发




使用无状态会话 将其 发布为 webService  下面没有配置数据源,使用的是模拟数据
导入 E:\jboss-6.0.0.Final\client 下的jar

实体bean
package com.sh.bean;

import java.io.Serializable;

public class Order implements Serializable{
	
	private static final long serialVersionUID = 7401607038300453322L;
	
	private String orderid;
	private String name;
	
	public String getOrderid() {
		return orderid;
	}
	public void setOrderid(String orderid) {
		this.orderid = orderid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
}


OrderService.java
package com.sh.service;

import java.util.List;

import com.sh.bean.Order;

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

OrderServiceBean.java
package com.sh.service.impl;

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

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

import com.sh.bean.Order;
import com.sh.service.OrderService;

//发布为 webservice 服务
@WebService(targetNamespace="http://ws.sh.cn",//namespace
		name="OrderService", //protype name
		serviceName="OrderServiceBean"  //Service Name
		)
@Stateless
@Remote(OrderService.class)
public class OrderServiceBean implements OrderService {
	
	//@WebMethod  //标注后 会将此方法 暴露给webservice
	
	@Override
	public String getUserName(String name) {
		// TODO Auto-generated method stub
		return name;
	}

	@Override
	public Order getOrder(String orderid) {
		Order order =new Order();
		order.setOrderid(orderid);
		order.setName("小燕子");
		return order;
	}

	@Override
	public List<Order> getOrders() {
		// TODO Auto-generated method stub
		List<Order> person=new ArrayList<Order>();
		Order order1 =new Order();
		order1.setOrderid("001");
		order1.setName("小2");
		
		Order order2 =new Order();
		order2.setOrderid("002");
		order2.setName("小3");
		
		person.add(order1);
		person.add(order2);
		return person;
	}

}


--使用ANT 编译发布
<?xml version="1.0" encoding="UTF-8"?>
<!-- ====================================================================== 
     2013-2-25 下午1:53:33                                                        

     project    
     description
                   
     Bin                                                                
     ====================================================================== -->
<project name="WebService" basedir=".">
    <description> 
            description
    </description>
	<!-- 设置项目原目录 -->
	<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"/>
    
	<!-- 引入 jboss client 下的 所有jar -->
	<path id="build.classpath">
		<fileset dir="${jboss.home}\client">
			<include name="*.jar"/>
		</fileset>
		<!-- 讲编译过后的路径加入到 path中去 方便   接口和实现的引用 -->
		<pathelement location="${build.dir}"/>
	</path>
	
	
    <target name="prepare" description="创建build目录">
		<delete dir="${build.dir}"/>
    	<mkdir dir="${build.dir}"/>
    </target>

    <!-- - - - - - - - - - - - - - - - - - 
          target: compile                      
         - - - - - - - - - - - - - - - - - -->
    <target name="compile" depends="prepare" description="编译">
    	<javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false" includes="com/**">
    		<classpath refid="build.classpath"/>
    	</javac>
    </target>
	
	<!-- ================================= 
          target: ejbjar              
         ================================= -->
    <target name="ejbjar" depends="compile" description="创建EJB发布包">
        <jar jarfile="${basedir}\${ant.project.name}.jar">
        	<fileset dir="${build.dir}">
        		<include name="**/*.class"/>
        	</fileset>
        </jar>
    </target>

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

</project>



-->发布后 进入 jboss 后台控制 查看 发布的服务
http://localhost:8989/jbossws  --> View a list of deployed services
-->点击 Endpoint Address http://localhost:8989/WebService/OrderServiceBean/OrderService

进入后我们可以看到
targetNamespace="http://ws.sh.cn" //命名空间
<wsdl:service name="OrderServiceBean">  //服务名称 def: //OrderServiceBeanService
<wsdl:portType name="OrderService">  //端口名称   def: OrderServiceBean

如果后面 def(默认命名) 看不的不是很习惯呢 就可以通过上面的
@WebService(targetNamespace="http://ws.sh.cn",//namespace
name="OrderService", //protype name
serviceName="OrderServiceBean"  //Service Name
) 这个注解中加入属性配置就 可以了


--- 开发ws客户端应用
--准备jar 和jdk 的版本
如果使用的JDK 中使用JAX_WS 版本  低于 我们引用的jax_ws 的jar 需要在
JDK_HOME/jre/lib/endorsed(新建) \ 加入  jaxws-api.jar  和 jaxb-api.jar 
如果使用myeclipse 就需要修改myclipse 使用的JDK 为系统中安装的JDK

2.使用web-service客户端工具生成辅助类 (Ant配置生成)

3.借助辅助类 调用  web service




1.导入 下载的 jax-ws \lib\*.jar
2.编写 ant配置文件 生存 辅助类
--Ant  ---build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="WSClient" default="wsclientgen" basedir=".">
	<property name="src.dir" value="${basedir}/src"/>
	<path id="build.classpath" description="设置类路径">
		<fileset dir="${basedir}/lib">
			<include name="*.jar"/>
		</fileset>
	</path>
	
	<target name="wsclientgen" description="生成webservice客户端,执行后请刷新">
		<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport" classpathref="build.classpath"/>
		<wsimport wsdl="http://localhost:8989/WebService/OrderServiceBean/OrderService?wsdl"
			sourcedestdir="${src.dir}" package="com.sh.ws.client" keep="true"
			verbose="true" destdir="${basedir}/bin" xendorsed="true"/>
	</target>
</project>



-->编译运行 (在大纲视图找那个  outline中)
//http://localhost:8989/WebService/OrderServiceBean/OrderService?wsdl 为jboss 控制后我们已经发布的 WEBservice 服务路径 
就是 点击
http://localhost:8989/WebService/OrderServiceBean/OrderService 后 浏览器中的地址

然后刷新 项目 就可以看到 自动生成的  com.sh.ws.client 包 和 类

---然后 test
package junit.test;

import java.util.List;

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

import com.sh.ws.client.Order;
import com.sh.ws.client.OrderService;
import com.sh.ws.client.OrderServiceBean;

public class WSTest {
	@Test
	public void getUserName() {
		//通过 发布的  服务对象bean 和 端口 来得到   服务接口类  
		//和  JAVA中 接口的实例化 需要 通过实现类来 初始化  
		OrderServiceBean serice=new OrderServiceBean();
		//接口 
		OrderService orderService=serice.getOrderServicePort();
		//调用方法
		System.out.println(orderService.getUserName("西游降魔"));
	}
	
	@Test
	public void getOrder() {
		OrderServiceBean serice=new OrderServiceBean();
		OrderService orderService=serice.getOrderServicePort();
		Order order =orderService.getOrder("999");
		System.out.println(order.getOrderid()+"\\"+order.getName());
	}
	
	@Test
	public void getOrders() {
		OrderServiceBean serice=new OrderServiceBean();
		OrderService orderService=serice.getOrderServicePort();
		List<Order> orders=orderService.getOrders();
		for (Order order2 : orders) {
			System.out.println(order2.getOrderid()+"\\"+order2.getName());
		}
		
	}
	
	

}




这样就可以调用 webservice 中的方法了
1
1
分享到:
评论

相关推荐

    EJB3.0容器模型的WEB服务-WebService

    **EJB 3.0 容器模型与 WebService** Enterprise JavaBeans(EJB)是Java平台上用于构建可扩展、安全且事务处理能力强的企业级应用的框架。在EJB 3.0版本中,引入了许多重要的改进,使得开发更加简化,更接近标准...

    ejb3 第12讲 --开发EJB容器模型的WEB服务

    在本主题"ejb3 第12讲 --开发EJB容器模型的WEB服务"中,我们将探讨如何利用EJB 3.0版本来创建和整合Web服务。EJB 3.0是一个重要的里程碑,因为它显著简化了EJB的使用,引入了更多的POJO(Plain Old Java Object)...

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

    **EJB 3.0 学习总结(二)——EJB 3.0 容器模型的 WEB 服务** EJB(Enterprise JavaBeans)3.0 是 Java 平台企业版(Java EE)中的一项核心技术,它为构建可扩展、安全且易于管理的企业级应用程序提供了强大的支持...

    北大青鸟内部教学课件ACCP4.0Y2(EJB_WebService,ASP.NET)

    在课程中,学员将学习如何创建、部署和管理EJB,理解容器管理的持久性(CMP)和 bean 管理的持久性(BMP)的区别。 **WebService**是一种基于开放标准(如XML、WSDL和SOAP)的互操作性技术,它允许不同平台上的应用...

    WebService

    EJB可以被包装为WebService,使得远程客户端能够通过网络调用这些服务。 "Java和Net.doc"文件可能包含了关于Java与.NET之间的互操作性,这通常涉及到使用SOAP消息和WSDL来定义服务接口,以便.NET客户端可以调用Java...

    J2EE教程: Struts+Spring+JSF+Hibermate+EJB+XML+WebService+Ajax(part3)

    EJB容器提供了服务,如事务管理、安全性、资源管理等,让开发者能够专注于编写业务逻辑,而不是底层实现。EJB有三种主要类型:会话bean、实体bean和消息驱动bean。 6. **XML**: XML(Extensible Markup Language...

    简易EJB3.0教程

    EJB容器提供了一组服务,如安全性、事务管理、生命周期管理等,开发者无需关心底层实现。例如,容器会自动管理Entity Bean的持久化,确保事务的一致性,并提供安全的访问控制。开发者只需关注业务逻辑,提高了开发...

    EJB3.0规范中英文版合集

    2. **容器服务**:介绍EJB容器提供的服务,如安全性、事务、并发控制等。 3. **开发流程**:提供一个从创建Bean到部署运行的完整流程示例。 4. **查询语言**:JPA中的JPQL(Java Persistence Query Language)允许...

    ejbAPI 英文

    - **事务管理**:EJB容器负责事务的开始、提交、回滚和传播,开发者只需编写事务边界内的业务逻辑。 - **安全性**:ejbAPI提供了角色和权限的管理,可以限制对EJB组件的访问,确保只有授权用户才能调用特定的业务...

    EJB3.0入门图文教程

    EJB运行在EJB容器中,容器负责bean的生命周期管理、安全性、并发控制等。开发者只需要关注业务逻辑,其他如资源管理、事务处理等都由容器自动处理。EJB3.0的部署也变得更简单,通常一个EJB3应用可以通过JAR或WAR文件...

    EJB3开发指南《EJB.3.Developer.Guide》

    - **配置与使用**:通过注解如`@Stateless`和`@Stateful`来声明Bean类型,并利用EJB容器提供的服务进行事务管理和生命周期管理。 #### 三、实体Entities - **定义**:实体Bean是EJB中的另一种组件类型,主要用于...

    EJB3规范---文档

    - **隐式事务管理**:EJB容器自动管理事务,开发者无需手动处理事务开始、提交和回滚。 5. **ejb-3_0-pfd-spec-ejbcore.pdf**:这份文档详细介绍了EJB 3.0的核心概念,包括Bean的类型、生命周期、安全性、事务管理...

    ejb3.0实例教程及源码

    6. **事务管理**:EJB容器自动处理事务,开发者只需通过`@TransactionAttribute`注解指定事务属性,如REQUIRED、REQUIRES_NEW等。 7. **安全性**:EJB3.0提供了内置的安全模型,包括角色基的访问控制(RBAC)和声明...

    EJB3笔记代码

    7. 事务管理(transaction):EJB容器提供了事务管理服务,开发者可以通过声明事务边界(@TransactionAttribute)来控制事务的开始、提交、回滚。EJB3支持多种事务策略,如REQUIRED、REQUIRES_NEW等。 8. 消息传递...

    ejb3超详细教程ejb3超详细教程

    - EJB3容器提供的服务,如安全、事务、并发、持久化、调度等,帮助开发者专注于业务逻辑,而不是底层实现。 10. **最佳实践与设计模式** - 学习如何有效地使用EJB3来遵循SOLID原则,以及在企业级项目中应用常见的...

    ejb-3_0最新规范

    EJB 3.0的测试框架允许在没有EJB容器的情况下对Bean进行单元测试,通过使用@EJB(lookup="")注解模拟Bean的依赖,提高了测试的效率和覆盖率。 10. **企业级功能的保留** 尽管简化了许多方面,EJB 3.0依然保留了...

Global site tag (gtag.js) - Google Analytics