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