动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.Eclipse快速上手指南 (1).
.在ModalDialog中操作父窗口对象.
.JAVA学习经验之谈.
.servlet规范定义的Servlet 生命周.
.浅谈JAVA中类的构造器.
.JavaSocket网络编程初级入门.
.Java应用开发中JDBC接口技术的介.
.SUN公司操作系统的发展战略.
.2005年Java技术年度综述:融合与.
.在Java语言应用中实现UDP协议编程.
.Mini Java编译器(一)——任务概.
.实例:用Java的加密机制来保护你.
.Java的多线程-实现多线程及线程的.
.将 TOC 从 XML 带到 DHTML地带.
.感受Ruby on Rails.
.发布您的最新基于Eclipse的产品二.
.如何在JBOSS Server上发布EJB.
.Java学习推荐书籍.
.ceil 方法.
.谈谈J2ME简表.

Web Service 和 J2EE

发表日期:2008-1-5 |



  在前面的文章中,我们已经把握了如何开发、配置和使用简单的 Web service。我们也了解了一些高级的Web service概念,这其中包括状态Web service、远程调用和Web service 安全。本文中我们将开始研究Web service是如何在J2EE环境中工作的。
  理解Web Services和J2EE 集成原理
  当今,许多应用将三层业务逻辑作为标准的J2EE组件来实现。将这些组件用于SOAP Web service几乎使它们被普遍应用,同时这也提供了一种集成这些组件的简单机制。J2EE的标准组件体系结构使得这个过程变得相对轻易。
  本文中,我们将解释如何使J2EE组件以Web service的形式发布,同时也会演示如何应用Java Message Service (JMS)可靠地发送SOAP报文。我们将主要讨论Enterprise Java Beans(EJBs),这是因为EJBs是业务逻辑实现中使用最为广泛的J2EE组件,当然所有演示过的方法也适用于其他的J2EE组件,例如JDBC数据源和JMS队列。
  标准的J2EE处理
  我们首先来概括一下有关J2EE平台的一些重要事实。传统上来说,J2EE客户端应用程序使用JNDI查找服务器方的J2EE组件。例如,客户端应用程序查找JNDI中的EJB引用并收到一个EJB客户端代理。客户端在后面将使用这个代理来访问EJB组件。所有的J2EE通信在正常情况下都发生在RMI上。
   Web Service 和 J2EE(图一)
  图 1:标准的JNDI使用
  J2EE - 基本方法
  有两种通过SOAP访问J2EE资源的方法。我们首先来看看最显而易见的方法,这种方法可以在EJB四周创建Web service wrapper。该方法非凡适合于这样的情况:Web service应用不直接映射到单独EJB并且还需要J2EE 组件的附加信息。我们在第二个例子中将介绍一种以较少代码实现透明集成的方法。这种方法的主要目标就是将现有的J2EE应用尽可能迅速的以Web service的形式动态发布。这种方法答应我们无须编写或者修改任何代码就可以高效的访问现有的基于SOAP的J2EE应用。
  简单的股票报价EJB Wrapper 演示样本
  在这个演示样本中,我们将介绍EJB wrapper Web service 方法,该方法可以访问简单的无状态session bean:股票报价EJB。该方法虽然很简单但是却在许多SOAP框架中得到了广泛应用。各种实现之间只存在一些细微的区别,这些实现通常会与开发流程的自动化水平相吻合。这种方法要求所实现的Web service包含一个或者多个现有的J2EE 组件。而这个wrapper起到SOAP与 RMI之间的桥梁作用。客户端将SOAP请求到这个wrapper,然后由wrapper把请求转换成适合EJB 组件的RMI 请求。我们非凡推荐将该方法主要用于诸如无状态Bean之类的无状态J2EE资源。为了用该方法来访问有状态的资源,您将需要设置额外的生命周期服务来正确地删除孤立的有状态资源。
  我们首先需要执行一些简单的安装和配置步骤。
  注重:假如您还没有下载用来创建指导实例的软件,请参考30分钟创建WebService。您还需要下载演示样本的源代码demo sources。 这里我们假设您已经把这个文件拷贝到c:\wASP_demo目录。指导实例中所提到的所有Java源代码都可以在解压缩文件demo sources后得到的src子目录中找到。它们位于com.systinet.demos.包中。同样,演示样本中的所有脚本程序都位于bin子目录。尽管您并不需要下载和使用该软件来理解这些文章,但是我们还是强烈推荐您这样做。
  额外的安装步骤:我们将在J2EE环境中使用Sun J2EE 1.3。(您可以从Sun的 Java website下载所需的软件)。在安装完J2EE 1.3 RI之后,您需要配置WASP Web service 运行时间以便使用Sun J2EE RI。这里提到的配置可以通过修改WASP Advanced高级安装的Bin子目录中的 env.bat脚本程序来实现。首先将下面一行变为注释(在该行开始之处添加rem):
  set INSTALLATION_TYPE=standalone
  然后删除同一文件中的下面一行的注释:
  set INSTALLATION_TYPE=j2ee
  您需要修改位于c:\wasp_demo\bin Directory的env.bat文件。请为环境变量J2EE_HOME,WASP_HOME和WASP_DEMO设定正确的取值。
  
  一旦您完成了上面提到的安装和配置步骤,请通过使用startJ2EE 和 startserver启动J2EE 服务器并运行WASP Web service。
  
  下一步,运行deploy_j2ee 来编译Java源代码并配置我们在演示样本使用的EJBs。
  
  注:在配置EJB之后,您需要重新启动J2EE 服务器。
  
  假如您查看com.systinet.demos.stock包中的Java源代码,就会发现StockQuote,StockQuoteHome类 和StockQuoteBean 类使用一个简单getQuote方法实现了一个相当简单的无状态session bean。我们已经通过调用deploy 脚本程序对这个EJB进行了配置。您要确保使用J2EE的治理工具对所有的EJBs进行了正确配置。调用演示样本bin目录下的J2EEAdmin程序将启动治理工具。
  
  现在我们来集中关注图2中wrapper Web service 的实现。它实现了方法getQuote,该方法包含一个简单的EJB 调用。首先,它从JNDI得到EJB的有效引用并创建一个EJB实例。然后它将在EJB上调用方法 getQuote,然后删除该EJB。最后,调用结果返回到Web service 客户端。在下面的代码中您可以看到这些步骤:
  
  package com.systinet.demos.stock;
  import javax.naming.InitialContext;
  import javax.naming.Context;
  import javax.naming.NamingException;
  import java.rmi.RemoteException;
  public class StockQuoteService {
  public double getQuote(String symbol) throws Exception {
    // get the JNDI initial context
    System.err.println("Getting J2EE initial context");
    Context jndiContext = new InitialContext();
    // lookup the EJB home
    System.err.println("Looking up EJB Home");
    Object homeRef = jndiContext.lookup("Stock");
    StockQuoteHome home =
    (StockQuoteHome)javax.rmi.PortableRemoteObject.narrow(
    homeRef, StockQuoteHome.class);
    // create the EJB instance
    System.err.println("Creating EJB");
    StockQuote ejb = home.create();
    // call the getQuote method
    System.err.println("Calling getQuote");
    double quote = ejb.getQuote("SUNW");
    System.err.println("SUNW "+quote);
    // remove the EJB
    System.err.println("Removing EJB");
    ejb.remove();
    return quote;
  }
  
  }
  图 2:简单的 Web service EJB wrapper (StockQuoteService.java)
   现在我们可以通过运行deploy_service 脚本程序来配置EJB wrapper Web services。然后,运行run_wrapper 脚本程序来启动Web service 客户端。客户端将会通过wrapper Web service来调用EJB。
  注:为了说明wrapper方法的基本原来,我们尽可能使这个演示样本简单。然而,实际中的应用通常会复杂一些。wrapper 服务常用于集成多个EJBs的功能和其他的J2EE资源。在这些情况下,wrapper服务通常会显现不同的编程接口而不是原始的beans。
  透明的J2EE 集成integration
  访问J2EE资源的另一方法就是使用透明的集成框架。这里,透明是指我们没有必要来编写一个wrapper服务或者改变最初的J2EE代码。假如您希望SOAP客户端利用现有的J2EE资源或者通过因特网访问J2EE资源,这种方法就非常有用了。
  下面所描述的透明的J2EE 集成框架将充分利用JNDI框架的优势,这种优势提供了一种访问J2EE资源的抽象机制。正如我们先前所说的,在J2EE的正常流程中,J2EE客户端将调用JNDI的lookup方法,而客户端的JNDI提供者把这个请求通过RMI传递给J2EE服务器中的JNDI服务。JNDI给客户端返回一个 J2EE代理。客户端使用这个代理,通过RMI远程调用J2EE资源。在这个示例中,我们所使用的客户端JNDI的提供者支持SOAP而不支持RMI。正如您在图3中所看到的,当客户端使用这个提供者发布一个JNDI请求时,该请求将通过SOAP发送到JNDI web service。 这个JNDI web service将在应用程序服务器JNDI中进行实际的查找并获得J2EE代理。然后JNDI web service将一个基于SOAP的客户端远程引用返回给J2EE代理。客户端应用程序此时就能够使用这个远程引用来调用J2EE资源。每一种方法调用都将通过SOAP传递给J2EE代理。J2EE代理会把请求重新定向到实际的J2EE资源。您可能会注重到J2EE资源或者客户端代码都不需要进行修改。只需在客户端实施一个配置更改而已,即指向基于SOAP的JNDI提供者。
  Web Service 和 J2EE(图二)
  图 3: Web service有权使用JNDI
  注:大多数Web service运行时间服务器和应用程序服务器是在相同的上下文环境中运转。因此,调用重定向方法将会非常迅速,并且不会降低性能。
  这种方法也适用于非Java的客户端。因为JNDI Web service是一种标准的Web service,任何的SOAP客户端都能够充分利用它的透明调用框架。例如, Microsoft Visual Basic 客户端可以调用JNDI Web service上的方法查询并且获得所请求的J2EE资源的Web service代理。
  对于在Web service运行时间创建的所有组件,JNDI Web service将执行自动远程碎片账集。当客户端应用程序显式丢弃远程组件时,根据相关请求,这些组件中的大多数也会被丢弃。但是在松散连接条件下的Web services并不能保证做到适当删除。这就是LifeCycle服务需要跟踪并治理所有动态创建资源的原因。这种方法的主要优势就
上一篇:学用Java Web Start 人气:815
下一篇:Java Web Services的远端调用 人气:684
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 HDWiki v4.0.1 bulid 081007 UTF
2008-10-7 迅易评选投票管理系统 v10.0
2008-10-7 HDWiki v4.0.1 bulid 081007 GBK
2008-10-7 Bitrac单用户博客 v1.14 bulid 0
2008-10-7 OpenX(广告管理系统) v2.6.2 多国
2008-10-7 乐铺网店系统免费普及版 v3.41
2008-9-29 酷狗音乐(原KuGoo)2008 v5.310 正
2008-9-29 QQTab 1.1
2008-9-29 网络传送带 Net Transport 2.64a
2008-9-29 谷歌金山词霸v1.8
2008-9-29 TweakVI 1.0 Build 1090
2008-9-29 ACDSee Pro 2.5 Build 333 汉化绿
2008-9-29 Winamp v5.541(2189) 周明波简体
2008-9-27 CCleaner 2.12.651
2008-9-27 Mozilla Thunderbird 2.0.0.17 英
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成