WebService 之 EJB容器模型

11 篇文章 0 订阅
6 篇文章 0 订阅
---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开发


[img]http://dl.iteye.com/upload/attachment/0080/9279/10e28253-5ade-3bb3-ad44-7b26eb7228b2.jpg[/img]

使用无状态会话 将其 发布为 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
) 这个注解中加入属性配置就 可以了


[size=medium][b]--- 开发ws客户端应用[/b][/size]
--准备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


[img]http://dl.iteye.com/upload/attachment/0080/9289/5b5a924d-8c94-31f4-b53b-6f4c456b7efb.jpg[/img]

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 中的方法了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值