﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小阁飞空 一池碧映垂杨路 绛云深处 听尽潇潇雨-文章分类-J2EE</title><link>http://www.blogjava.net/xiaoxiaoyupku/category/1680.html</link><description>At times , people will simply not come through for you in the way you need.Forgive them and move on.</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 07:37:02 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 07:37:02 GMT</pubDate><ttl>60</ttl><item><title>j2ee学习笔记</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/6102.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Tue, 14 Jun 2005 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/6102.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/6102.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/6102.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/6102.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/6102.html</trackback:ping><description><![CDATA[<FONT color=#000000>一 初始j2ee<BR>&nbsp;&nbsp;&nbsp; j2ee是一钟基于java的开发标准,一般由多层结构使其企业组件能够灵活部署.j2ee应用程序由组件构成, J2EE规范定义了下面一些组件,<BR></FONT><FONT color=#000000>&nbsp; 1) 组件：一个应用级的软件单元<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J2SE拥有JavaBeans；J2EE拥有EJB（Enterprise JavaBeans）<BR>&nbsp;&nbsp; 2) 系统级实体容器<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供：运行支持、生命周期管理、安全、部署、线程<BR>&nbsp;&nbsp; 3) applet和客户应用程序<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户端组件执行自己的Java虚拟机（JVM）<BR>&nbsp;&nbsp; 4) WEB组件：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 软件实体，响应请求<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通常为基于WEB的应用提供用户接口<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J2EE的两种组件：◎Servlets ◎JavaServer Pages(JSP)<BR>二 j2ee容器<BR>&nbsp;&nbsp;&nbsp;&nbsp; 容器（Container）是组件和支持组件功能的底层特定平台（如数据库）之间的接口。在运行Web组件、企业Bean或者J2EE应用程序客户端之前，你必须将它们装配到一个J2EE应用程序中，并部署它们到容器中。<BR></FONT>
<P align=center><FONT color=#000000><IMG height=237 alt=fig-5.jpg src="http://www.blogjava.net/images/blogjava_net/xiaoxiaoyupku/j2ee/fig-5.jpg" width=450 border=0><BR><BR></FONT></P>
<P><FONT color=#000000>J2EE server（J2EE服务器）</FONT></P>
<P><FONT color=#000000>J2EE产品的运行时服务部分。一个J2EE服务器提供EJB容器（EJB Container）和Web容器（Web Container）。 </FONT></P>
<P><FONT color=#000000>EJB容器,</FONT><FONT color=#000000>Web容器,</FONT><FONT color=#000000>Application client container（应用程序客户端容器）</FONT><FONT color=#000000>&nbsp;,</FONT><FONT color=#000000>Applet container（Applet容器）</FONT></P>
<P>
<P><FONT color=#000000></FONT></P><FONT color=#000000>三 EJB的体系结构： <BR>　　EJB的上层的分布式应用程序是基于对象组件模型的，低层的事务服务用了API技术。EJB技术简化了用JAVA语言编写的企业应用系统的开发，配置，和执行。EJB的体系结构的规范由Sun Microsystems公司制定。Inprise的EJB容器是基于1.1版的规范。 <BR>　　EJB技术定义了一组可重用的组件：Enterprise Beans。你可以利用这些组件，象搭积木一样的建立你的分布式应用程序。当你把代码写好之后，这些组件就被组合到特定的文件中去。每个文件有一个或多个Enterprise Beans，在加上一些配置参数。最后，这些Enterprise Beans被配置到一个装了EJB容器的平台上。客户能够通过这些Beans的home接口，定位到某个Beans，并产生这个beans的一个实例。这样，客户就能够调用Beans的应用方法和远程接口。 <BR>　　EJB服务器作为容器和低层平台的桥梁管理着EJB容器和函数。它向EJB容器提供了访问系统服务的能力。例如：数据库的管理和事务的管理，或者对于其它的Enterprise的应用服务器。 <BR>　　所有的EJB 实例都运行在EJB容器中。容器提供了系统级的服务，控制了EJB的生命周期。因为容器掌握了绝大多数系统级的issues(呵呵，不知道怎么翻译)。Enterprise Beans 的开发者不需要应用逻辑考虑进来。通常来说，EJB容器掌握了以下的系统级issues. <BR>　　1、Security--配置描述器（The Deployment descriptor）定义了客户能够访问的不同的应用函数。容器通过只允许授权的客户访问这些函数来达到这个效果。 <BR>　　2、Remote Connectivity--容器为远程链接管理着低层的通信issues，而且对Enterprise Beas的开发者和客户都隐藏了通信issues.Enterprise Beans的开发者在编写应用方法的时候，就象是在条用本地的平台一样的。客户也不清楚他们调用的方法可能是在远程被处理的。 <BR>　　3、Life Cycle managment--客户简单的创建一个Enterprise beans的实例，并通常取消一个实例。而容器管理着Enterprise Beans的实例，使Enterprise Beans实现最大的效能和内存利用率。容器能够这样来激活和去活Enterprise Beans，保持众多客户共享的实例池。等等。 <BR>　　4、Trasction management—配置描述器定义了Enterprise beans 的事务处理的需求。容器管理着那些管理分布式事务处理的复杂的issues。这些事务可能要在不同的平台之间更新数据库。容器使这些事务之间互相独立，互不干扰。保证所有的更新数据库都是成功发生的，否者，就回滚到事务处理之前的状态。 <BR>Enterprise Beans 组件： <BR>Enterprise Beans 是基于分布式事务处理的企业级应用程序的组件。所有的Enterprise beans都有如下的特点： <BR>Enterprise beans包含了处理企业数据的应用逻辑。Enterprise beans provider定义了Enterprise beans的客户界面（Enterprise beans 的远程界面）。这样的界面不受容器和服务器的影响。于是，当一个Enterprise beans被集合到一个应用程序中去时，不用更改代码和重新编译。Enterprise beans能够被定制各种系统级的服务，例如安全和事务处理的特性，都不是属于Enterprise beans class的。而是由配置和组装应用程序的工具来实现。有两种类型的Enterprise beans: Session beans 和 entity beans.(还有一种message driven bean,这里暂时不加讨论) <BR>Session beans: <BR>　　Session beans 是一种作为单个的client执行的对象。作为对远程的任务请求的相应，容器产生一个Session beans 的实例。一个Session beans有一个client.从某种程度上来说，一个Session bean 对于服务器来说就代表了它的那个client.Session beans 也能用于事务，它能够更新共享的数据，但它不直接描绘这些共享的数据。 <BR>　　Session beans 的生命周期是相对较短的。典型的是，只有当client保持会话的时候，Session beans 才是活着的。一旦client退出了，Session beans 就不再与client相联系了。Session beans被看成是瞬时的，因为如果容器崩溃了，那么client必须重新建立一个新的Session对象来继续会话。 <BR>　　一个Session bean典型的声明了与client的互操作或者会话。也就是说，Session bean了在客户会话期间，通过方法的调用，掌握Client的信息。一个具有状态的Session bean称为有状态的Session bean.当client终止与Session beans互操作的时候.会话终止了，而且，bean 也不再拥有状态值。 <BR>　　一个Session bean也可能是一个无状态的 session bean.无状态的Session beans并不掌握它的客户的信息或者状态。Client能够调用beans的方法来完成一些操作。但是，beans只是在方法调用的时候才知道client的参数变量。当方法调用完成以后，beans并不继续保持这些参数变量。这样，所有的无状态的session beans的实例都是相同的，除非它正在方法调用期间。这样，无状态的Session beans就能够支持多个client.容器能够声明一个无状态的Session beans.能够将任何Session beans指定给任何client. <BR>Entity Beans: <BR>　　Entity Beans对数据库中的数据提供了一种对象的视图。例如：一个Entity bean能够模拟数据库表中一行相关的数据。多个client能够共享访问同一个Entity bean.多个client也能够同时的访问同一个Entity bean.Entity beans通过事务的上下文来访问或更新下层的数据。这样，数据的完整性就能够被保证。 <BR>　　Entity Beans能存活相对教长的时间，并且状态是持续的。只要数据库中的数据存在，Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了，Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。如果由容器控制着保证 Entity beans持续的issus。如果由Beans自己管理，就必须写Entity beans的代码，包括访问数据库的调用。 <BR>　　Entity Beans是由主键（primary key 一种唯一的对象标识符）标识的。通常，主键与标识数据库中的一块数据，例如一个表中的一行，的主键是相同的。主键是client能够定位特定的数据块。 <BR>EJB roles: <BR>　　EJB体系结构通过把编程的过程分为6个不同的角色而使开发复杂的的应用系统变的简单。6个不同的角色，每个都有特定的任务。6个角色包括下层的服务，应用程序的开发，配置和操作说明（issues） <BR>　　EJB体系结构能够简化应用程序开发人员的工作。在EJB体系结构中，容器和代理服务承担了很多在其他环境中又程序设计人员承担的工作。这样的代理提供了很多原来需要程序设计人员编写代码的系统级的服务。 <BR>Infrastructure roles;（下层构造角色） <BR>　　EJB Server Providor服务提供者是典型的提供分布式低层服务的代理。EJB服务提供者提供了一个分布式应用程序开发者需要的平台和设施。也提供了分布式程序的运行时环境。 <BR>　　EJB Container Providor 容器提供者是分布式系统，事务处理，安全方面的专家容器提供者提供了一个EJB的配置工具，和这些配置实例的运行时支持。 <BR>　　一个容器对一个或多个EJB来说，是一个运行时系统。它将Enterprise Beans和EJB服务，包括事务服务，安全服务，分布式网络管理等胶合在一起。容器是既是桓龆ㄖ频拇牒投蕴囟ǖ?Enterprise beans产生详细代码的工具。容器也提供了一个配置Enterprisebeans的工具和管理监视应用程序的方法。 <BR></FONT>
<P></P><img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/6102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2005-06-14 11:16 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/6102.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE的13种核心技术</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/6036.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Mon, 13 Jun 2005 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/6036.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/6036.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/6036.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/6036.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/6036.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J2EE的13种核心技术：JDBC, JNDI, EJB, RMI, JSP, Java servlets, XML, JMS, Java IDL, JTS, JTA, JavaMail 和 JAF.<BR>&nbsp;&nbsp;&nbsp; 在早期的c/s应用模式下,客户端程序负责数据访问,实现业务逻辑,用合适的样式显示结果,弹出预先设定的用户界面,接收用户输入等.c/s结构通常在第一次部署的时候比较容易,但难于升级和改进,而且经常基于某种专有的协议,通常是某种数据库协议,它使得重用业务逻辑和界面逻辑非常困难.更重要的是在web时代,二层化应用通常不能体现出很好的伸缩性,因此很难适应internet的要求.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sun设计J2EE的部分起因就是想解决二层化结构的缺陷。于是，J2EE定义了一套标准来简化N层企业级应用的开发。它定义了一套标准化的组件，并为这些组件提供了完整的服务。J2EE还自动为应用程序处理了很多实现细节，如安全、多线程等。<BR>　　用J2EE开发N层应用包括将二层化结构中的不同层面切分成许多层。一个N层化应用A能够为以下的每种服务提供一个分开的层：<BR>　　显示：在一个典型的Web应用中，客户端机器上运行的浏览器负责实现用户界面。<BR>　　动态生成显示: 尽管浏览器可以完成某些动态内容显示，但为了兼容不同的浏览器，这些动态生成工作应该放在Web服务器端进行，使用JSP、Servlets，或者XML（可扩展标记语言）和（可扩展样式表语言）。<BR>　　业务逻辑：业务逻辑适合用Session EJBs（后面将介绍）来实现。<BR>　　数据访问：数据访问适合用Entity EJBs（后面将介绍）和JDBC来实现。<BR>　　后台系统集成: 同后台系统的集成可能需要用到许多不同的技术，至于何种最佳需要根据后台系统的特征而定。<BR>　　您可能开始诧异：为什么有这么多的层？事实上，多层方式可以使企业级应用具有很强的伸缩性，它允许每层专注于特定的角色。例如，让Web服务器负责提供页面，应用服务器处理应用逻辑，而数据库服务器提供数据库服务。<BR>　　由于J2EE建立在Java2平台标准版（J2SE）的基础上，所以具备了J2SE的所有优点和功能。包括“编写一次，到处可用”的可移植性、通过JDBC访问数据库、同原有企业资源进行交互的CORBA技术，以及一个经过验证的安全模型。在这些基础上，J2EE又增加了对EJB（企业级Java组件）、Java servlets、Java服务器页面（JSPs）和XML技术的支持。<BR><BR><STRONG>分布式结构与WebLogic应用服务器<BR><BR></STRONG>　　J2EE提供了一个框架--一套标准API--用于开发分布式结构的应用，这个框架的实际实现留给了第三方厂商。部分厂商只是专注于整个J2EE架构中的的特定组件，例如Apache的Tomcat提供了对JSP和servlets的支持，BEA系统公司则通过其WebLogic应用服务器产品为整个J2EE规范提供了一个较为完整的实现。<BR>　　WebLogic服务器已使建立和部署伸缩性较好的分布式应用的过程大为简化。WebLogic和J2EE代你处理了大量常规的编程任务，包括提供事务服务、安全领域、可靠的消息、名字和目录服务、数据库访问和连接池、线程池、负载平衡和容错处理等。<BR>　　通过以一种标准、易用的方式提供这些公共服务，象WebLogic服务器这样的产品造就了具有更好伸缩性和可维护性的应用系统，使其为大量的用户提供了增长的可用性。<BR><BR>　　<STRONG>J2EE技术<BR></STRONG><BR>　　在接下来的部分里，我们将描述构成J2EE的各种技术，并且了解WebLogic服务器是如何在一个分布式应用中对它们进行支持的。最常用的J2EE技术应该是JDBC、JNDI、EJB、JSP和servlets，对这些我们将作更仔细的考察。<BR>　　Java Database Connectivity (JDBC)<BR>　　JDBC API以一种统一的方式来对各种各样的数据库进行存取。和ODBC一样，JDBC为开发人员隐藏了不同数据库的不同特性。另外，由于JDBC建立在Java的基础上,因此还提供了数据库存取的平台独立性。<BR>　　JDBC定义了4种不同的驱动程序，现分述如下：<BR>　　类型 1: JDBC-ODBC Bridge<BR>　　在JDBC出现的初期，JDBC-ODBC桥显然是非常有实用意义的，通过JDBC-ODBC桥，开发人员可以使用JDBC来存取ODBC数据源。不足的是，他需要在客户端安装ODBC驱动程序，换句话说，必须安装Microsoft Windows的某个版本。使用这一类型你需要牺牲JDBC的平台独立性。另外，ODBC驱动程序还需要具有客户端的控制权限。<BR>　　类型 2: JDBC-native driver bridge<BR>　　JDBC本地驱动程序桥提供了一种JDBC接口，它建立在本地数据库驱动程序的顶层，而不需要使用ODBC。 JDBC驱动程序将对数据库的API从标准的JDBC调用转换为本地调用。使用此类型需要牺牲JDBC的平台独立性，还要求在客户端安装一些本地代码。<BR>　　类型 3: JDBC-network bridge<BR>　　JDBC网络桥驱动程序不再需要客户端数据库驱动程序。它使用网络上的中间服务器来存取数据库。这种应用使得以下技术的实现有了可能，这些技术包括负载均衡、连接缓冲池和数据缓存等。由于第3种类型往往只需要相对更少的下载时间，具有平台独立性，而且不需要在客户端安装并取得控制权，所以很适合于Internet上的应用。<BR>　　类型 4: Pure Java driver<BR>　　第4种类型通过使用一个纯Java数据库驱动程序来执行数据库的直接访问。此类型实际上在客户端实现了2层结构。要在N-层结构中应用，一个更好的做法是编写一个EJB，让它包含存取代码并提供一个对客户端具有数据库独立性的服务。<BR>　　WebLogic服务器为一些通常的数据库提供了JDBC驱动程序∣racle, Sybase, Microsoft SQL Server以及Informix。它也带有一种JDBC驱动程序用于Cloudscape，这是一种纯Java的DBMS，WebLogic服务器中带有该数据库的评估版本。<BR>　　以下让我们看一个实例。<BR>　　JDBC实例<BR>　　在这个例子中我们假定你已经在Cloudscape中建立了一个PhoneBook数据库，并且包含一个表，名为 CONTACT_TABLE ，它带有2个字段：NAME 和 PHONE。 开始的时候先装载Cloudscape JDBC driver，并请求 driver manager得到一个对PhoneBook Cloudscape数据库的连接。通过这一连接，我们可以构造一个 Statement 对象并用它来执行一个简单的SQL查询。最后，用循环来遍历结果集的所有数据，并用标准输出将NAME和PHONE字段的内容进行输出。<BR>　　import java.sql.*;<BR>　　public class JDBCExample<BR>　　{<BR>　　public static void main( String args[] )<BR>　　{<BR>　　try<BR>　　{<BR>　　Class.forName("COM.cloudscape.core.JDBCDriver");<BR>　　Connection conn = DriverManager.getConnection("jdbc:cloudscape:PhoneBook");<BR>　　Statement stmt = conn.createStatement();<BR>　　String sql = "SELECT name, phone FROM CONTACT_TABLE ORDER BY name";<BR>　　ResultSet resultSet = stmt.executeQuery( sql );<BR>　　String name;<BR>　　String phone;<BR>　　while ( resultSet.next() )<BR>　　{<BR>　　name = resultSet.getString(1).trim();<BR>　　phone = resultSet.getString(2).trim();<BR>　　System.out.println( name + ", " + phone );<BR>　　}<BR>　　}<BR>　　catch ( Exception e )<BR>　　{<BR>　　// Handle exception here<BR>　　e.printStackTrace();<BR>　　}<BR>　　}<BR>　　}<BR><BR>　　OK。接着我们来看一看JDBC是如何在企业应用中的进行使用。<BR>　　JDBC在企业级应用中的应用<BR>　　以上实例其实是很基本的，可能有些微不足道。它假定了一个2层结构。在一个多层的企业级应用中，更大的可能是在客户端和一个EJB进行通信，该EJB将建立数据库连接。为了实现和改进可伸缩性和系统性能， WebLogic服务器提供了对连接缓冲池connection pool的支持。<BR>　　Connection pool减少了建立和释放数据库连接的消耗。在系统启动以后即可建立这样的缓冲池，此后如故再有对数据库的请求，WebLogic服务器可以很简单地从缓冲池中取出数据。数据缓冲池可以在WebLogic服务器的 weblogic.properties 文件中进行定义。(可参考 weblogic.properties 文件中的例子，WebLogic服务器的文档中还有更详细的参考信息)<BR>　　在企业级应用的另一个常见的数据库特性是事务处理。事务是一组申明statement，它们必须做为同一个statement来处理以保证数据完整性。缺省情况下JDBC使用 auto-commit 事务模式。这可以通过使用Connection类的 setAutoCommit() 方法来实现。<BR>　　现在我们已经对JDBC有了一些认识，下面该转向JNDI了.<BR>Java Naming and Directory Interface (JNDI)<BR>　　JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP，本地文件系统，后者在应用服务器中的对象。<BR>　　在JNDI中，在目录结构中的每一个结点称为context。每一个JNDI名字都是相对于context的。这里没有绝对名字的概念存在。对一个应用来说，它可以通过使用 InitialContext 类来得到其第一个context:<BR>　　Context ctx = new InitialContext();<BR>　　应用可以通过这个初始化的context经有这个目录树来定位它所需要的资源或对象。例如，假设你在Weblogic服务器中展开了一个EJB并将home接口绑定到名字 myApp.myEJB ，那么该EJB的某个客户在取得一个初始化context以后，可以通过以下语句定位home接口：<BR>　　MyEJBHome home = ctx.lookup( "myApp.myEJB" );<BR>　　在这个例子中，一旦你有了对被请求对象的参考，EJB的home接口就可以在它上面调用方法。我们将在下面的"Enterprise Java Beans"章节中做更多的介绍。<BR>　　以上关于JNDI的讨论只是冰山之一角而已。如果要更进一步地在context中查找对象，JNDI也提供了一些方法来进行以下操作：　<BR>　　将一个对象插入或绑定到context。这在你展开一个EJB的时候是很有效的。<BR>　　从context中移去对象。<BR>　　列出context中的所有对象。<BR>　　创建或删除子一级的context。<BR>　　接下来，我们要开始关注EJB了。<BR>　　Enterprise Java Beans (EJB)<BR>　　J2EE技术之所以赢得某体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实施分布式商务逻辑，由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务，例如目录服务、事务管理、安全性、资源缓冲池以及容错性。<BR>　　EJB规范定义了3中基本的bean类型:<BR>　　Stateless session beans: 提供某种单一的服务，不维持任何状态，在服务器故障发生时无法继续存在，生命期相对较短。例如，一个stateless session bean可能被用于执行温度转换计算。<BR>　　Stateful session bean: T提供了与客户端的会话交互，可以存储状态从而代表一个客户。典型例子是购物车。Stateful session bean在服务器故障时无法继续生存，生命气相对较短。每一个实例只用于一个单个的线程。<BR>　　Entity beans: 提供了一致性数据的表示-- 通常存放在数据库中 -- 在服务器故障发生后能继续存在。多用户情况下可以使用EJB来表示相同的数据。entity EJB的一个典型例子是客户的帐号信息。<BR>　　尽管有以上的区别，所有的EJB还是有许多的共同之处。它们都处理home interface。它定义了一个客户端是如何创建与消亡EJB的。可以在bean中对定义了客户端方法的远程接口进行调用；bean类则执行了主要的商务逻辑。<BR>　　描述EJB的开发已经超出了本文的范围。但是，如果一个EJB已经被开发了或者从第三方进行了购买，它就必须在应用服务器中进行发布。WebLogic Server 5.1带有一个EJB Deployer Tool来协助处理EJB的发布。当你使用EJB Deployer Tool的时候，你要定义客户端所用的JNDI名字来定位EJB。Deployer Tool将生成wrapper类来处理和容器的通信以及在一个jar文件中把被请求的Java类绑定在一起。<BR>　　一旦EJB被发布，客户端就可以使用它的JNDI名字来定位EJB。首先，它必须得到一个到home接口的reference。然后，客户端可以使用该接口，调用一个 create() 方法来得到服务器上运行的某个bean实例的句柄；最后，客户端可以使用该句柄在bean中调用方法。<BR>　　了解 EJB后，让我们再来看JSP。<BR>　　JavaServer Pages (JSPs)<BR>　　我们中间可能已经有许多人已经熟悉Microsoft的Active Server Pages (ASP)技术了。JSP和ASP相对应的，但更具有平台对立性。他们被设计用以帮助Web内容开发人员创建动态网页，并且只需要相对较少的代码。 即使Web设计师不懂得如何编程也可以使用JSP，因为JSP应用是很方便的。 JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理，然后将生成的HTML页面返回给客户端的浏览器。<BR>　　下面我们来看一个JSP的简单实例。它只显示了服务器的当前日期和时间。虽然，对语法的具体解释已经超出了本文的范围，但我们还是可以很直观地看到，Java代码被放在符号的中间，而Java的表达式则放在符号之间。<BR>　　Date JSP sample<BR>　　The current date is .<BR>　　您可能有时候听说过JHTML。这是JSP以前的一种较老的标准。WebLogic服务器既可支持JSP，又可支持JHTML。请注意，在缺省状况下，JSP在WebLogic服务器中并没有处于有效状态。要使之有效，你可以编辑weblogic.properties文件。如果Web服务器还没有处于有效状态，则要先使之有效。Servlet的情况和JSP是一样的。<BR>　　下面是: Java servlets<BR>　　Java servlets<BR>　　servlet提供的功能大多与JSP类似，不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码，而servlets全部由Java写成并且生成HTML。<BR>　　servlet是一种小型的Java程序，它扩展了Web服务器的功能。作为一种服务器端的应用，当被请求时开始执行，这和CGI Perl脚本很相似。Servlets和CGI脚本的一个很大的区别是：每一个CGI在开始的时候都要求开始一个新的进程 -- 而servlets是在servlet引擎中以分离的线程来运行的。因此servlets在可伸缩性上提供了很好的改进。<BR>　　在开发servlets的时候，您常常需要扩展javax.servlet.http.HttpServlet 类，并且override一些它的方法，其中包括：<BR>　　service(): 作为dispatcher来实现命令-定义方法<BR>　　doGet(): 处理客户端的HTTP GET请求。<BR>　　doPost(): 进行HTTP POST操作<BR>　　其它的方法还包括处理不同类型的HTTP请求 -- 可以参考HttpServlet API文档。<BR>　　以上描述的是标准J2EE Servlet API的各种方法。WebLogic服务器提供了一个该API完整的实现途径。一旦你开发了一个servlet，你就可以在weblogic.properties 中加以注册并由此可以在WebLogic服务器中对它进行配置。<BR>　　通过Java servlets,我们已经到达了J2EE主要技术的末尾了。但J2EE所提供的并不止于这些。下面的段落中我们将简要地看一下现存的一些技术，包括RMI, Java IDL和CORBA, JTA, 以及XML，等等。<BR>　　Remote Method Invocation (RMI)<BR>　　正如其名字所表示的那样，RMI协议是在远程对象上调用一些方法。它使用了连续序列方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更下层的协议。<BR>　　Java IDL/CORBA<BR>　　在Java IDL的支持下，开发人员可以将Java和CORBA集成在一起。 他们可以创建Java对象并使之可在CORBA ORB中展开, 或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径，通过它Java可以被用于将你的新的应用和legacy系统相集成。<BR>　　Java Transaction Architecture (JTA)/Java Transaction Service (JTS)<BR>　　JTA定义了一种标准的API，应用系统由此可以存取各种事务监控。<BR>　　JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Transaction API (JTA)规范，并且在较底层实现OMG OTS specification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。<BR>　　JavaMail and JavaBeans Activation Framework<BR>　　JavaMail是用于存取邮件服务器的API，它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器，也支持IMAP服务器。<BR>　　JavaMail利用JavaBeans Activation Framework (JAF)来处理MIME-编码的邮件附件。MIME的字节流可以被转换成Java对象，或者转换自Java对象。由此大多数应用都可以不需要直接使用JAF。<BR>　　Java Messaging Service (JMS)<BR>　　JMS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域，有支持发布/订阅(publish/subscribe)类型的域，并且提供对下列类型的支持：经认可的消息传递,事务型消息的传递，一致性消息和具有持久性的订阅者支持。JMS还提供了另一种方式来对您的应用与legacy backend系统相集成。<BR>　　Extensible Markup Language (XML)<BR>　　XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。XML的发展和Java是相互独立的，但是，它和Java具有的相同目标正是平台独立性。通过将Java和XML的组合，您可以得到一个完美的具有平台独立性的解决方案。目前正有许多不同的公司在为Java和XML的组合而努力。如果要了解更多的这方面的信息，可以访问Sun的Java-XML页面，或者IBM developerWorks的XML Zone。 </P>
<DIV style="FONT-SIZE: 14px; LINE-HEIGHT: 25px"><STRONG>作者Blog：</STRONG><A id=ArticleContent1_ArticleContent1_AuthorBlogLink href="http://blog.csdn.net/feng_sundy/" target=_blank>http://blog.csdn.net/feng_sundy/</A></DIV><img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/6036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2005-06-13 14:03 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/6036.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE体系结构简单介绍--引自作者Blog：http://blog.csdn.net/dazern/</title><link>http://www.blogjava.net/xiaoxiaoyupku/articles/6035.html</link><dc:creator>潇潇雨</dc:creator><author>潇潇雨</author><pubDate>Mon, 13 Jun 2005 05:32:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiaoyupku/articles/6035.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiaoyupku/comments/6035.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiaoyupku/articles/6035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiaoyupku/comments/commentRss/6035.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiaoyupku/services/trackbacks/6035.html</trackback:ping><description><![CDATA[<FONT size=2><FONT face=宋体><STRONG>2005年6月13日13:34:35<BR>一、J2EE提出的背景<BR></STRONG>1、&nbsp;&nbsp;&nbsp;&nbsp;企业级应用框架的需求<BR>在许多企业级应用中，例如数据库连接、邮件服务、事务处理等都是一些<STRONG><FONT color=#a52a2a>通用企业需求模块</FONT></STRONG>，这些模块如果每次再开发中都由开发人员来完成的话，将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务。这些服务性的软件系列同陈为中间件。<BR>2、&nbsp;&nbsp;&nbsp;&nbsp;<STRONG><FONT color=#a52a2a>为了通用必须要提出规范，不然无法达到通用<BR></FONT></STRONG>在上面的需求基础之上，许多公司都开发了自己的中间件，但其与用户的沟通都各有不同，从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实J2EE就是基于JAVA技术的一系列标准。<BR>注：中间件的解释&nbsp;中间件处在操作系统和更高一级应用程序之间。他充当的功能是：将应用程序运行环境与操作系统隔离，从而实现应用程序开发者不必为更多系统问题忧虑，而直接关注该应用程序在解决问题上的能力&nbsp;。我们后面说到的容器的概念就是中间件的一种。<BR><B>二、相关名词解释</B><BR><STRONG><FONT color=#a52a2a>容器：充当中间件的角色<BR></FONT></STRONG>WEB容器：给处于其中的应用程序组件（JSP，SERVLET）提供一个环境，使JSP,SERVLET直接跟容器中的环境变量接口交互，不必关注其它系统问题。主要有WEB服务器来实现。例如：TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB&nbsp;APPLICATION&nbsp;标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。<BR>EJB容器：Enterprise&nbsp;java&nbsp;bean&nbsp;容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器，马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。<BR>WEB容器和EJB容器在原理上是大体相同的，更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节，直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制，直接由容器来完成。<BR>RMI/IIOP:远程方法调用/internet对象请求中介协议，他们主要用于通过远程调用服务。例如，远程有一台计算机上运行一个程序，它提供股票分析服务，我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。<BR>JNDI:JAVA命名目录服务。主要提供的功能是：提供一个目录系统，让其它各地的应用程序在其上面留下自己的索引，从而满足快速查找和定位分布式应用程序的功能。<BR>JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。<BR>JAVAMAIL:JAVA邮件服务。提供邮件的存储、传输功能。他是JAVA编程中实现邮件功能的核心。相当MS中的EXCHANGE开发包。<BR>JTA：JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。<BR>JAF:JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。<BR>EAI:企业应用集成。是一种概念，从而牵涉到好多技术。J2EE技术是一种很好的集成实现。<BR><B>三、J2EE的优越性</B><BR>1、&nbsp;&nbsp;&nbsp;&nbsp;基于JAVA&nbsp;技术，平台无关性表现突出<BR>2、&nbsp;&nbsp;&nbsp;&nbsp;开放的标准，许多大型公司已经实现了对该规范支持的应用服务器。如BEA&nbsp;,IBM,ORACLE等。<BR>3、&nbsp;&nbsp;&nbsp;&nbsp;提供相当专业的通用软件服务。<BR>4、&nbsp;&nbsp;&nbsp;&nbsp;提供了一个优秀的企业级应用程序框架，对快速高质量开发打下基础<BR><BR><B>四、现状</B><BR>J2EE是由SUN&nbsp;公司开发的一套企业级应用规范。现在最高版本是1.4。支持J2EE的应用服务器有IBM&nbsp;WEBSPHERE&nbsp;APPLICATION&nbsp;SERVER,BEA&nbsp;WEBLOGIC&nbsp;SERVER,JBOSS,ORACLE&nbsp;APPLICATION&nbsp;SERVER,SUN&nbsp;ONE&nbsp;APPLICATION&nbsp;SERVER&nbsp;等。.<BR><BR></FONT></FONT>
<DIV style="FONT-SIZE: 14px; LINE-HEIGHT: 25px"><A id=ArticleContent1_ArticleContent1_AuthorBlogLink href="http://blog.csdn.net/dazern/" target=_blank></A>&nbsp;</DIV><img src ="http://www.blogjava.net/xiaoxiaoyupku/aggbug/6035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiaoyupku/" target="_blank">潇潇雨</a> 2005-06-13 13:32 <a href="http://www.blogjava.net/xiaoxiaoyupku/articles/6035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>