java获得的广泛支持和相对简单的开发过程已经使它成为很多应用的首选语言。尤其在未来的web应用中,比如xml数据流和复杂的大容量事务处理,更需要健壮的java解决方案。
java程序可以在两个地方执行:用户台式机上的客户端浏览器和网络服务器。java在浏览器中的使用已经让人们亲身体会到了它的好处,在将来更将发挥越来越大的作用。除了受到某些安全性和带宽限制以外,由于利用java可以在页面中方便地实现活动内容,它已经受到了人们的广泛认可。而在服务器端,使用java结合动态html也已成为目前商业解决方案中最实用的技术。
如果选择了java作为商业逻辑的实现语言,那么java服务器小应用程序和企业javabeans(ejb)可以将应用程序生命周期中发生的变化很好地加以隔离。更具体一点儿说,比如在数据库服务器中的存储过程,同样也可以从java中受益,直接使用java进行开发。
一、服务器端与客户端的异同
在客户端使用java,需要考虑的事情不太多。现在在客户端浏览器中支持的内置java类主要由microsoft或netscape决定。当然,最终的java应用还要受到用户所能得到的带宽限制。另外在许多情况下,系统的组织安全策略会把java内容拒之于防火墙外。这时你所需要做的惟一决定可能就是选择一个合适的java ide(集成开发环境),这完全可以根据个人喜好确定。然而,如果在服务器端使用java(假设在一个干净的环境中),需要考虑的事情可能就多一些。你首先必须弄清楚所使用的是何种web服务器,以及打算采用什么事务管理器。一旦决定在服务器端使用java,还必须考虑内部网到防火墙之间的一些基础设施的安全问题。
在理想的情况下,服务器端的java是一个开放的开发模型,并不受特定的ide限制。在选择java服务器基础设施的时候,我们应该着重考虑服务器到底能够提供什么样的java执行环境。虽然不同的java环境所提供的服务有所不同,但是一般都提供了基本java类库。本文主要考察三种不同的服务器端java开发环境:由ibm的websphere提供的java服务器小应用程序引擎、gemstone系统公司为ejb设计的应用程序服务器、以及oracle公司的oracle 8i中将java作为存储过程编写语言的专门开发环境。这些产品分别代表了开发中不同的例子,当然各个公司也提供了别的java支持产品(比如,ibm和oracle都支持ejb)。
二、java服务器小应用模型
java服务器小应用模型最大的特点就是它提供了一个标准的、统一的api和环境,开发者可以使用统一厂商产品,而且它很好地解决了cgi进程模型中的性能问题。并保证了java的安全性。
在开始讨论之前,有必要首先提及无处不在的java服务器小应用api。java服务器小应用程序引擎是指能通过api方式向java应用程序提供服务的java虚拟机,它规定了与web服务器进程通信的协议。服务器小应用api包括两个软件包:
javax.servlet和javax.servlet.http。服务器小应用引擎(一般就是web服务器)负责加载用户类,管理线程和多个客户请求。引擎产生服务器小应用程序的实例,并且创建所需的配置和会话对象。引擎同时还负责中止服务器小应用程序,执行垃圾收集。服务器小应用api提供了一个简单的对象框架来支持基于html的客户,它包括用于检索服务器请求的对象、一个简单的流接口和其他高级特征,诸如cookies、会话跟踪和线程支持等。"stock"服务器引擎提供了传统意义上的服务,比如会话、cookies;标准java类库,比如jdbc(java数据库互连)以及提供到企业数据的访问接口。但是如果你需要更多的功能的话,websphere和gemstone/j都对服务器小应用程序引擎进行了增强,为标准引擎提供了基本的管理和配置服务以及其他的高级事务处理和对象持久化服务。
使用java服务器小应用api,只要简单地将java加到服务器中,安装一个java ide和支持java 服务器小应用程序的web服务器(大多数都支持),一切就都准备好了。通俗地讲,可以将服务器小应用api看成java的cgi。与真正的cgi脚本不同的是,服务器端的java提供(但不保证)创建可重用的对象框架,而cgi脚本不提供支持对象框架的任何设施。java服务器小应用模型最大的特点就是它提供了一个标准的、统一的api和环境,开发者可以使用统一的商业化产品,而且它很好地解决了cgi进程模型中的性能问题(每个服务器小应用程序是一个线程)。服务器小应用程序在自己的上下文中执行,从而可以保证java的安全性和应用程序服务。由于jvm(java 虚拟机)在自己的用户进程中执行,任何调用nsapi/isapi(netscape api/internet服务器api)服务器小应用程序出现的异常都不会导致系统崩溃或者影响web服务器进程的性能。除此以外,用户还可以使用所有其他为java平台开发的类库、工具和api。
但是服务器小应用模型也有其不足之处,比如在采用这种模型时,必须考虑性能问题。给定两个完全相同的服务器和web服务器进程,采用java服务器小应用解决方案时,就会导致web服务器和jvm之间上下文的切换,产生额外的开销。另外,如果采用nsapi/isapi解决方案可以直接利用本地代码编写,避免了解释java字节码时的开销。虽然服务器小应用在出错时不会影响web服务器的正常执行,但是它会影响到整体的应用程序。
三、websphere
ibm的websphere是专为java服务器端应用开发的产品,它将关于apache web服务器的开发和连接管理等服务集成在websphere应用程序服务器(was)中。除了提供基本的web服务器的功能以外,was运行环境还可以作为微软的internet信息服务器(iis)和netscape的navigator/communicator的附加程序,充当服务器小应用程序管理器的代理。
websphere包括许多简化服务器小应用程序开发和管理的功能。websphere中包含了一个wasrunner类,可以在标准模式中启动应用程序服务器,利用外部的ide进行程序的调试。web服务器附加程序在启动时会自动检查wasrunner,并和它连接,所以开发者可以使用产品中运行的同一web服务器环境进行工作。
每一个服务器小应用程序都与一个配置相关联。这个配置通常由应用程序服务管理器来管理。ibm在其websphere中包含了一个有趣的类,可以在xml文档中管理这些信息,包括名称、描述、初始化参数以及服务器小应用程序的一个页面列表。ibm同时提供了pagelistservlet和xmlserverconfig两个类来简化xml文档的创建和读取。websphere还有专门用于简化站点管理和开发任务的模块,可以用于监视服务器小应用程序的执行、连接、资源使用和响应时间。
四、gemstone/j
如果使用java处理一个大型企业的商业规则,可能对性能(可扩展性和可用性)和成本(指减小编写和维护的代码)比较敏感。gemstone/j是一个功能强大的java应用程序服务器,可以支持服务器小应用程序,ejb,corba(通用对象代理体系结构)以及分布式javabeans。它同时还提供了事务管理、安全性、对象存储以及通信与消息等服务。
gemstone在服务器小应用程序引擎之上又提供了一些附加的服务。根据用户的需要,gemstone/j可以支持java对象的持久化,改变了应用程序开发者必须自己通过对象--关系型或者对象型序列化的方式来检索和创建对象的历史。通过扩展jvm,gemstone实现了一个持久缓存体系结构。
除了在程序变迁的过程中可以存储对象以外,这种体系结构还可以向运行在多个java虚拟机上的应用程序提供状态信息和应用逻辑。服务器小应用程序和javabeans可以分布在多个虚拟机平台上,或扩展到别的服务器中,从而可以获得较高的性能和可用性。 为了简化任务,gemstone/j在事务中封装了会话操作。它的对象管理监视器(otm)支持开始、提交、滚回和加锁等扩展的服务。gemstone管理员可以从缓冲区中配置服务器小应用程序所需的事务控制级别,而不用进行额外的编码。java开发者可以通过响应gemstone环境产生的事件来管理非关系型事务的一致性。
五、oracle 8i
oracle有一个应用程序服务器产品,不过我们真正感兴趣的是java语言在经典数据库环境中的使用。作为服务器可执行程序的一部分,oracle 8i包括了一个在进程空间中执行的jvm,它与rdbms内核共享存储堆。oracle的jvm是一个与jdk 1.1.6兼容的环境。所有的数据库客户(比如查询工具、报表生成器和胖客户应用程序)都可以调用基于java的存储过程。调用方法与调用传统的存储过程没有任何区别。所以在很短的时间内可以支持大量的客户程序。用java编写的存储过程可以从整个环境中得到好处。它们以编译好的形式储存,自动在多个用户间实现缓存。通过对激活程序赋予不同的特权可以实现对它们的访问控制。
为了使用java,程序员可以使用自己喜好的ide开发类,然后完成下面两个额外的步骤。首先数据库需要知道类中的哪些方法将从sql环境中调用。接下来程序员就可以编写一个oracle pl/sql调用规范,定义要从sql中调用哪些java方法。然后程序员就需要将参数和返回类型映射到sql环境中的对应部分。
在java类中,可以用标准的jdbc调用来访问关系数据库。从可移植性和较快的执行速度上考虑,这种调用显得很有意义。jdbc是java中访问关系数据库的标准方法。通常jdbc在远程进程之间使用。在oracle rdbms中,oracle已经将jdbc实现为jvm的一部分。然而,由于jdbc实现结构上的差异,这种访问方法要比远程方法快得多。rdbms中的jdbc直接访问底层的内部库和内存,避免了额外的网络访问、进程间通信或进程上下文的切换等开销,这些都大大节省了时间。
oracle提供的所有java类为了在执行时速度更快,都已经编译成了本地代码。
闽公网安备 35060202000074号