﻿<?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-edog-随笔分类-技术知识</title><link>http://www.blogjava.net/edog/category/32529.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 24 Jun 2008 04:47:14 GMT</lastBuildDate><pubDate>Tue, 24 Jun 2008 04:47:14 GMT</pubDate><ttl>60</ttl><item><title>什么是Java EE 5</title><link>http://www.blogjava.net/edog/archive/2008/06/24/210243.html</link><dc:creator>edog</dc:creator><author>edog</author><pubDate>Tue, 24 Jun 2008 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/edog/archive/2008/06/24/210243.html</guid><wfw:comment>http://www.blogjava.net/edog/comments/210243.html</wfw:comment><comments>http://www.blogjava.net/edog/archive/2008/06/24/210243.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edog/comments/commentRss/210243.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edog/services/trackbacks/210243.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-size: 9pt; font-family: 宋体" twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近，SUN的伙伴们(the folks at SUN)将J2EE 1.5改名为java EE 5，当然以前J2EE版本还是称为J2EE，之所以改名，目的还是让大家清楚J2EE只是Java企业应用，用我的话来说，J2EE就是Java在数据库服务器端的应用（见<a href="http://tech.163.com/05/1017/16/209E0Q870009159F.html" target="_blank"><span style="color: #0066cc; text-decoration: none; text-underline: none" twffan="done">初学者如何开发出一个高质量的J2EE<span style="color: #0066cc; text-decoration: none; text-underline: none" twffan="done">系统</span></a></span>）。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">看来，现在大多数人倾向于更加突出Java了，J2EE容易让初学者误解是独立于一套Java的技术方案。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">从更深层次来看，Java诞生十年来，很多近十年前的业务组件至今还可以使用，软件应用不再由于语言的更迭革命带来毁灭的打击了。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">但是，随着WEB和EJB容器概念诞生，使得软件应用业开始担心SUN的伙伴们是否还在Java平台上不断推出翻新的标准框架，致使软件应用业的业务核心组件架构无所适从，从一直以来是否需要EJB的讨论声中说明了这种彷徨。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">笔者曾经在2004年底中国软件技术大会Ioc微容器(也就是Jdon框架的实现原理)演讲中指出：我们需要一个跨J2SE/WEB/EJB的微容器，保护我们的业务核心组件（中间件），以延续它的生命力，而不是依赖J2SE/J2EE版本，如下图：<br />
<div align="center" twffan="done"><img height="239" alt="" src="http://www.blogjava.net/images/blogjava_net/edog/32535/o_1.JPG" width="300" border="0" twffan="done" /></div>
&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">此次J2EE改名为Java EE，实际也反映出业界这种共同心声。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">让我们看看Java EE 5有哪些新的功能或规定，我们可以从SUN网站下载Java EE 5规范。其架构图如下：<br />
<div align="center" twffan="done"><img height="479" alt="" src="http://www.blogjava.net/images/blogjava_net/edog/32535/o_2.JPG" width="546" border="0" twffan="done" /></div>
<br />
</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">图中灰色加黑部分是Java EE 5新的功能，我们看到，在WEB层主要加入了JSF这个新的表现层框架，和我们日常开发关系密切的是，引入了新的Java Persistence标准，这个标准正在由EJB 3.0专家组制定。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">值得指出的是，这个Java持久化标准也可以嵌入在WEB层调用，所以，它肯定不会从属于EJB标准，这样，当前所有的Java持久层标准如：JDBC/JDO/Hibernate/Entity Bean将可能统一，减少用户的架构选择 痛苦。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">从架构图可以看出，无论Web结构或EJB结构，提供实现的功能相差不多，这样，我们的业务核心组件就可以根据需要部署在Web或EJB中运行，而不依赖具体的Java EE容器了。前面一章图的目标在Java EE 5中可以实现了。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">当然，Java EE 5重要改变还是：Java EE不再象以前那样只注重大型商业系统的开发，而是更关注小到中型系统的开发，简化这部分系统开发步骤。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">落实这一简化行动的最大特征是在Java 5.0(Java 1.5)中加入Annotations，通过Annotations引入，降低Java EE开发时，既要写code，又要写XML配置文件之苦，来回照顾，疲于奔命，Annotations既是得益于C++语言，也是从开源项目xDoclet实践中获得经验。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">但是Annotations是一把双刃剑，初学者用得不好，将会使得原本在XML中的Hard code（硬编码） 写进入代码Annotations，破坏代码的简洁和灵活性，Annotations讨论按这里。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">当然，Annotations的引入不只是解决XML配置，从大的概念说，是解决一个资源注射问题(XML属于其中一个资源)，在原理J2EE中，容器管理的资源都是由JNDI向应用程序提供的，现在通过Annotations可以方便实现注射。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">资源注射（Resource injection）设计概念其实是来自Ioc模式(Dependency Injection )，笔者设计开发的Jdon框架其实已经将Annotations这一宗旨的目的实现，在Jdon框架应用演示源码<strong>SimpleJdonFrameworkTest</strong>中，在jdonframework.xml中有一段如下配置：</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">&lt;pojoService class="com.jdon.framework.test.dao.JdbcDAO" name="jdbcDAO"&gt;</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">&lt;constructor value="java:/TestDS"/&gt;</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">&lt;/pojoService&gt; </span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">这段配置是将数据库的JNDI名java:/TestDS注射到JdbcDAO中。Jdon Framework下一个版本将是基于Java 5.0，这行配置 将可通过 Annotations写在jdbcDAO代码中，方便程序员开发。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">从这里，大家也可以知道EJB 3.0和EJB 2.0的区别了，有的人疑惑，是学习EJB 3.0还是学习EJB 2.0，其实EJB 3.0并没有在原理机制上对EJB有多大改动，只是做了编程方面的简化，另外EJB CMP参考了Hibernate新特点，EJB 3.0最大简化变动是CMP编程方法上。所以，无论学习EJb 3.0/2.0，EJB原理和运行机制都是一样，这部分才是学习EJB最大的困难处，而不是因为到了EJB 3.0，理解EJB就会容易。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">初学者可从Eclipse+Xdoclet开发EJB 2.0开始学习， EJB 3.0 = EJB 2.0 + xDoclet，这里有一篇Eclipse开发EJB教程，使用JBossIDE非常简单，无需Lomboz等插件。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">Security</span><span style="font-size: 9pt; font-family: 宋体" twffan="done">安全是Java EE的一个重要特点，也就是基于容器的安全访问，无需自己手工编码，具体实现可参考Jdon框架应用演示源码JdonNews。这虽然是基于J2EE 1.3编写，但是和Java EE 5区别不是很大。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">事务管理Transaction Management也是Java EE 5的一个重要部分，该标准文档从几个方面阐述了事务管理的要点，标准中规定了在WEB层中使用事务和线程的处理关系，标准中规定：Web服务器如Tomcat无需在Web层提供事务支持，因为Web组件根本不支持事务繁衍/传递。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">因为目前一些架构如Struts+Spring+Hibernate/Struts+Hibernate是标准中的Web结构，因此Java EE 5在J2EE 4.2.2规定了 Web组件事务的生命周期，如果Web组件直接调用JTA，事务就不可以跨一个客户端的多个请求，事务只能在一个请求(Servlet/Jsp)中完成，这个标准规定了我们在Web架构中（如上述架构）无法使用长事务(如工作流/状态图中跨页面请求事务)，针对一个客户端跨请求的事务目前只有唯一解决方案：只有使用EJB的有态Session。以上是Java EE 5主要部分，Java EE包含更多其他技术部分如Jdbc JMS JCA JNDI 等等，需要用户在实践中摸索。</span></p>
<img src ="http://www.blogjava.net/edog/aggbug/210243.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edog/" target="_blank">edog</a> 2008-06-24 10:20 <a href="http://www.blogjava.net/edog/archive/2008/06/24/210243.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>