出处:uml软件工程组织
java naming and directory interface (jndi)
jndi api被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如dns和ldap,本地文件系统,后者在应用服务器中的对象。
在jndi中,在目录结构中的每一个结点称为context。每一个jndi名字都是相对于context的。这里没有绝对名字的概念存在。对一个应用来说,它可以通过使用 initialcontext 类来得到其第一个context:
context ctx = new initialcontext();
应用可以通过这个初始化的context经有这个目录树来定位它所需要的资源或对象。例如,假设你在weblogic服务器中展开了一个ejb并将home接口绑定到名字 myapp.myejb ,那么该ejb的某个客户在取得一个初始化context以后,可以通过以下语句定位home接口:
myejbhome home = ctx.lookup( “myapp.myejb” );
在这个例子中,一旦你有了对被请求对象的参考,ejb的home接口就可以在它上面调用方法。我们将在下面的”enterprise java beans”章节中做更多的介绍。
以上关于jndi的讨论只是冰山之一角而已。如果要更进一步地在context中查找对象,jndi也提供了一些方法来进行以下操作:
将一个对象插入或绑定到context。这在你展开一个ejb的时候是很有效的。
从context中移去对象。
列出context中的所有对象。
创建或删除子一级的context。
接下来,我们要开始关注ejb了。
enterprise java beans (ejb)
j2ee技术之所以赢得某体广泛重视的原因之一就是ejb。它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。ejb规范定义了ejb组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。
ejb规范定义了3中基本的bean类型:
stateless session beans: 提供某种单一的服务,不维持任何状态,在服务器故障发生时无法继续存在,生命期相对较短。例如,一个stateless session bean可能被用于执行温度转换计算。
stateful session bean: t提供了与客户端的会话交互,可以存储状态从而代表一个客户。典型例子是购物车。stateful session bean在服务器故障时无法继续生存,生命气相对较短。每一个实例只用于一个单个的线程。
entity beans: 提供了一致性数据的表示– 通常存放在数据库中 — 在服务器故障发生后能继续存在。多用户情况下可以使用ejb来表示相同的数据。entity ejb的一个典型例子是客户的帐号信息。
尽管有以上的区别,所有的ejb还是有许多的共同之处。它们都处理home interface。它定义了一个客户端是如何创建与消亡ejb的。可以在bean中对定义了客户端方法的远程接口进行调用;bean类则执行了主要的商务逻辑。
描述ejb的开发已经超出了本文的范围。但是,如果一个ejb已经被开发了或者从第三方进行了购买,它就必须在应用服务器中进行发布。weblogic server 5.1带有一个ejb deployer tool来协助处理ejb的发布。当你使用ejb deployer tool的时候,你要定义客户端所用的jndi名字来定位ejb。deployer tool将生成wrapper类来处理和容器的通信以及在一个jar文件中把被请求的java类绑定在一起。
一旦ejb被发布,客户端就可以使用它的jndi名字来定位ejb。首先,它必须得到一个到home接口的reference。然后,客户端可以使用该接口,调用一个 create() 方法来得到服务器上运行的某个bean实例的句柄;最后,客户端可以使用该句柄在bean中调用方法。
了解 ejb后,让我们再来看jsp。
javaserver pages (jsps)
我们中间可能已经有许多人已经熟悉microsoft的active server pages (asp)技术了。jsp和asp相对应的,但更具有平台对立性。他们被设计用以帮助web内容开发人员创建动态网页,并且只需要相对较少的代码。 即使web设计师不懂得如何编程也可以使用jsp,因为jsp应用是很方便的。 jsp页面由html代码和嵌入其中的java代码所组成。服务器在页面被客户端所请求以后对这些java代码进行处理,然后将生成的html页面返回给客户端的浏览器。
下面我们来看一个jsp的简单实例。它只显示了服务器的当前日期和时间。虽然,对语法的具体解释已经超出了本文的范围,但我们还是可以很直观地看到,java代码被放在符号的中间,而java的表达式则放在符号之间。
date jsp sample
the current date is .
您可能有时候听说过jhtml。这是jsp以前的一种较老的标准。weblogic服务器既可支持jsp,又可支持jhtml。请注意,在缺省状况下,jsp在weblogic服务器中并没有处于有效状态。要使之有效,你可以编辑weblogic.properties文件。如果web服务器还没有处于有效状态,则要先使之有效。servlet的情况和jsp是一样的。
下面是: java servlets
java servlets
servlet提供的功能大多与jsp类似,不过实现的方式不同。jsp通常是大多数html代码中嵌入少量的java代码,而servlets全部由java写成并且生成html。
servlet是一种小型的java程序,它扩展了web服务器的功能。作为一种服务器端的应用,当被请求时开始执行,这和cgi perl脚本很相似。servlets和cgi脚本的一个很大的区别是:每一个cgi在开始的时候都要求开始一个新的进程 — 而servlets是在servlet引擎中以分离的线程来运行的。因此servlets在可伸缩性上提供了很好的改进。
在开发servlets的时候,您常常需要扩展javax.servlet.http.httpservlet 类,并且override一些它的方法,其中包括:
service(): 作为dispatcher来实现命令-定义方法
doget(): 处理客户端的http get请求。
dopost(): 进行http post操作
其它的方法还包括处理不同类型的http请求 — 可以参考httpservlet api文档。
以上描述的是标准j2ee servlet api的各种方法。weblogic服务器提供了一个该api完整的实现途径。一旦你开发了一个servlet,你就可以在weblogic.properties 中加以注册并由此可以在weblogic服务器中对它进行配置。
通过java servlets,我们已经到达了j2ee主要技术的末尾了。但j2ee所提供的并不止于这些。下面的段落中我们将简要地看一下现存的一些技术,包括rmi, java idl和corba, jta, 以及xml,等等。
remote method invocation (rmi)
正如其名字所表示的那样,rmi协议是在远程对象上调用一些方法。它使用了连续序列方式在客户端和服务器端传递数据。rmi是一种被ejb使用的更下层的协议。
java idl/corba
在java idl的支持下,开发人员可以将java和corba集成在一起。 他们可以创建java对象并使之可在corba orb中展开, 或者他们还可以创建java类并作为和其它orb一起展开的corba对象的客户。后一种方法提供了另外一种途径,通过它java可以被用于将你的新的应用和legacy系统相集成。
java transaction architecture (jta)/java transaction service (jts)
jta定义了一种标准的api,应用系统由此可以存取各种事务监控。
jts是corba ots事务监控的基本的实现。jts规定了事务管理器的实现方式。该事务管理器是在高层支持java transaction api (jta)规范,并且在较底层实现omg ots specification的java映像。jts事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。
javamail and javabeans activation framework
javamail是用于存取邮件服务器的api,它提供了一套邮件服务器的抽象类。不仅支持smtp服务器,也支持imap服务器。
javamail利用javabeans activation framework (jaf)来处理mime-编码的邮件附件。mime的字节流可以被转换成java对象,或者转换自java对象。由此大多数应用都可以不需要直接使用jaf。
java messaging service (jms)
jms是用于和面向消息的中间件相互通信的应用程序接口(api)。它既支持点对点的域,有支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。jms还提供了另一种方式来对您的应用与legacy backend系统相集成。
extensible markup language (xml)
xml是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。xml的发展和java是相互独立的,但是,它和java具有的相同目标正是平台独立性。通过将java和xml的组合,您可以得到一个完美的具有平台独立性的解决方案。目前正有许多不同的公司在为java和xml的组合而努力。如果要了解更多的这方面的信息,可以访问sun的java-xml页面,或者ibm developerworks的xml zone。