一、内容简介
Java EE的13种核心技术: JDBC、JNDI、EJB、RMI、JSP、JavaServlet、XML、JMS、Java IDL、JTS、JTA、JavaMail和JAF。
Java最初在浏览器和客户端机器中粉墨登场,当时很多人质疑它是否适合做服务器端的开发。现在随着对JavaEE第三方支持的增多,Java被广泛接纳为开发企业级服务器端解决方案的首选平台之一。
JavaEE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持。在本文中我将解释支撑JavaEE的13种核心技术:JDBC、JNDI、EJB、RMI、JSP、Java Servlet、 XML、JMS、JavaIDL、JTS、JTA、JavaMail和JAF,同时还将描述在何时、何处需要使用这些技术。当然我还要介绍这些不同技术之间如何交互。
此外,为了让您更好地感受JavaEE的真实应用,我将在WebLogic应用服务器环境下来介绍这些技术。不论对于WebLogic应用服务器和JavaEE的新手,还是那些想了解Java EE能带来什么好处的项目管理者和系统分析员,相信本文一定很有参考价值。
二、宏观印象: 分布式结构和Java EE
后台系统集成:同后台系统的集成可能需要用到许多不同的技术,至于何种最佳,需要根据后台系统的特征而定。
JavaEE提供了一个框架(一套标准API)用于开发分布式结构的应用,这个框架的实际实现留给了第三方厂商。部分厂商只是专注于整个JavaEE架构中的的特定组件,如Apache的Tomcat提供了对JSP和Servlet的支持,BEA系统公司则通过其WebLogic应用服务器产品为整个JavaEE规范提供了一个较为完整的实现。
四、Java EE技术
在JDBC出现的初期,JDBC-ODBC桥显然是非常有实用意义的,通过JDBC-ODBC桥,开发人员可用JDBC来存取ODBC数据源。不足的是需要在客户端安装ODBC驱动程序,换句话说,必须安装Windows的某个版本。使用这一类型要牺牲JDBC的平台独立性。另外ODBC驱动程序还需具有客户端控制权限。
JDBC本地驱动程序桥提供了一种JDBC接口,它建立在本地数据库驱动程序的顶层,而不需要ODBC。JDBC驱动程序将对数据库的API从标准的JDBC调用转换为本地调用,使用此类型要牺牲JDBC的平台独立性,还要求在客户端安装客户端数据库驱动程序。
通过使用一个纯Java数据库驱动程序来执行数据库的直接访问。此类型实际上在客户端实现了2层结构。要在N-层结构中应用,一个更好的做法是编写一个EJB,让它包含存取代码并提供一个对客户端具有数据库独立性的服务。
在这个例子中假定已在Cloudscape中建立了一个PhoneBook数据库,且包含一个表名为CONTACT_TABLE的表,它带有2个字段:NAME和PHONE。开始时先装载Cloudscape JDBCdriver,并请求driver manager得到一个对PhoneBookCloudscape数据库的连接。通过这一连接,可构造一个Statement对象并用它来执行一个简单的SQL查询。最后用循环来遍历结果集的所有数据,并用标准输出将NAME和PHONE字段的内容进行输出。
import java.sql.*;
public class JDBCExample{
Class.forName("COM.cloudscape.core.JDBCDriver");
Connection conn = DriverManager.getConnection("jdbc:cloudscapehoneBook");
Statement stmt = conn.createStatement();
String sql = "SELECT name, phone FROM CONTACT_TABLE ORDER BYname";
ResultSet resultSet = stmt.executeQuery(sql);
String name, phone;
while (resultSet.next()){
}
// Handle exception here
e.printStackTrace();
}
以上实例其实是很基本的,可能有些微不足道,它假定了一个2层结构。在一个多层的企业级应用中,更大的可能是在客户端和一个EJB进行通信,该EJB将建立数据库连接。为了实现和改进可伸缩性和系统性能,WebLogic服务器提供了对连接缓冲池Connectionpool的支持。
Connectionpool减少了建立和释放数据库连接的消耗。在系统启动以后即可建立这样的缓冲池,此后如故再有对数据库的请求,WebLogic服务器可很简单地从缓冲池中取出数据。数据缓冲池可在WebLogic服务器的weblogic.properties文件中进行定义(可参考weblogic.properties文件中的例子,WebLogic服务器的文档中还有更详细的参考信息)。
2. Java Naming and Directory Interface (JNDI)
JNDIAPI被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源,如DNS和LDAP、本地文件系统,后者在应用服务器中的对象。
JNDI中,在目录结构中的每一结点称为context。每一个JNDI名字都是相对于context的。这里没有绝对名字的概念存在。对一个应用来说,它可通过使用InitialContext 类来得到其第一个context:
Context ctx = new InitialContext();
MyEJBHome home = ctx.lookup( "myApp.myEJB" );
从context中移去对象。
创建或删除子一级的context。
EJB规范定义了3中基本的bean类型,这里先不谈Message-driven Bean:
Stateless sessionbeans:提供某种单一服务而不维持任何状态,在服务器故障发生时无法继续存在,生命期相对较短。如它可能被用于执行温度转换计算。
Stateful sessionbean:提供了与客户端的会话交互,可存储状态从而代表一个客户。典型例子是购物车。不过在服务器故障时无法继续生存,生命期相对较短。每一个实例只用于一个单个的线程。
Entity beans:提供了一致性数据的表示,通常存放在数据库中,在服务器故障发生后能继续存在。多用户情况下可使用EJB来表示相同的数据,EntityEJB的一个典型例子是客户的帐号信息。
尽管有以上的区别,所有的EJB还是有许多的共同之处。它们都处理homeinterface。它定义了一个客户端是如何创建与消亡EJB的。可在bean中对定义了客户端方法的远程接口进行调用;bean类则执行了主要的商务逻辑。
一旦EJB被发布,客户端就可以使用它的JNDI名字来定位EJB。首先它必须得到一个到home接口的reference。然后客户端可使用该接口,调用一个create()方法来得到服务器上运行的某个bean实例的句柄;最后客户端可以使用该句柄在bean中调用方法。
我们中可能已有许多人熟悉Microsoft的ASP技术。JSP和ASP相对应,但更具平台独立性。他们被设计用以帮助Web内容开发人员创建动态网页,且只需要相对较少的代码。即使Web设计师不懂得如何编程也可使用JSP,因为JSP应用是很方便的。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。
5. Java Servlet
service():作为dispatcher来实现命令-定义方法
doGet(): 处理客户端的HTTP GET请求。
在远程对象上调用一些方法,使用连续序列方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更下层的协议。
在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。 他们可创建Java对象并使之可在CORBAORB中展开,或可创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将你的新的应用和legacy系统相集成。
JTA定义了一种标准的API,应用系统由此可存取各种事务监控。
JTS是CORBA OTS事务监控的基本的实现,JTS规定了事务管理器的实现方式。该事务管理器是在高层支持JavaTransaction API (JTA)规范,且在较底层实现OMG OTSspecification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用及通信资源管理器提供了事务服务。
我们已经关注了在您开始JavaEE进行工作时最有可能遇到的各类技术:JDBC、JNDI、EJB、JSP和servlet。我们也为您提供了一些尚未常见的JavaEE技术的背景知识。不管您是一名开发人员、商务应用分析师或项目经理,都应对JavaEE和WebLogic服务器所能提供给我们的企业级应用所带来的意义有一个更好的认识。