软件业一直是计算机产业的核心计算机刚问世的时候计算机软件基本处于缓慢发展时期那时候使用的计算机软件语言是与硬件紧密相关的机器语言随后出现了汇编语言随着计算机日益介入到人们的生活中间软件也相应的变得更加复杂
于是以编程人员为中心的高级语言替代了计算机发展初期的低级语言其中年代末和年代初的FORTRAN语言的出现是一个变革同时像BASIC和LISP这样的高级语言也相应的产生了这些语言使得编程人员可以超脱于具体的硬件结构使用更接近于实际问题领域的术语表达其设计思想
但是另一方面这种新出现的自由度使得不断复杂的应用程序需要有更加复杂的软件来实现软件工业自由度和复杂性的增加软件开发队伍也不断膨胀成本也不断提高软件工业也在不断的寻求成本低廉而又快速可靠的软件开发方法所以在年代末期基于组件的软件开发的思想开始得到了普遍的重视和应用
软件组件就是指可以进行独立分离易于重复使用的软件部分JavaBean就是一种基于Java平台的软件组件思想JavaBean也是一种独立于平台和结构的应用程序编程接口(API)JavaBean保留了其他软件组件的技术精华并增加了被其他软件组件技术忽略的技术特性使得它成为完整的软件组件解决方案的基础并在可移植的Java平台上方便地用于网络世界中
其实你可以把组件理解成为童年时玩的积木而把用组件搭起来的软件则可以理解成为你用积木搭的形状各异的作品这种比喻也许可以让你理解为什么用组件搭建应用程序会比其他方法制作应用程序更加稳定和快速因为软件的组件是可重用的所以它肯定是经过了很多应用程序的测试所以当你用它的时候出错的概率肯定比你自己重新写一个同样功能的模块的出错概率小而用组件搭建应用程序同时也会更快速这很容易理解就像你用积木搭一座桥比你自己用木头做一座桥要快一样
JavaBean也是一个很成功的组件模型如果你用过JBuilder那么你肯定会受益于它所提供的许多方便的控件而这些控件几乎都是JavaBean其实你已经不知不觉的在使用JavaBean了只是你一直没有注意到而已
. 编写Bean的源程序SimpleBeanjava如下
import javaawt*;
import javaioSerializable;
public class SimpleBean extends
Canvas implements Serializable
{
//该bean从javaawtCanvas派生
所以具有了Canvas的所有属性和方法
public SimpleBean(){
setSize();
//设置该bean的尺寸
setBackground(Colorred);
//设置该bean的背景颜色
}
}
SimpleBean从javaawtCanvas组件派生所以是一个可视化的bean并且实现了javaioSerializable接口这个接口是所有Bean都必须实现的因为SimpleBean具有Canvas的所有属性和方法如背景色和组件尺寸等属性并可以调用相应的方法设置这些属性
. 编译源程序
javac SimpleBeanjava产生字节码文件SimpleBeanclass
. 编写制作(nmake)文件
这个nmake文件会编译这个SimpleBean组件并会产生一个JAR文件将编写好的makefile文件存储为simpegmk(UNIX)或simplemk(windows)并与你的SimpleBeanclass放在同一个目录下nmake文件清单如下
#gmumake文件
CLASSFILES= SimpleBeanclass
JARFILE= SimpleBeanjar
all: $(JARFILE)
# 创建一个带有适当说明文件
(manifest)的JAR文件
$(JARFILE): $(CLASSFILES)
$(DATAFILES)
echo Name: SimpleBeanclass
>> manifesttmp
echo JavaBean: True
>> manifesttmp
jar cfm $(JARFILE) manifesttmp *class
@/bin/rm manifesttmp
# 编译源程序
%class: %java
export CLASSPATH; CLASSPATH= ;
javac $<
#删除产生的中间文件
clean:
/bin/rm f *class
/bin/rm f $(JARFILE)
# nmake 文件
CLASSFILES= simplebeanclass
JARFILE= simplebeanjar
all: $(JARFILE)
# 创建一个带有适当说明文件
(manifest)的JAR文件
$(JARFILE): $(CLASSFILES)
$(DATAFILES)
jar cfm $(JARFILE)
<<manifesttmp *class
Name: SimpleBeanclass
JavaBean: True
<<
#将类打包JavaBean:True
可以使得类出现在ToolBox窗口中
SUFFIXES: java class
{sunw\demo\simple}java
{sunw\demo\simple}class :
set CLASSPATH=
javac $<
#清除中间文件
clean:
del sunw\demo\simple\*class
del $(JARFILE)
. 运行makefile文件
对于UNIX运行gnumake simplegmk
对于windows运行nmake f simplemk
会在当前目录下创建一个JAR文件这个JAR文件里包含了这个bean的信息
我们完成了一个很典型的JavaBean其实就是一个有一定特殊规则的Java类它有一些特殊的地方比如要实现某些接口类不过归根结底它还是一个Java类它可以使用任何Java语言里提供的功能比如说继承于Canvas等
而上面我们提供的makefile则可以作为模板你以后要编写你自己的bean的makefile的时候只需要修改上面提供的makefile就可以了
RMI定义了一组远程接口可以用于生成远程对象客户机可以象调用本地对象的方法一样用相同的语法调用远程对象RMI API提供的类和方法可以处理所有访问远程方法的基础通信和参数引用要求的串行化
远程方法调用类似于Sun公司年提出的远程过程调用(RPC)特征RPC也要求串行化参数和返回数值数据但由于没有涉及对象情况比较简单Sun开发了外部数据表示(XDR)系统支持数据串行化RPC和RMI之间的一个重要差别是RPC用快速而不够可靠的UDP协议RMI用低速而可靠的TCP/IP协议
远程方法调用(RMI)和CORBA都是分布式计算技术在进行分布式时各有其优缺点为了有助于了解RMI的特点和用途有必要讨论一下CORBA和RMI的区别
CORBA(Common Object Request Broker Architecture)是OMG的Object Management Architecture(对象管理结构)它是面向对象的分布式系统建立所依据的标准CORBA被设计成一个能供所有编程语言使用的一个开放性说明就是说一个机器上的Java客户可以要求另一个用SmallTalk或C++的机器服务
正是由于这种语言的独立性使得CORBA这么灵活和吸引人为了适应语言独立性CORBA采用了非常通用的标准作为其接口在不同的语言中远程调用签名和对象的引入有各自不同的定义所以CORBA必须尽可能的中立和开放正是这种通用性是CORBA的一个弱点当开发人员都采用CORBA时他们要用一种新的标准定义语言接口它要求开发者学习新的编程接口从而减小了远程模型的透明性
RMI是为仅在Java对Java的分布式计算中而开发的远程调用的标准是为了Java和应用Java的自然Java签名和调用而开发的这使得RMI对Java的开发者相当透明而且易于实现RMI用Java语言紧密集成从而同CORBA相比能够提供非常好的容错能力及对异常的处理尽管Java的RMI标准不像CORBA那样语言独立但Java本身是一个独立的平台这就使RMI在跨平台的分布软件开发中是一个很好的选择
RMI是Java语言在分布式计算上的基本模型很多Java的分布式系统包括我们本章要涉及的EJB都是建立在RMI的思想上的
传统的分布式应用程序都是基于Client/Server结构的而近年来人们发现基于Client/Server结构的应用程序有很多缺点比如如果客户端的代码需要改变那么所有机器上的客户端程序都要重新安装如果某台机器有了不可修复的损坏那么得去别的机器上重新安装客户端软件才能够使用
而基于Browser/Server结构的应用程序就没有以上的缺点了我们可以使用任何一台有浏览器的机器来工作而因为所有的程序逻辑都在服务器端所以服务器端的代码变动不需要作为客户端的浏览器再做任何工作
由于Browser/Server结构的这些优势近年来关于Browser/Server的程序开发模式有了很多的研究和实践而因为Browser没有办法表示复杂的程序逻辑所以在表示界面的Browser和存储介质数据库之间必须还有一层结构这层结构负责表示复杂的程序逻辑
这就是我们所说的服务器端构件在Brower/Server结构中我们的工作就是开发服务器端构件但是开发服务器端构件是很麻烦的工作因为服务器端构件必须接受很多客户端的请求因此它必须具有多线程和事务处理等能力而这些也成为服务器端构件开发的难点所在