服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

漫谈ejb――enterprise javabeans(一)


  java语言
  java语言最早被称为oak,它是为了实现嵌入式的消费类电子产品应用而产生的,它的作者是james gosling。ed frank, patrick naughton, jonathan payne, chris warth在随后的几年时间中为java语言加入了大量的特性,并把java语言的目标做了一个重新的定位,定位于适合internet的语言。
  
  java语言是一种多用途的语言、并发的语言、以类为基础,面向对象的语言。它的设计尽可能的做到和操作系统是无关的,也就是java所宣传的那句话:“一次编写,到处运行。”java的设计参考了c和c++语言,因此熟悉c和c++的程序员对java语言上手很快,而java设计的原则是能够利用java语言快捷的编写应用,所以我们可以发现,在java语言中,并没有那些c和c++中的复杂的机制。最明显的就是c中被大量使用的指针,由于它的随意性,被java以引用来代替了。而c++中的操作符重载、模板、泛型的特性也因为使用比较复杂,java也不予采用。但是目前java仍然不断的推出新的特性,以满足应用的发展。例如在新推出的jdk1.4中,java语言就能够支持assertment机制和perl语言中最有用的正则表达式机制。
  
  java语言主要由以下五种元素组成:标识符、关键字、文字、运算符和分隔符。这五种元素有着不同的语法含义和组成规则,它们互相配合,共同完成java语言的语意表达。
  
  1:标识符。变量,类和方法都需要一定的名称,我们将这种名称叫做标识符。
  
  2:关键字。关键字是java语言本身使用的标识符,它有其特定的语法含义。所有的java关键字将不能被用作标识符。
  
  3:数据类型。java有着不同的数据类型。比较值得一提的是字符串数据类型,字符串数据类型是用一对双引号括起来的字符序列,字符串数据实际上是由string类所实现,而不是c语言中所用的字符数组。每一个字符串数据将产生一个string类的新的实例,用户不必对字符串与类这个概念发生关系而感到担心,由于类的特性,你不必担心如何去实现它们,它们会自己照顾好自己,需要说明的是字符串在java里作为类只是出于安全的考虑。
  
  4:运算符。任何语言都有自己的运算符,java语言也不例外,如+、-、*、/等都是运算符,运算符的作用是与一定的运算数据组成表达式来完成相应的运算。对不同的数据类型,有着不同的运算符。
  
  5:分隔符。分隔符用来使编译器确认代码在何处分隔。‘’‘’‘;’‘:’都是java语言的分隔符。
  
  学习 java 语言很简单,毕竟 java 语言也只包含五十多个关键词(keyword)与几十个算符(operator),再加上 java 语法(syntax)也很简单,所以一般人可以很快就学会 java 语言。危险的是,很多人认为已经完全掌控 java 语言,但其实对于内部的运作机制仍不能掌握,这些盲点有时候会让你无法完全掌控 java 语言。克服这些盲点的方式是看「the java language specification, 2nd ed.」(没有中文版)来彻底弄懂 java 程序语言,并看「inside the java virtual machine, 2nd ed.」来彻底掌握 java 虚拟机器的运作方式。学会了语言,并不代表就可以设计出好的对象导向系统架构。想要成为对象导向的专家,往往需要:(1) 多看相关的书,特别是 design pattern 和 refactoring 的书。(2) 多观摩别人的程序(例如 java api 的 design 与 implementation)(3) 多写程序。学会 java 语言之后,还需要学会一些 api 才能写出有用的程序。java 的 api 非常多,必须规划好一个学习路径,才不会在浩瀚的 api 大海中迷失。必备的 api 包括了:io、new io、collection framework、network、rmi、jaxp... 等。至于其它的 api,就看你的需求而定,大致上分成:
  
  * gui 类:javabean -> swing -> javahelp -> java2d -> image io -> jai -> java 3d ...
  * enterprise 类:jdbc -> jdo -> servlet -> jsp -> ejb -> jms -> jta/jts...
  * j2me 类(这一类不是我的专长,无法提供学习顺序建议)
  
  java语言通常都是根据java虚拟机规范(the java virtual machine specification)中的定义,编译为字节码指令集和二进制格式。因此我们接下来就讨论java虚拟机(jvm)
  
  jvm
  我们已经谈过java语言的语法类似于c和c++,但是摒弃了c和c++中复杂、疑惑和不安全的特性。java语言最早是用来构建消费类网络设备的软件的,因此它要支持多主机的架构,并要求能够提供安全的软件组件。为了满足这些需求,编译好的代码就必须能够通过网络来传播,能够在任何客户端上运行,同时还要保证客户端是足够安全的。
  
  java虚拟机是java和java 2 平台的基石。它能够保证java语言和硬件、操作系统无关,保证编译后的代码最小,并保护用户不受恶意程序的攻击。java虚拟机到底是什么呢。其实它就是一台不实际存在的计算机。和真实的计算机类似,它也有自己的指令集,并可以在运行环境中分配内存区域。使用虚拟机机制来实现编程语言并不是java的创举,这已经是非常普遍的做法了,最著名的许你就莫过于ucsd pascal的p-code机。
  
  只要浏览器检测到目前所处理的web文件内容含有一个java applet,浏览器将会为这个java小程序另外开一个jvm,执行这个java应用小程序。在jvm中执行的java小程序可以得到充分安全的保护。如同我们上面所说,jvm是一个自给自足的作业环境,就像是一台独立的计算机一样。例如,在jvm运作的applet,无法存取主机操作系统。优点是:
  
  1. 系统中立。java应用程序可以在任何jvm中运作,不论该系统使用何种硬件、软件。
  
  2. 安全。正因jvm跟操作系统没有任何接触,java程序很难损害到其它档案或应用程序。
  
  缺点是,由于在jvm运作的程序独立在操作系统之外,也就无法享受操作系统各项特殊功能。
  
  java技术之所以在今天得到了如此广阔的应用,其中它的安全性是不能不提的。不同于其它技术(例如microsoft的activex)中安全性作为附加设计和补丁,java从设计之初便考虑到了安全性。因此java的安全性是在语言层次实现的。java的安全性由下列三个方面保证:
  
  1、 语言特性(包括数组的边界检查、类型转换、取消指针型变量)。
  
  2、 资源访问控制(包括本地文件系统访问、socket连接访问)。
  
  3、 代码数字签名(通过数字签名来确认代码源以及代码是否完整)。
  
  java的源代码是先编译成为一种字节码的中间代码,存放这种代码的文件就是.class的文件。真正执行的时候是将class文件装载到jvm(虚拟机)中,然后由jvm解释执行的。所以数组的上下界检查及合法的类型转换是通过jvm得到保证的。java通过一个类装载器类(classloader)将虚拟机代码文件(即class文件)装载到jvm中,当完成装载后,一个被称做安全管理器(securitymanager)的类开始运行,例如当一个applet的class文件被缺省的类装载器装载到jvm中后,jvm会立即为它装载一个securitymanager的子类appletsecurity,由这个管理器来验证操作。代码的所有动作(例如文件读写)都要先经过验证,只有被该安全管理器接受的动作才能完成,否则就会抛出securityexception异常。
  
  对于jdk1.0,权限被笼统的划分为两大块。一是拥有所有的权限,一个是仅拥有"沙箱//"(sandbox)权限,这也是普通的applet所拥有的权限。这时本地文件读写或是与源主机(orignal server)以外的主机连接都是被禁止的。这种划分的最大问题就是缺乏灵活性。例如我们希望一个applet在用户信任的情况下能够对本地文件系统的某个目录进行读写,但并不要通过socket与其它主机连接。这是jdk1.0的权限划分就不能达到要求。jdk1.1后改进了权限的划分,引入了权限集(permissionset)的概念。
  
  由于我们的文章并不是讨论jvm,因此,我们只是对jvm做一个简单的介绍。如果需要详细了解的,可以参考『the javatm tmvirtual machine specification』。
  
  客观的看待java
  相对于其他编程语音,java有一个无庸置疑的优点:用户以及编译器第一次不必了解生成可执行代码的特定cpu细节。java引入了一个编译代码中间层,叫做字节代码,并使用一个虚拟抽象的机器,而不是一个真实的机器。当java编译器结束了一个源文件的编译后,你所得到的不是可以立即在一个给定平台上运行的代码,而是可以在任何真实的平台上运行的字节代码,唯一的条件就是这个平台要理解和支持java。这些发展包含着一个文化的变革。作为一个开发人员,你只需要确定java虚拟机(jvm)提供的抽象层,不同的os销售商负责执行代码层,从而将中立于平台的字节代码映射到主机平台的机构中。在这种情况下,java似乎是统一分布式计算机世界的领袖候选人了。“编写一次,永远运行”(并且无论在哪里)就成为java诱人但却真实的口号。
  
  但我们平心而论,java的跨平台并不是一个非常诱人的特性?跨平台理论的发展很好地证明了这一点。我们看到,将java代码从一个平台移植到另一个平台―java这个语言最重要和最受吹捧的特点―并不象宣传的那样容易。任何java平台都有其自己的虚拟机,它可以理解通用的字节代码,并且及时地将其编译为本地代码。矛盾由此产生,不同虚拟机的执行也很不相同,这一点足以使代码的移植比预期耗费多得多的时间,而且基本上不是自动的。在企业用户的角度上来说,也很少会有企业会频繁的更换平台,因此这个特性是否能够带来高价值是很难评价的。
  
  那么,java模型的好处在哪里呢?首先,java是一种先进的、面向对象的语言,包含了预防常见错误的内置功能,并在仅仅一两个对象中携带了许多经常需要用到的功能。与c++相比,java更易于读写,不容易出错,而且更加美观,但是它速度较慢也不太灵活。想实现在任何软件和硬件平台上都可虚拟移植,java尽可能少地使用了公

扫描关注微信公众号