如何在鸡尾酒会上谈论Jini,J2EE和Web服务
日期:2007年6月23日 作者: 查看:[大字体 中字体 小字体]-
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
进入讨论组讨论。
原文地址:
http://www.onJava.com/pub/a/onjava/2003/08/27/cocktails.html
中文地址:
http://www.matrix.org.cn/resource/article/43/43781_Jini_J2EE.html
关键词: Jini J2EE Web
编辑说明:Kathy Sierra 和Bert Bates是O’Reilly的Head First系列的后台智囊。他们第一次写这篇文章是在2003年Head First Java发行的那时候。这本书变得十分流行,我们现在仍然收到订单。如此多的订单让我们决定重新带给读者,这就导致Head First Java,2nd Edition的发行。所以如果第一次发行的时候你没赶上,现在就让Kathy和Bert告诉你如何与Java初学者交谈。
这些都是可以预测到的:当你在一个宴会中,喝着次等的马提尼酒,不可避免的就会谈到分布式编程。怎么办?放松点,因为在这里我们会解决3种最有意思的分布式编程,就在用完的餐巾上画图,你可以用来提高你的 whuffie. (不知道 whuffie是什么? 读读 Richard Koman's interview with Cory Doctorow.)
但是首先,万一你真的现在就在某个宴会上,我们首先从几个即使你不懂Java也可以使用的短语。然后,对于那些确实知道一些Java技术的人,我们会谈得更深入一点。
“什么是动态发现?你知道,它的含义就是在网络上,尽管客户端和服务事先对对方一无所知,但能动态地发现对方。这所有都是基于IP广播的。”
“什么是自动诊断网络 (self-healing network) 呢?它指Jini网络总是能够反映当前所有可用的服务的状态--就像这样:‘OK,这个服务起来了,那个服务当掉了……’没有任何人的管理!”
当然,大多数路由器禁止了IP广播,所以你不准备在web上用Jini。但是Jini是为本地网络的工作,或者本地网络的集合而设计的,所以这并不是个大问题。
“J2EE最酷的东西是提供商独立,你可以专心于你的商业逻辑,将那些重担交给厂商。你可以在你特殊的商业规则上工作,把那些安全,事务,并行,持久化,甚至网络代码实现的任务交给服务器。而你只需要去学一个API,你可以重新部署你的J2EE程序给所有厂商的与J2EE兼容的服务器。所以现在厂商必须改变以前那种将你锁起来,并且你必须乞求厂商添加新的功能以解决bugs的方式。”
“Web服务中酷的东西是…嗯,OK,也许现在的情况Web services没有什么真正酷的东西。但是会变的,就在不久的未来,当所有标准都提出,工具成熟了,以及….”
“但是如果要说Web 服务酷,这也许因为你可以采用你已有的商业程序,甚至旧的程序,让他们通过XML那样的接口暴露在Web上。客户端通过可互操作的方式发送一个XML信息(通过一种叫SOAP的格式)给服务。”
“安全和事务是现在Web服务的两个明显的缺陷,这意味着所有人必须加入自己的解决方案。在Web上没有足够的事务管理设置,而你所拥有的唯一的安全是互动验证 (mutual authentication) 的Https。”
“Jini和J2EE都是Java技术。通过J2EE,就像规格说明说的那样:“哦,你不需要担心你这个小程序员去解决那些巨大的困难的东西。厂商会考虑这些问题,而你可专注于自己的特殊领域的需要(比如,如何卖出更多的妇女内衣)。但是,通过Jini,就好像规格说明说的那样:‘你必须靠自己,别指望其他人使用许多基础设施来救你。这是贫乏而又简陋的,宝贝,但你可以做最令人惊讶和体面的事情。当你在那时,检验一下JavaSpaces。’”
“Web服务不是针对于java的技术,但是java可以让其更容易的使用,特别是如果你去使用J2EE 1.4。不,你说的对。J2EE 1.4还没发布,但是会在今年年底发布,你将在2004年初见到许多厂商支持。”
(在我们继续下去之前,先提出一些免责声明:首先,如果你对于这篇文章的高级含义有任何问题,重新读一下标题。对于这些内容我们有酒吧侍应的牌照,我们不会告诉你什么是错的,但是你也不会试图去了解整个故事。每个主题都需要相应的一本书(但如果我们不说出任意一本书来,这是很可恨的。比如,Head First EJB,或是哪一本呢?)让我们仅仅通过鸡尾酒会的观点来看这个问题并不是你想来操纵你的下个结构。(我们知道你知道这些,但对于那些可能会误解这篇文章是篇严肃的技术论文的人,我感到有必要谈谈我们的a**es).)[原文如此]
所以现在是时候进入下一个层次了。我们将首先开始看看什么是服务,而且更重要的是如何向别人显现你自己。换种说法,你如何将你的服务告诉你潜在的客户呢?
通过Jini,J2EE,和Web service,目的是让客户去访问服务。什么是服务呢?你所能做的事就是将消息从一个软件传递给另一软件(也许包含人工指向,也许也不包含)。你也许有一个为基因匹配进行大规模计算的服务。或者一个玩简陋的Go游戏的服务。或者一个让你买演唱会门票的程序。或者预定异国热带风情的巡游。或者甚至将你的文字传递给一台高容量(high-volume)打印机。换种说法,服务就是所有像软件一样开始但是结果并不一定留存在软件中的东西。
你也许有个服务来移动摄像机,利用打印机打印,拨电话。没关系。或者至少没关系。主要目标之一,就像OO的任何情况下的目标一样,尽可能减少耦合,—此例中,即客户端和服务器端之间的耦合。换种说法就是我们要让那些参与者(客户端和服务端)尽可能地少了解对方。
但是让我们说说你有一个服务…现在怎么办?客户端如何找到你?如果他们找到你,他们怎么知道你的服务可以干什么?换种说法,他们如何知道他们调用你的服务的方法?这样,你必须将你自己暴露给客户,我们的3种技术在这方面稍有不同。不考虑我们在讨论Jini,J2EE,或者Web服务,可是必须在某个地方有个接口。这个接口说明了你可以做的东西。服务接口
作为一个服务开发人员,你必须告诉人们你的服务可以做什么。或者说,你必须声明你的服务的方法。这包括声明客户端传递给你的方法什么(参数)以及服务返回什么(返回类型)。
上面这个接口是为一个叫Advice的服务。它具有一个方法,getAdvice()。你可以调用这个方法,得到一个字符串,里面包含极好的有用的随机选择的建议。(我们选择不在我们假的小类似于UML的图中显示返回类型。这是非常小的事)。
对于Jini和EJB(Enterprise JavaBeans---J2EE的核心和灵魂),接口通常是Remote。一个Remote的接口通常意味着开发者写一个基于java.rmi.Remote的扩展java接口。耶,Remote所有方法(意思是Remote接口中的所有方法)必须声明一个java.rmi.RemoteException的异常。一个强制性的异常(checked exception),告诉客户端:“事情变得很糟糕,小心准备。”
对于Web Services,接口被定义在一个WSDL中(读作“wizdle”,与“fizdle”押韵)----一种特殊格式的XML文档。所以总括来说,你可以在随意的谈话中说以下这段话:
“可以说,在jini和ejb中,你通过java接口暴露你自己,但是在web服务中,你通过xml接口暴露你自己。”
(准确地说,如果你是一个java开发者,你通过写一个java接口来创建WSDL,按那个在你的开发工具中神奇的红色按钮,将你的java接口变成XML WSDL。这就够了,像他们说的,这超过了一个鸡尾酒会谈话的范围。)
OK,现在我们有了服务,有了暴露我们服务的接口。现在呢?客户端如何知道这个接口?他们如何真正取得这个接口,他们还需要和我们服务交流些什么呢?这要看服务的类型。这3种类型是不同的。你访问Jini,J2EE和Web服务将有少许不同,文章的其他部分将着重于一些细节和主要不同之处。
首先,让我们从一些Java的Remote Method Invocation(RMI)的背景开始。这是大部分的java分布式技术的主干,Jini和EJB都基于此。事实上,自从所有分布式技术在概念上如RMI的技术上运行时,你在这里了解的东西将帮助你弄清楚整个分布式的世界,Java或者非Java的。
通过RMI,你写你的服务并将此变成为Remote对象。让其成为Remote仅是小菜一碟---写分布式接口,创建Remote类来实现它。进入讨论组讨论。创建remote接口1. 扩展 java.rmi.Remote
2. 为每个方法声明java.rmi.RemoteException
1. public interface Advice
2. extends java.rmi.Remote {
3.
4. String getAdvice() throws
5. java.rmi.RemoteException;
6.
7. }
创建remote类1. 实现你的Remote接口
2. 为接口方法写真正的商业逻辑
1. public class AdviceImplementation implements Advice {
2.
3. public String getAdvice() {
4.
5. // monumentally important
6. business logic here
7.
8. }
9.
10. }
- [1] [2] [3] [4] 下一页
- 如何在鸡尾酒会上谈论Jini,J2EE和Web服务 相关文章:
- ·如何在鸡尾酒会上谈论Jini,J2EE和Web服务
- 如何在鸡尾酒会上谈论Jini,J2EE和Web服务 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
精品推荐
热点TOP10
- ·3D编程指南第五部分:使用M3G渲染heightmap地形
- ·Servlet简介(二)
- ·J2EE入门教程之一
- ·3D数学知识简介
- ·开源密码管理软件
- ·使用Oracle JDBC驱动
- ·Servlet简介(一)
- ·经典飞机游戏代码S60
- ·通用联接框架(GCF)连接类型使用总结
- ·使用platformRequest()自动更新MIDlet套件
- ·利用Jsp+Taglib+JavaBean快速构建动态数据库查询模板
- ·JBoss文档(二)??JBoss开发、打包、部署
- ·MIDP 2.0安全机制 与 MIDlet 数字签名
- ·EJB 3.0简介
- ·介绍J2ME可选包WMA(JSR120)
- ·使用NetBeans5.0建立JAX-WS2.0服务
- ·从自定义字节数组创建图片
- ·Petstore源码追踪记
- ·JSP轻松入门(一)
- ·KVM的扩展
特别推荐
