??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品无码久久青草 ,亚洲xxxx视频,国产成人精品久久亚洲http://www.tkk7.com/jiabao/articles/104850.html金家?/dc:creator>金家?/author>Mon, 19 Mar 2007 17:29:00 GMThttp://www.tkk7.com/jiabao/articles/104850.htmlhttp://www.tkk7.com/jiabao/comments/104850.htmlhttp://www.tkk7.com/jiabao/articles/104850.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/104850.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/104850.html
0

 

POJO = pure old java object or plain ordinary java object or what ever.

PO = persisent object 持久对象

是说在一些Object/Relation Mapping工具中,能够做到l护数据库表记录的persisent object完全是一个符合Java Bean规范的纯Java对象Q没有增加别的属性和Ҏ(gu)。全都是q样子的Q?/a>

														
																public class User { 
private long id;
private String name;
public void setId(long id) {
this.id = id;
}
public void setName(String name) {
this.name=name;
}
public long getId() {
return id;
}
public String getName() {
return name;
}
}


首先要区别持久对象和POJO?/a>

持久对象实际上必d应数据库中的entityQ所以和POJO有所区别。比如说POJO是由new创徏Q由GC回收。但是持久对象是insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库Connection之中QConnnection关闭以后Q持久对象就不存在了Q而POJO只要不被GC回收QL存在的?/a>

׃存在诸多差别Q因此持久对象PO(Persistent Object)在代码上肯定和POJO不同Qv码PO相对于POJO?x)增加一些用来管理数据库entity状态的属性和Ҏ(gu)。而ORMq求的目标就是要PO在用上量和POJO一_(d)对于E序员来_(d)他们可以把PO当做POJO来用Q而感觉不到PO的存在?/a>

JDO的实现方法是q样的:(x)

1、编写POJO

2、编译POJO

3、用JDO的一个专门工P叫做EnhancerQ一般是一个命令行E序Q手工运行,或者在ant脚本里面q行Q对POJO的class文g处理一下,把POJO替换成同名的PO?/a>

4、在q行期运行的实际上是POQ而不是POJO?/a>

该方法有点类gJSPQJSP也是在编译期被{换成Servlet来运行的Q在q行期实际上q行的是ServletQ而不是JSP?/a>

Hibernate的实现方法比较先q:(x)

1、编写POJO

2、编译POJO

3、直接运行,在运行期Q由Hibernate的CGLIB动态把POJO转换为PO?/a>

由此可以看出Hibernate是在q行期把POJO的字节码转换为PO的,而JDO是在~译期{换的。一般认为JDO的方式效率会(x)E高Q毕竟是~译期{换嘛。但是Hibernate的作者Gavin King说CGLIB的效率非怹高,q行期的PO的字节码生成速度非常之快Q效率损失几乎可以忽略不计?/a>

实际上运行期生成PO的好处非常大Q这样对于程序员来说Q是无法接触到PO的,PO对他们来说完全透明。可以更加自q以POJO的概忉|UPO。另外由于是q行期生成POQ所以可以支持增量编译,增量调试。而JDO则无法做到这一炏V实际上已经有很多h在抱怨JDO的编译期Enhancer问题了,而据说JBossDO采用运行期生成PO字节码,而不采用~译期生成PO字节码?/a>

另外一个相关的问题是,不同的JDO产品的Enhancer生成的PO字节码可能会(x)有所不同Q可能会(x)影响在JDO产品之间的可UL性,q一Ҏ(gu)点类似EJB的可UL性难题?/a>


p个问题另外引Z个JDO的缺陗?/a>

׃JDO的PO状态管理方式,所以当你在E序里面get/set的时候,实际上不是从PO的实例中取valuesQ而是从JDO State Manager ? 中取出来Q所以一旦PM关闭QPO׃能进行存取了?/a>

在JDO中,也可以通过一些办法得PO可以在PM外面使用Q比如说定义PO是transient的,但是该PO在PM关闭后就没有PO identity了。无法进行跨PM的状态管理?/a>

而Hibernate是从PO实例中取values的,所以即使Session关闭Q也一样可以get/setQ可以进行跨Session的状态管理?/a>

在分多层的应用中Q由于持久层和业务层和web层都是分开的,此时Hibernate的PO完全可以当做一个POJO来用Q也是当做一个VOQ在各层间自׃递,而不用去Session是开q是兟뀂如果你把这个POJO序列化的话,甚至可以用在分布式环境中。(不适合lazy loading的情况)

但是JDO的PO在PM关闭后就不能再用了,所以必dPM关闭前把PO拯一份VOQ把VO传递给业务层和web层用。在非分布式环境中,也可以用ThreadLocal模式保PM始终是打开状态,来避免每ơ必进行PO到VO的拷贝操作。但是不怎么_(d)qL权宜之计Q不如Hibernate的功能强?/a>




]]>
JAVA常见错误处理http://www.tkk7.com/jiabao/articles/104842.html金家?/dc:creator>金家?/author>Mon, 19 Mar 2007 15:14:00 GMThttp://www.tkk7.com/jiabao/articles/104842.htmlhttp://www.tkk7.com/jiabao/comments/104842.htmlhttp://www.tkk7.com/jiabao/articles/104842.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/104842.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/104842.html
异常
 javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login Q?Login是你的action名字Q  ?br />  
可能原因
 action没有再struts-config.xml 中定义,或没有找到匹配的actionQ例如在JSP文g中用?lt;html:form action="Login.do".表单提交给
Login.do处理Q如果出Cq异常,h看struts-config.xml中的定义部分Q有时可能是打错了字W或者是某些不符合规则,可以使用struts
console工具来检查?br /> -----------------------------------------------------------------------------------------------------------------
异常
 org.apache.jasper.JasperException: Cannot retrieve definition for form bean null
 
可能原因      
       
 q个异常是因为StrutsҎ(gu)struts-config.xml中的mapping没有扑ֈaction期望的form bean。大部分的情况可能是因ؓ(f)在form-bean中设|的
name属性和action中设|的name属性不匚w所致。换句话_(d)action和form都应该各自有一个name属性,q且要精匹配,包括大小写。这?/font>
错误当没有name属性和action兌时也?x)发生,如果没有在action中指定name属性,那么没有name属性和action相关联。当然当action制作
某些控制Ӟ譬如Ҏ(gu)参数D转到相应的jsp面Q而不是处理表单数据,q是׃用name属性,q也是action的用方法之一?br /> -----------------------------------------------------------------------------------------------------------------
异常
 No action instance for path /xxxx could be created
 
可能原因
 特别提示Q因为有很多中情况会(x)Dq个错误的发生,所以推荐大家调高你的web服务器的日志/调试U别Q这样可以从更多的信息中看到潜在
的、在试图创徏actioncL发生的错误,q个actioncM已经在struts-config.xml中设|了兌Q即d?lt;action>标签Q?br />  
在struts-config.xml中通过action标签的class属性指定的actioncM能被扑ֈ有很多种原因Q例如:(x)
定位~译后的.class文gp|。Failure to place compiled .class file for the action in the classpath (在web开发中Qclass的的位置
在r WEB-INF/classesQ所以你的action class必须要在q个目录下。例如你的actioncM于WEB-INF/classes/action/Login.class,那么?/font>
struts-config.xml中设|a(chn)ction的属性type时就是action.Login).
拼写错误Q这个也时有发生Qƈ且不易找刎ͼ特别注意W一个字母的大小写和包的名称。?br /> -----------------------------------------------------------------------------------------------------------------
异常
 javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN
 
可能原因
 没有位form bean中的某个变量定义getter Ҏ(gu)
 
q个错误主要发生在表单提交的FormBean中,用struts标记<html:text property=”username?gt;Ӟ在FormBean中必L一个getUsername()
Ҏ(gu)。注意字母“U”?br /> -----------------------------------------------------------------------------------------------------------------
异常
 java.lang.NoClassDefFoundError: org/apache/struts/action/ActionForm
 
可能原因
 q个错误主要发生在在classpath中找不到相应的Java .class文g。如果这个错误发生在web应用E序的运行时Q主要是因ؓ(f)指定的class文g
不在web server的classpath中(/WEB-INF/classes 和?WEB-INF/libQ?/font>
在上面的错误中,原因是找不到ActionFormcR?br /> -----------------------------------------------------------------------------------------------------------------
异常
 javax.servlet.jsp.JspException: Exception creating bean of class org.apache.struts.action.ActionForm: {1}
 
可能原因
 Instantiating Struts-provided ActionForm class directly instead of instantiating a class derived off ActionForm. This might
occur implicitly if you specify that a form-bean is this Struts ActionForm class rather than specifying a child of this class
for the form-bean.
 
Not associating an ActionForm-descended class with an action can also lead to this error.
-----------------------------------------------------------------------------------------------------------------
异常
 javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection
 
可能原因
 不是标识Struts actionServlet?lt;servlet>标记是映射.do扩展名的<sevlet-mapping>标记或者两者都没有在web.xml中声明?br />  
在struts-config.xml中的打字或者拼写错误也可导致这个异常的发生。例如缺一个标记的关闭W号/>。最好用struts console工具查一
下?br />  
另外Qload-on-startup必须在web.xml中声明,q要么是一个空标记Q要么指定一个数|q个数值用来表servletq行的优先Q数D大优
先񔭑低?br />  
q有一个和使用load-on-startup有关的是使用Struts预编译JSP文g时也可能Dq个异常?br /> -----------------------------------------------------------------------------------------------------------------
异常
 java.lang.NullPointerException at org.apache.struts.util.RequestUtils.forwardURL(RequestUtils.java:1223)
 
可能原因
 在struts-config.xml中的forward元素~少path属性。例如应该是如下形式Q?br /> <forward name="userhome" path="/user/userhome.jsp"/>
-----------------------------------------------------------------------------------------------------------------
异常
 javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope
 
 
  
 
Probable Causes
 试图在Struts的form标记外用form的子元素。这常常发生在你?lt;/html:form>后面使用Struts的html标记?/font>
另外要注意可能你不经意用的无主体的标记Q如<html:form …?>Q这样web 服务器解析时当作一个无M的标讎ͼ随后使用的所?/font>
<html>标记都被认ؓ(f)是在q个标记之外的,如又使用?lt;html:text property=”id?gt;
q有是在用taglib引入HTML标记库时Q你使用的prefix的g是html?br /> -----------------------------------------------------------------------------------------------------------------
异常
 javax.servlet.jsp.JspException: Missing message for key xx.xx.xx
 
Probable Causes
 q个key的值对没有在资源文件ApplicationResources.properties中定义。如果你使用eclipse时经常碰到这L(fng)情况Q当目重新~译Ӟ
eclipse?x)自动将classes目录下的资源文g删除?br />  
资源文gApplicationResources.properties 不在classpath中应资源文件放刊WWEB-INF/classes 目录下,当然要在struts-config.xml?/font>
定义)
-----------------------------------------------------------------------------------------------------------------
异常
 Cannot find message resources under key org.apache.struts.action.MESSAGE
 
可能原因
 很显Ӟq个错误是发生在使用资源文gӞ而Struts没有扑ֈ资源文g?br />  
Implicitly trying to use message resources that are not available (such as using empty html:options tag instead of specifying
the options in its body -- this assumes options are specified in ApplicationResources.properties file)
 
XML parser issues -- too many, too few, incorrect/incompatible versions
-----------------------------------------------------------------------------------------------------------------
异常
 Strange and seemingly random characters in HTML and on screen, but not in original JSP or servlet.
 
可能原因
 混和使用Struts的html:form标记和标准的HTML标记不正?br />  
使用的编码样式在本页中不支持?br /> -----------------------------------------------------------------------------------------------------------------
异常
 "Document contained no data" in Netscape
 
No data rendered (completely empty) page in Microsoft Internet Explorer
 
可能原因
 使用一个Action的派生类而没有实现perform()Ҏ(gu)或execute()Ҏ(gu)。在Struts1.0中实现的是perform()Ҏ(gu)Q在Struts1.1中实现的?/font>
execute()Ҏ(gu)Q但Struts1.1向后兼容perform()Ҏ(gu)?/font>
但你使用Struts1.1创徏一个Action的派生类Qƈ且实Cexecute()Ҏ(gu)Q而你在Struts1.0中运行的话,׃(x)得到"Document contained no
data" error message in Netscape or a completely empty (no HTML whatsoever) page rendered in Microsoft Internet Explorer.”的
错误信息?br />  
---------------------------------------------------------------------------------------------------------------------------
异常
ServletException: BeanUtils.populate
解决Ҏ(gu)
在用Struts上传文g?遇到了javax.servlet.ServletException: BeanUtils.populate异常?br /> 我的ActionServletq没有用到BeanUtilsq些工具cR后来仔l检查代码发现是在jsp文g里的form忘了加enctype=&quot;multipart/form-
data&quot; 了。所以写E序遇到错误或异常应该从多方面考虑问题存在的可能性,惛_pȝ提示信息以外的东ѝ?br /> ----------------------------------------------------------------------------------------------------------------------------
1. 定义Action? 如果指定了name, 那么必须要定义一个与它同名的FormBean才能q行form映射.
2. 如果定义Action? 提交面时出玊W?No input attribute for mapping path..." 错误, 则需要在其input属性中定义转向的页?
3. 如果插入新的数据时出玊W?Batch update row count wrong:..." 错误, 则说明XXX.hbm.xml中指定的key的类型ؓ(f)原始cd(int, long),
因ؓ(f)q种cd?x)自动分配? 而这个值往往?x)让pȝ认ؓ(f)已经存在该记? 正确的方法是使用java.lang.Integer或java.lang.Long对象.
4. 如果插入数据时出玊W?argument type mismatch" 错误, 可能是你使用了Date{特D对? 因ؓ(f)struts不能自动从String型{换成Date?
所? 你需要在Action中手动把String型{换成Date?
5. Hibernate? Query的iterator()比list()Ҏ(gu)快很?
6. 如果出现 "equal symbol expected" 错误, 说明你的strtus标签中包含另一个标{或者变? 例如:
<html:select property="test" onchange="<%=test%>"/>
或?br /> <html:hidden property="test" value="<bean:write name="t" property="p"/>"/>
q样的情?.. 
---------------------------------------------------------------------------------------------------------------------------
错误Q?/font>
Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
原因与解冻I(x)
    因ؓ(f)Hibernate ToolsQ或者Eclipse本n的Database ExplorerQ生?.hbn.xml工具中包含有catalog="***"Q?表示数据库名Uͼq样?/font>
属?该属性删除就可以?br /> ---------------------------------------------------------------------------------------------------------------------------
错误Q?/font>
org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)

原因与解冻I(x)
Ҏ(gu)1 删除Set方的cascade
Ҏ(gu)2 解决兌关系后,再删?br /> Ҏ(gu)3 在many-to-one方增加cascade 但g能是none
最后一招:(x)
查一下hashCode equals是否使用了id作ؓ(f)唯一标示的选项了;我用uuid.hex时是没有问题的;但是用了nativeQ就不行了,怎么办?删除?/font>
Q?br /> ----------------------------------------------------------------------------------------------------------------------------
问题Q?/font>
今天用Tomcat 5.5.12Q发现原来很好用的系l不能用了,反复试发现面中不能包含 taglibQ否则会(x)出现以下提示Q?/font>
HTTP Status 500 -type Exception report
Message 
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /index.jsp(1,1) Unable to read TLD "META-INF/tlds/struts-bean.tld" from JAR file
"file:*****/WEB-INF/lib/struts.jar":
原因Q?/font>
更新了工E用的lib文g夹下的jarQ发布时也发布了servlet.jar和jsp-api.jar?/font>
解决Q?/font>
把jsp-api.jar删除p册个问题了?/font>
-----------------------------------------------------------------------------------------------------------------------------
错误Q java.lang.NullPointerException
原因Q 发玊Wdao 实例、 manage 实例{需要注入的东西没有被注入(俗称I指针异常)
解决Q这个时候,你应该查看日志文Ӟ默认是应用服务器的 log 文gQ比如 Tomcat 是 [Tomcat 安装目录 ]/logs Q你?x)发现提CZQ?/font>
可能是:(x)
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sf' defined in ServletContext
resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is
org.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xml
org.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xml
……………………?
Caused by: java.io.FileNotFoundException: src\hibernate.cfg.xml
可能是:(x)
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in
ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is
org.hibernate.MappingException: Resource: com/mcc/coupon/model/UserRole.hbm.xml not found
org.hibernate.MappingException: Resource: com/mcc/coupon/model/UserRole.hbm.xml not found
然后你就知道原因是因为配|文件的解析Z错误Q这个通过 Web 面是看不出来的?/font>
更多的是持久化媄文件出的错误;D了没有被解析Q当然你需要的功能无法用了?br /> ----------------------------------------------------------------------------------------------------------------------------
错误Q?/font>
StandardWrapperValve[action]: Servlet.service() for servlet action threw exception
javax.servlet.jsp.JspException: Cannot retrieve mapping for action /settlementTypeManage

或者:(x)
    type Status report
    message Servlet action is not available
    description The requested resource (Servlet action is not available) is not available.

原因Q 同 ?br /> ----------------------------------------------------------------------------------------------------------------------------
 错误
StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
java.lang.ClassNotFoundException: org.apache.struts.taglib.bean.CookieTei
界面错误具体描述Q?br /> org.apache.jasper.JasperException: Failed to load or instantiate TagExtraInfo class: org.apache.struts.taglib.bean.CookieTei
 

    原因与解冻I(x)
  <Ҏ(gu)一>你的“html:”开头的标签没有攑֜一?lt;html:form>?/font>
     <Ҏ(gu)?gt;重新启动你的应用服务器,自动没有这个问题了
-----------------------------------------------------------



]]>
Java企业pȝ架构选择考量http://www.tkk7.com/jiabao/articles/104722.html金家?/dc:creator>金家?/author>Mon, 19 Mar 2007 05:28:00 GMThttp://www.tkk7.com/jiabao/articles/104722.htmlhttp://www.tkk7.com/jiabao/comments/104722.htmlhttp://www.tkk7.com/jiabao/articles/104722.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/104722.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/104722.html 板桥里h http://www.jdon.com 2005/09/26

  现在Java领域各种技术百花齐放,名目J多Q如何根据自q需求选择q些框架呢?特别对于初学者,在学?fn)选择方向上也非常qQ如何有针对性的Ҏ(gu)自己目特点q行学习(fn)变的更加重要?/p>

  下面我们从一个发展角度来对J2EE/Java EE的这些框架诞生进行一番考量Q可能对我们的选择有很大帮助?/p>

  首先我们需要明白一?a target="_blank">高质量的J2EEpȝ是什么样?/a>Q高质量的J2EE/Java EEpȝ标准实际是OO设计的标准,松耦合是OO设计的主要追求目标之一Q那么无疑解耦性成量J2EE/JEE质量的首要标准。实际选择中,q需要兼֏伸羃?性能/开发效率等斚wl合考虑?/p>

  J2EE/Java EEL(fng)多层l构Qؓ(f)什么多层比两层好?因ؓ(f)多层l构解耦性好Q带来维护拓展方便灵zR?/p>

  典型的J2EE/Java EE臛_划分三个层次Q表现层/业务逻辑lg?持久层?/p>

  如图Q表现层英文是Presentation LayerQ是实现昄功能的,q部分一般用B/Sl构来完成,当然你也可以使用专门q程客户端来实现;

  业务逻辑层因为是由大量组?Components)l成的,也可UCؓ(f)lg层,lg从不同角度又可分为各U类型,然后又有不同的流z,目前占主要位|的是Model+ServiceQ模型加服务Q所以这一层又UCؓ(f)业务服务层Business ServiceQ也有称为Model业务层;

  持久层是负责对象持久化也是数据库操作的层次,英文Persistence Layer?

  SUN伙伴们推出J2EE标准Ӟ分别对这三个层次规定了标准实玎ͼ表现层用Jsp/Servlet技术;业务lg层用EJB的会(x)话BeanQ持久层使用实体Bean。同Ӟ标准业务层和持久层在物理上l成一个新的容器EJB容器Q与表现层技术完全一L(fng)容器Q这PJ2EE技术被l化为Web和EJBQ物理上有Web容器和W(xu)eb应用E序Q以?qing)EJB容器和EJB应用E序?/p>

  当然QJ2EE/JEE的发展不止这些,q三个层ơ技术分别独立发展,高歌猛进Q下面分别单独陈qͼ当你了解某种框架技术ؓ(f)什么诞生时Q你可能q道你该在什么情况下选择它们了,工具L因目的而生Q?/p>

表现层框?/strong>

  J2EE/Java EE虽是多层l构Q但它不是一U强制性多层结构,也就是说Q你也可能做成传l两层结构,有的初学者直接用Jsp嵌入Java代码调用数据库这L(fng)构实际不是多层结构,q是以前的两层结构?/p>

  在Jsp中嵌入大量代码,一旦报I指针错误就很难扑և问题Q很多初学者下载JiveJdon 2.5后就l常到q个问题Q因此大量有关空指针错误问题出现论坛里,Z么他们不能自p军_Q?那是因ؓ(f)无法定位错误在Jsp中的位置QTomcat{服务器只告诉我们错误在index_jsp.java(Jsp的java文g)位置Q搞得一些hl常?x)跑到Tomcat服务器内部翻找Jsp的Java文gQ这一q程无比痛苦Qؓ(f)了减初学者这U痛苦,本站暂停了JiveJdon2.5的下载)?/p>

  J2EE/Java EE的发展就是降低这U痛苦,首先惛_的方式是Q在Jsp调试上下苦功Q要求Tomcat{服务器提供详细的错误定位;可惜到Tomcat 5.5我们也没看到q种功能Q实际上Q根本解决之道就是将Jsp的调试变成javalg的调试?/p>

  首先通过MVC模式规定Jsp只能{同于HtmlQ不能包含Java代码Q将Jsp和Java代码分离Q可是这样分M后,它们l合h又麻烦了Q所以,虽然你用MVC模式Q但是还是直接基于Jsp技术,带来的是开发效率的降低?/p>

  Struts框架解决了这个问题,通过ActionForm可以Jsp和JavaBeans方便快速地l合hQ但是有人又抱怨Struts的ActionForm限制太死Q与Jsp虽能对应Q只能一个ActionForm一个表单对应,而不能Q意组件JavaBeans都可以和JspL字段对应Q这时就出来了组件型框架JSF/Tapestry?/p>

  表现层框架Struts/Tapestry/JSF架构比较

业务逻辑层框?/strong>

可׾~?/strong>

  因ؓ(f)EJB标准的推出,业务lg层以前基本是EJB的天下,但是EJB功能实在太强大,它考虑了世界顶U大型系l需求,因此免不了显得很复杂Q当初,基本上所有的大型企业高端都是选用J2EEQ选用J2EE实际是选用EJB。EJB的高可׾~性ؓ(f)大型企业日益发展提供最大的发展I间Q不再因Z业快速发展导致整个企业系l结构都要发生根本变?q是使用EJB的现实优ѝ?/p>

  q种企业pȝ的可伸羃性不是因为EJB存在才显得重要,而是我们企业架构选择需要考量的基本因素。换句话_(d)无论我们使用EJB与否Q这个问题都需要考虑:一台服务器不够用怎么办?如果q台服务器死Z(x)对企业运营带来什么媄响?如果每个星期q台服务器停机维护升U会(x)不会(x)对企业带来打击?我的企业pȝ是不是需要可靠的、几乎不当机?x24q行Q当企业pȝ面对大量外部讉K用户Ӟ一台服务器是否够用Q多台服务器联动的需求是否涉?qing)Y件技术更换?

  在这个现实因素考量后,如果觉得不是很重要,或者说来一D|间内q些因素无所谓,那么可以不选用EJB了?/p>

  Z么有不选用EJB的理由?因ؓ(f)它复杂,学习(fn)h比较困难QEJB帮助我们考虑企业中可能碰到的大部分问题,实际上,有的我们不需要,q也是Z么说EJB是一个重量解决Ҏ(gu)所在?/p>

  与重量相比的是轻量Q业务组件层轻量U解x案有Spring/HiveMidn/Jdon Framework{,轻量一词曾l因为EJB的出现而变得时髦,lh造成的感觉是QEJB׃老E子力气完成的那些功能Q用我轻量U解x案可以轻而易举也能解冻IN若轻啊,其实q是一U误解?/p>

  当曾l以轻量自居的Spring事务机制纳入自己怀׃Ӟ它也开始低调轻量了Q实际是不轻不重了;当然如果它把分布式计和事务再次加入Ӟ天^砝码也会(x)沉下ȝ?/p>

  初学者L愿意使用单的解决Ҏ(gu)Q学?fn)用方便,因此比较喜欢轻量U框架技术,q是正常的,但是在用轻量别框架之前必L白:(x)你的pȝ来真的只需要一台服务器卛_Q你的项目完成期真的非常紧急?

  如果只需要一台巨强服务器Q就不必选择EJBQEJB是因分布式多服务器而生Q对于单台服务器Q缺乏本地透明性,也就是说Q你无法透过EJB直接和本地JVM或文件系l等打交道,透明性也是衡量一个框架的重要指标?/p>

  当然Q重量和轻量q不完全对立QEJB3是Z化J2EE的用,使得EJB不只是擅长处理大型企业系l,中小型系l也使用很方便,q实际上也是EJB轻量化的一U努力?a target="_blank">什么是Java EE 5Q?/p>

  所以,对于架构选择来说Q根本前提是需要明白你的系l现在或来一D|_(d)注意需要考虑来一D|_(d)不能只看眼前Q是中小型系l还是大型系l?

灉|?定制?透明?/strong>

  当然q个{案有时我们自己也可能很隄出,那么我们q需要从其他角度来考量EJB和非EJB之选,例如W者曾l经历一个大型实时娱乐^台社区系l,从规模上说肯定是大型pȝQ设计目?0万h在线Q从q个角度非选用EJB不可Q?/p>

  但是QEJB因ؓ(f)q有事务机制Q虽然应用程序可以选择失效EJB事务Q但是EJB容器设计因ؓ(f)考虑了事务,所以在其内怸L?x)显得臃肿,是一U篏赘,q也是一U重量表C,不需要的东西存在肯定?x)媄响效率,那么N我不能根据我的需求,对EJB整体包括EJB容器q行可配|式的切Ԍ也就是说Q我上面q个案例只需要EJB的分布式计算功能Q其他的功能我都拆除Q只剩余我需要的功能能运行就可以了,轻装上阵?/p>

  可惜Q这UQ意切Ԍ应需而定的目标在EJB3标准q没有被重视Q所q的是,Ioc/AOP技术ؓ(f)q种目标实现提供了实现可能,但是Q只有Ioc/AOPq是不够Q特别是看Ioc的范_(d)如果你只把应用系l组件纳入Ioc理Ӟ自由解耦只属于应用pȝQ我上面案例的目标还是无法达刎ͼ当你把框架本w组件也U_Ioc理ӞL切割Q应需而定的目标才真正实现?/p>

  Spring和EJB3属于“只把应用系l组件纳入Ioc理”,q从JBoss 4.0版本可以看出Q那什么框架会(x)把框架本w组件也U_Ioc理呢?Apache?a target="_blank">Hivemind和笔者开发的Jdon框架?/p>

  什么样的组件可以被U_Ioc理呢?POJOlgQPOJOq个概念其实当初是针对EJB~点而推出,EJB要求应用pȝ的组件必ȝ承或依赖EJB容器Q这样得调试变的不方便Q但是后来,POJO的概念已l不只最初这些概念,POJO代表那种与周围完全脱dpR自p在的Object了,如果应用pȝ的Model或者Service都是POJOQ意味着你的应用pȝ不依赖Q何其他系l,解耦性灵zL高?/p>

  POJO是因为EJB而提出的Q当EJB自己們֐POJOӞ大家都在宣称自己是POJOӞPOJO概念没有立点了,q也是Java领域哭笑不得的现象,但是我个人更們֐把非EJB的JavaBeanslg通称为POJO?/p>

  Hivemind的Ioc依赖注射部分功能?a target="_blank">Jdon框架非常cMQ当上百个POJOlg配置Ӟ完全不必指定它们之间的依赖关p;你可以将自己应用E序的组件注册到Registry中,q样Hivemind帮助你启动q些lgQ正如你在Jdon框架中将你的lg写入mycontainer.xml中,Jdon框架也将自动启动你这些组Ӟq解军_们之间的互相调用Q包括和框架本nlg互动?/p>

  HiveMind?a target="_blank">Jdon框架定义的POJO Service有如下特点:(x)

  不象EJB那样~Z本地透明?location transparency)概念Q这些POJO ServiceL能定位到同样一个JVMQ也不象ZXML的Web服务web services那样没有语言透明(language transparency)概念Q这些POJO ServiceL可以被一lJava接口来概括替?通过调用Java interface来替代调用这些具体Service)Q当Ӟ更不?x)类似JMX或JiniQ不能进行service的热装蝲Q?hot-loadingQ?/p>

  注意Q当Ioc/AOP提供高度灉|的同Ӟ已经有初学者开始抱怨Spring的过分灵z,那么比Spring在组件上更灵zȝJdon框架只能是一U追求极端,它不一定构成你q行架构选择的主要依据!

  上面q些讨论只是表明在灵zL(解耦?透明性)q条需求道路上q下去的选择Q你自己的应用系l需求会(x)产生各种不同的要求,有些要求甚至是极致的Q这U偏向程度就成ؓ(f)你架构选择的目标,如果你的q种极致要求在目前Java世界里还没有可选框架时Q那么你p动手自己做了Q这也说明什么时候你开始自己做框架Q如Jdon框架Q,虽然在大多数情况下我们是不必要自己发明轮子的?/p>

快速构建?/strong>

  前面是从灉|性和定制性这个角度讨论架构选择目标Q但是在一般情况下Q我们还是从上手难易、开发效率这个角度来q行架构选择Q从q个角度来说Q就是需要我们将选用的框架尽可能的多帮助我们实现一些功能,但这又是和用难易是矛盾的,因此有个取舍问题Q取舍有个准则:(x)q个框架量能提供越多功能;量需要我们少写代码,甚至不写代码Q用XML配置Q,动脑筋?/p>

  关于XML配置q里也涉?qing)难易问题,XML配置语法不能太复杂,有太多小开关Switch也增加学?fn)成本?/p>

  从这个角度看QEJB无论是EJB2或EJB3提供的功能是最齐全的,但是XML配置开兛_?QSpring属于中等Q组件XML配置不算单,但是因ؓ(f)有不Struts+Spring+Hibernate之类现成开源代码可供参考,因此学习(fn)h隑ֺ也不大,Spring来象一个J2EE APIQ注意,JDK是J2SE APIQ?QSpring除不能提供分布式计算外,也因分灵z降低了一些开发效率,例如它的lg依赖关系一般需要逐步指定Qauotwiring功能q没有深入骨髓成为核心功能?a target="_blank">Ioc容器的革命性优炏V?/a>

  Spring除了提供lg层功能以外,q有表现层支持Spring MVCQ也有持久层实现的JDBC模板Q这P整个J2EE/Java EEpȝ各个层次Spring都提供了~省实现Q在q方面无疑提高了开发效率,但是Spring提供丰富API目的好像不是Z快速开发,而是Z建立一个完整的功能齐全的API功能库。正如它|页上开头文字所qͼ(x)As the leading full-stack Java/J2EE application frameworkQ注意full-stackQ完整齐全)是它H出的名词?/p>

  那么Q还有另外一个空白,是以开发效率ؓ(f)主要考虑Q这cL枉了必考虑_灉|性和丰富功能以外Q宗旨是Z在一般缺省情况下快速完成一个J2EE/Java EEpȝQ这非常cMMDA工具了,但是一个完全qzL和定制性的MDA工具也不是我们欢q的?/p>

  Jdon框架的发展目标是Z填补q个I白Q相信也?x)越来越多框架向q个目标q进Q当然不可否认,Spring也可能调转枪头走入这个领域,EJB2/EJB3正依靠JBuilder{这样商业化开发工具向q个领域靠拢Q这个发展方向实际是4GL RAD Tools?/p>

  很多人在快速构建方面也很早q行了探索,涌现出各U工P(x)如何构徏一个快速业务构件^収ͼ 但是如何把快速构建和构gQ组Ӟ灉|性有机结合在一P它是考验一个业务构Ӟ业务lgQ^台好坏的准则。有些构件^台虽然开发迅速,但是对于Ҏ(gu)情况Q可供程序员定制透明操作部分不多Q很死,典型的是两层l构以前的DelphiQ开发很快速,但是无法象J2EEq样深入到系l各个层ơ进行定?l护/拓展Q?/p>

业务lg框架Ҏ(gu)

  EJB2/EJB3 Spring Framework 1.x Jdon Framework 1.x
灉|?br />(松耦合) EJB3比EJB2更具灉|性,EJB3支持应用pȝPOJO 支持应用pȝPOJOQ框架基功能不能替换 支持应用pȝPOJOQ框架本w可分离配置Q定制性更?/td>
功能完整?/td> 全面Q支持异步JMS 分布式事?/td> 较ؓ(f)全面。有自己的表现层和持久层模板,可支持异?/td> 基本完整Q表现层借助Struts实现。有自己单的持久层模?/td>
领域范围 支持业务逻辑Session 不支持,需要开发者额外基于ThreadLocal~制代码Q耗费_֊和时间?/td> 支持业务逻辑Session
Ioc/AOP支持 EJB3支持Ioc, JBoss{EJB3服务器支持AOPQ基于业务组件的较粗_度 ZJavaBeanscȝl粒度;一般小型应用过于灵zd来复杂?/td> Z业务lg的较_粒?/td>
Ioc是否支持autowiring EJB3支持 ~省不支持,可设|支?/td> ~省支持
单台性能 一般,扚w查询{大数据量业务处理须心Q存在本C透明~陷?/td> 一般,框架本nlg无性能提升极致Q应用程序可配置cache/Pool 好,框架本nlg使用~存提升性能Q应用程序可配置cache/PoolQ批量查询专门优化,适合实时性ƈ发性要求较高应?/td>
可׾~?/td>

可支持多台服务器分布式计?

不支持,可依靠EJB实现 不支持,可依靠EJB实现
开发效?/td> 学习(fn)曲线?D熟练掌握难。借助商业开发工具可加快熟练者的开发速度?/td> 较ؓ(f)复杂Q可挑选只适合自己的功能实现。当lg很多Ӟ需要照这些组件之间调用关pR?/td> 单快速,表现层编码很。当lg个数很多Ӟ无需照顾它们之间的调用关p?/td>
pȝ规模 EJB2适合大型pȝ;EJB3适合中大型系l?/td> 适合中小型系l?/td> 适合中型系l,建立一个简单的|站pȝ{,和EJB无缝l合Q可借助EJB支持中大型系l?/td>
重量U别 重量Q正在减?/td> 轻量偏重Q有可能l箋增肥 最轻量Q恪守简单快速原?/td>

 

持久层框?/strong>

  持久层框架目前有EJB2/EJB3的实体Bean、Hibernate和各UJDO产品Q当然还有直接写SQL语句的JDBCQ如iBatis{?/p>

  持久层框架质量好与坏区分是是否是O/R MappingQ也是对象和关pL据库映射Q关pL据库需要实现定义好Schemal构Q对象因为字D而变的也有一个自ql构Q如何将对象数据自动持久化到数据库中Q首先我们得定义两者结构的对应Q这实际是数据的元数据定义?/p>

  因ؓ(f)Hiberante/Toplink/JDOq样O/R Mapping工具帮助你实现对象和数据库{换,克服了对象和数据库阻抗现象,O/R Mappingȝ Q所以才使得我们更多的可以对象方式(从模型Model对象Q来考虑Java EE/J2EEpȝQ可以完全放弃以前那U以数据库ؓ(f)中心的思维方式Q?a target="_blank">数据库时代的l结?/a>

  所以,是否选用好的持久层框Ӟ取决于你整个团队思维是否dOO了,是否需要真正OOQ当Ӟ对于一些小型项目,有时我们觉得直接使用JDBC模板反而更加轻村ֿ捷一点,q也是Spring的JDBC模板/iBatis/Jdon的Jdbc模板存在的理׃?/p>

例如新增一个数据表Q在Jdon框架只需要下面几行代码即可:(x)

String sql = "INSERT INTO testuser (userId , name) VALUES (?, ?)";
List queryParams = new ArrayList();
queryParams.add(userTest.getUserId());
queryParams.add(userTest.getName());
jdbcTemp.operate(queryParams,sql);

  q种方式和O/R Mapping兴师动众的多个XML配置和关pL思考相比,对于?fn)惯SQL语句的程序员反而更加迅速?/p>

  从以上可以看出,灉|?快速?单?可׾~性是我们q行架构选择的主要几个依据,架构选择实际是在这几个{略之间做一个^衡。当Ӟq有一个非帔R要的因素Q因为它不属于某个层ơ的技术,性能/~存是必d上面因素l合考虑的因素?/p>

  因ؓ(f)性能最初是我们使用计算机的基本原因Q别忘记q个Ҏ(gu)?/p>

相关文章

面向对象与领域徏?

J2EE中几U业务代理模式的实现和比?/a>

JBoss 5q来Java的彻底的可配|时?/a>

Ioc模式(又称DIQDependency Injection)

IOC模式的思考和疑问

关于SPING与EJB的胡ap--重和L恒的话题

Simplify the BestQ详量框?/a>

Ƣ迎讨论

 



]]>
转一|友的文章,关于JAVA学习(fn)资料查询?qing)基技术查找方式zhttp://www.tkk7.com/jiabao/articles/104377.html金家?/dc:creator>金家?/author>Fri, 16 Mar 2007 15:13:00 GMThttp://www.tkk7.com/jiabao/articles/104377.htmlhttp://www.tkk7.com/jiabao/comments/104377.htmlhttp://www.tkk7.com/jiabao/articles/104377.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/104377.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/104377.html阅读全文

]]>
什么是多层l构Q(含中文译文)http://www.tkk7.com/jiabao/articles/104373.html金家?/dc:creator>金家?/author>Fri, 16 Mar 2007 14:57:00 GMThttp://www.tkk7.com/jiabao/articles/104373.htmlhttp://www.tkk7.com/jiabao/comments/104373.htmlhttp://www.tkk7.com/jiabao/articles/104373.html#Feedback1http://www.tkk7.com/jiabao/comments/commentRss/104373.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/104373.html

 

What is Multitiered Application?
sun对宠物商店例子的lD文档?

Partitioning a design into tiers allows designers to choose
the appropriate technology for a given situation. The Java
Pet Store demo, illustrates how its design is divided into
multiple tiers.

使用分层的方式来q行设计Q可以设计者针对具体的情况使用合?br />的技术。这个Java 宠物商店的例子展CZ如何把一个设计分成多层结构?/p>

The Client tier is often the only part of the application the
user sees. The Java Pet Store demo Client tier consists of a
browser displaying web pages generated from JSP pages in the
Web tier. An administrator interface uses a spreadsheet client,
such as StarOffice software, to communicate with the Web Tier
XML messages. The Client tier communicates with other tiers
through defined interfaces.
客户层通常是用户唯一可以看到的应用程序的部分。这个宠物商店例?br />的客户层是一个浏览器Q它负责昄Web层中JSP生的web面。一?br />理员接口可以用一个spreadsheet客户端(例如StarOffice软gQ来
和W(xu)eb层交换XML消息。客户层通过定义好的接口和其他层交互?/p>

The Web tier performs web-related processing, such as serving
HTML, instantiating web page templates, and formatting JSP pages
for display. Some objects within the Web tier act as proxies to
components in the Enterprise JavaBeans components tier.
Web层负责Web相关的处理,比如提供HTML服务Q生web面的模板的实作Q?br />格式化JSP面来显C。Web层中有一些物件可以作为EJBlg层中lg?br />代理?/p>

The Enterprise JavaBeans components tier is responsible for any
processing involving Enterprise JavaBeans components. Enterprise
JavaBeans components contain the business logic of the Java Pet
Store demo, such as processing orders. EJB components also
represent the model objects of the Java Pet Store demo, including
Account and placed Orders.
EJBlg层负责Q何与EJBlg相关的处理。EJBlg中包含这个Java宠物商店
的商业逻辑Q比如处理订单。EJBlg也含有这个Java宠物商店的物件模型,
包括账目和处理过的订单?/p>

Stand-alone clients and web applications in the Web tier can use
Enterprise JavaBeans components hosted by the Enterprise JavaBeans
components tier. The Java Pet Store demo demonstrates the proper
use of Enterprise JavaBeans components.
单机版客L(fng)和网l层中的web应用都可以用EJBlg层中的EJBlg。这?br />Java宠物商店的例子展CZ如何恰当C用EJBlg?/p>

The Enterprise Information System (EIS) tier provides a layer of
software that maps existing data and application resources into
the design of a J2EE application in an implementation-neutral way.
The EIS tier can also access applications of other organizations
or businesses, providing seamless business-to-business integration.
企业信息pȝQEISQ层提供了一层YӞ以一U与实现无关的方式把已存?br />的数据和应用资源一h到一个J2EE应用E序的设计之中。EIS层通过B2B?br />无缝集成使得其它的组l或商业机构也可以对其进行用?/p>

 



]]>
PetStore 中EJB 的设计模式[长]http://www.tkk7.com/jiabao/articles/102721.html金家?/dc:creator>金家?/author>Thu, 08 Mar 2007 18:17:00 GMThttp://www.tkk7.com/jiabao/articles/102721.htmlhttp://www.tkk7.com/jiabao/comments/102721.htmlhttp://www.tkk7.com/jiabao/articles/102721.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/102721.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/102721.html阅读全文

]]>
解剖Petstore用户资料修改程http://www.tkk7.com/jiabao/articles/102719.html金家?/dc:creator>金家?/author>Thu, 08 Mar 2007 18:04:00 GMThttp://www.tkk7.com/jiabao/articles/102719.htmlhttp://www.tkk7.com/jiabao/comments/102719.htmlhttp://www.tkk7.com/jiabao/articles/102719.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/102719.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/102719.html
update_customer.screen

查找screendefinitions_en_US.xml
׃petsotre的界面用了一个模板taglib,q个模板屏q分成:(x)
title 标题
banner q告
sidebar 菜单?br />body 正文
mylist Ҏ(gu)昄
footer 脚
q个思\可以借鉴到我们系l中?br />从其中找到update_customer.screen的真正程序名是:(x)

也就是是edit_customer.jsp

打开edit_customer.jsp 发现其form action又是自己定义的,
action="customer.do"
也就是说update_customer.screen面是提交到customer.doE序的?br />
再查询customer.do是什么?

在mappings.xml中查询到Q?br />
com.sun.j2ee.blueprints.petstore.controller.web.actions.CustomerHTMLAction

customer.do实际是com.sun.j2ee.blueprints.petstore.controller.web.actions.CustomerHTMLActionq个servlet
那么打开com.sun.j2ee.blueprints.petstore.controller.web.actions.CustomerHTMLActionQ?br />
q个servlet主要是处理update_customer.screen提交form中的参数Q?br />ContactInfo info = extractContactInfo(request, "_a");
CreditCard creditCard = extractCreditCard(request);
ProfileInfo profileInfo = extractProfileInfo(request);
这些从前台用户那里输入的新数据打包在一个叫CustomerEventcMQ?br />event = new CustomerEvent(CustomerEvent.UPDATE, info, profileInfo, creditCard);

q个CustomerEvent很重要,是承接前台和后台EJB处理的中间枢U?br />
从mappings.xml可以查询刎ͼ(x)

com.sun.j2ee.blueprints.petstore.controller.events.CustomerEvent
com.sun.j2ee.blueprints.petstore.controller.ejb.actions.CustomerEJBAction

CustomerEvent实际是激z?CustomerEJBAction.

打开CustomerEJBActionQ我们发CupdateCustomer(CustomerEvent ce)
q个Ҏ(gu)前台用L(fng)新数据set到EJB中?br />CustomerEJBAction也ƈ不是直接和entity bean打交道,而是通过ShoppingClientFacadeLocalEJB
q是个Facade模式?br />
下次我们讨论MainServlet
q个MainServlet实际上是petstore MVC的总controller,但是它和具体数据又没有关p,上面的customer.do实际是通过MainServletȀzȝ?/td>


]]>
Spring2.0和EJB3.0随谈http://www.tkk7.com/jiabao/articles/102715.html金家?/dc:creator>金家?/author>Thu, 08 Mar 2007 17:46:00 GMThttp://www.tkk7.com/jiabao/articles/102715.htmlhttp://www.tkk7.com/jiabao/comments/102715.htmlhttp://www.tkk7.com/jiabao/articles/102715.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/102715.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/102715.htmlSpring自从2003q发布以来,一直是Java开源框架的奇迹之一。从2000q开始,伴随着B/S架构逐渐引入企业应用软g开发的领域QJava逐渐成ؓ(f)企业应用开发的L技术,一直到2003q_(d)StrutsQEJB一直是Java技术架构的不二选择Q然而这一切随着2003qSpring以without EJB的面目出C后,一切都开始改变?/p>

大概?003q下半年开始,SpringQHibernate开始甚嚣尘上,g那时候的Spring和Hibernate且不以动摇J2EE规范以EJB为核心的领袖C。但?004q?月䆾Q吸收了Spring/Hibernate框架优点的EJB3 JCP委员?x)的成立Q事实上宣判了Spring对EJB2的终l,EJB3则更像是Vendor们的一U自救行为?/p>

2004q到2006q三q时间以来,Spring取得了相当辉煌的成就Q不但将EJB2赶进历史Q而且牢牢立了Spring作ؓ(f)Java企业应用开发的LC。而今Q甚臛_技术比较保守的金融?sh)信行业Q也开始言必称SpringQSpring已经成ؓ(f)Java框架的事实标准?/p>

?004q?月䆾之后QHibernate Team开始和Spring公然册Q这个事情放在两q多以后的今天来看,原因是昭然若揭的Q背靠JBoss的Hibernate Team已经成ؓ(f)EJB3规范的一部分Q而JBoss希望力推的以EJB3为核心的Java架构来成为未来的企业应用L标准Q这U情冉|变至今,变成了Springframework和JBoss Seam的两U不同技术架构的竞争关系?/p>

2004q?月䆾QEJB3规范的v步,对Spring未来其实有很大的威胁Q但是EJB3规范历经两年旉的难产,l于?006q?月正式发布之Ӟ已经为时q晚了,抬眼望去Q已是spring的天下?/p>

有意思的是,大致展望一下未来,Java的企业应用开发还能遵循Sun和JCP制订的Java EE规范的道路走下去吗?如果不是q样Q那么未来道路是什么呢Q?/p>

观察一下JavaC֌几股大的势力Q会(x)发现一些有意思的现象Q?/p>

IBM和BEA是JavaC֌的领D,?004q开始,IBM和BEA开始大肆宣传SOAQ将他们的目光从应用服务器领域挪C松藕合企业服务领域,开展SOA商业战略。与此同ӞEJB3专家委员?x)的领导者也(zhn)然变成了JBoss和OracleQ是IBM和BEA无力争取吗?当然不是。IBM和BEA已经看到了应用服务器市场和底层框架^台即被开源占领,商业价D~,因而审时度势进行战略{型。一斚w押宝SOA战略Q大肆炒热和培育SOA市场Q另一斚w也积极占领开源市场,IBM攑և来WebSphereC֌版本QApache GeronimoQBEAq脆和Spring的咨询公司interface21合作Q提供spring框架在WebLogic上的商业技术支持,如今EJB3对于他们来说已经形同鸡肋Q就抛给别h嚼吧?/p>

EJB3当块宝的自然是应用服务器市场的跟随者JBoss和OracleQ一斚w凭借ORM的先天优势,另一斚w有出头机?x)也不能放过QEJB3委员?x)几乎成了JBoss和Oracle的天下。特别是JBossQ更加积极推出JBoss Seam框架Q希望确立以JSFQEJB3的架构树(wi)立Java开发的标准Q用以取代Struts/Spring/Hibernate的流行组合,因而开启了EJB3和Spring 正面交锋的战争?/p>

Java Vendor中另外一股势力Sun公司q两q则一直自不暇,在应用服务器领域几乎退出市场,直到最q才搞出来一个GlassfishQ在开发框枉域也一直毫无徏?wi),推出的JSF至今q很不成熟,难担大QQ也许Sun都去忙着开源Solaris和JVM源代码了?/p>

几个大的Vendor或战略{型,或自不暇,或忙于收?Oracle)QJava开发领域的L打扫一I,对决的双Ҏ(gu)成了Spring和JBoss。对决的武器则是spring vs Seam?/p>

Spring代表了不遵@通用标准Q自己制订游戏规则,不依赖容器的一方;JBoss代表了遵循通用标准Q但是锁定容器的一斏V这场对决从2004q?月就开始上演,未来很长旉也会(x)l箋下去。不qSpring已经站在优势很大的地位上了?/p>

大致Ҏ(gu)一下两者:(x)Spring vs EJB3Q就?x)发现Spring从功能上面已l胜出很多了Q?/p>

1、IoC容器spring胜出

Spring的IoC容器很强大,其bean理功能过了目前EJB3容器Q配|方面SpringE微复杂一些。不q对于全局性配|来_(d)XML要优于EJB3的annotation?/p>

2、AOP能力Spring胜出

EJB3目前提供的AOP功能非常单,本来已经无法和Spring相比Q至于集成AspectJ的Spring2.0Q就更加望尘莫及(qing)了?/p>

3、事务管理方面EJB3E微领先

Spring提供了很的本地事务模型Q也可以集成JTAQ但是不支持分布式事务,当然q种场景也非常罕见?/p>

4、Web框架spring胜出

EJB3标准集成JSFQ但是JSFq不成熟Q和AJAX配合度也不好。Spring可以灉|集成各种Web框架和模板语aQ自w也提供了相当强大的MVC框架Q要是这q觉得不够,那么spring webflowQportlet support都拿出来?/p>

5、远E访问支持,大致持^

EJB3l承了传l的EJBq程讉K能力QW(xu)eb Services支持也不错;不过Spring提供了更多更灉|的选择QJava RPCQHTTP InvokerQHessian/BurlapQW(xu)ebServices?/p>

6、框枉成能力,spring胜出

q是spring的传l优劉K目,只要看看spring modules目Q看看n多第三方spring支持Q就?x)发现spring现在的群众基多么好,集成工作,spring modules已经提供了方便的模板c,集成规则引擎QCacheQCMSQ脚本语aQ异步Q务,安全验证框架。。。。。。EJB3有点望尘莫及(qing)的味?/p>

7、JMSQJMXQJCA{,EJB3领先一?/p>

q些传统EJB优势目往往应用的不太多QEJB3仍然是领先的。不qo(h)Z目的是,Spring最q几个版本在q箋q赶EJBq些传统优势领域Q到Spring2.0为止Q其JMSQJMXQJCA支持已经相当不错了,可以说传lEJB能够做的Q现在Spring也可以做得到?/p>

q几q除了Spring框架自n不断完善和g伸到传统应用领域Q围l在Spring周围的第三方框架也是来丰富,EJB3在annotation斚w有些独到的优势,在一些传l领域,q领先springQ但是M来说QEJB3为核心的J2EE5.0规范很难和Spring现在?.0相匹敌,更何况Java的主力Vendor早已醉翁之意不在q里了,单凭JBoss的SeamQ难以战胜spring?/p>

目前JBoss已经开始在国内q行商业上的推广Q也希望以其EJB3技术来和Springframework相抗衡,JBoss目前用来说服客户使用EJB3的理׃要有两点Q?/p>

1、EJB3是一个标准,由多个厂商提供实?
2、JBoss的EJB3由Red Hat公司?qing)其合作伙伴提供技术支持,而springfrmework在国内还没有商业技术支?/p> 

]]>
目中Struts/Spring/Hibernate的基本流E?/title><link>http://www.tkk7.com/jiabao/articles/102713.html</link><dc:creator>金家?/dc:creator><author>金家?/author><pubDate>Thu, 08 Mar 2007 17:38:00 GMT</pubDate><guid>http://www.tkk7.com/jiabao/articles/102713.html</guid><wfw:comment>http://www.tkk7.com/jiabao/comments/102713.html</wfw:comment><comments>http://www.tkk7.com/jiabao/articles/102713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jiabao/comments/commentRss/102713.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jiabao/services/trackbacks/102713.html</trackback:ping><description><![CDATA[ <p>Struts+Spring+Hibernate  develepment process: </p> <p>1.Write your business class : DTO,FormBean,Action,Service Interface,Service Implementation.</p> <p> <br />2.Write JSP pages.</p> <p> <br />3.struts-config.xml Configuration : FormBean,Action,Forward pages.</p> <p> <br />4.applicationContext-service.xml Configuration: add your Service Interface and Service Implementation. </p> <p> <br />5.Add your service factory Get method to ServiceFactory.java</p> <p> <br />6.Build project and Generate the Description file(*.hbm.xml) of DTO.</p> <p> <br />7.applicationContext.xml Configuration: add *.hbm.xml file to applicationContext for O/R mapping. </p> <img src ="http://www.tkk7.com/jiabao/aggbug/102713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jiabao/" target="_blank">金家?/a> 2007-03-09 01:38 <a href="http://www.tkk7.com/jiabao/articles/102713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE?3U核心技?/title><link>http://www.tkk7.com/jiabao/articles/102710.html</link><dc:creator>金家?/dc:creator><author>金家?/author><pubDate>Thu, 08 Mar 2007 17:11:00 GMT</pubDate><guid>http://www.tkk7.com/jiabao/articles/102710.html</guid><wfw:comment>http://www.tkk7.com/jiabao/comments/102710.html</wfw:comment><comments>http://www.tkk7.com/jiabao/articles/102710.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jiabao/comments/commentRss/102710.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jiabao/services/trackbacks/102710.html</trackback:ping><description><![CDATA[ <p>Java最初是在浏览器和客L(fng)机器中粉墨登场的。当Ӟ很多疑它是否适合做服务器端的开发。现在,随着对Java2q_企业版(J2EEQ第三方支持的增多,Java被广泛接Uؓ(f)开发企业服务器端解决Ҏ(gu)的首选^C一?<br /><br />J2EEq_׃整套服务QServicesQ、应用程序接口(APIsQ和协议构成Q它对开发基于Web的多层应用提供了功能支持?<br /><br />在本文中我将解释支撑J2EE?3U核心技术:(x)JDBC, JNDI, EJBs, RMI, JSP, Java servlets, XML, JMS, Java IDL, JTS, JTA, JavaMail ?JAFQ同时还描q在何时、何处需要用这些技术。当Ӟ我还要介l这些不同的技术之间是如何交互的?<br /><br />此外Qؓ(f)了让(zhn)更好地感受J2EE的真实应用,我将在WebLogic应用服务?来自BEA Systems公司的一U广为应用的产品环境下来介绍q些技术。不论对于WebLogic应用服务器和J2EE的新手,q是那些想了解J2EE能带来什么好处的目理者和pȝ分析员,怿本文一定很有参考h(hun)倹{?<br /><br />宏观印象: 分布式结构和J2EE <br /><br />q去Q二层化应用 -- 通常被称为client/server应用 -- 是大家谈论的最多的。在很多情况下,服务器提供的惟一服务是数据库服务。在q种解决Ҏ(gu)中,客户端程序负责数据访问、实C务逻辑、用合适的样式昄l果、弹出预讄用户界面、接受用戯入等。client/serverl构通常在第一ơ部|的时候比较容易,但难于升U或改进Q而且l常Z某种专有的协议,通常是某U数据库协议。它使得重用业务逻辑和界面逻辑非常困难。更重要的是Q在Web时代Q二层化应用通常不能体现出很好的伸羃性,因而很N应Internet的要求?<br /><br />Sun设计J2EE的部分v因就是想解决二层化结构的~陷。于是,J2EE定义了一套标准来化N层企业应用的开发。它定义了一套标准化的组Ӟqؓ(f)q些lg提供了完整的服务。J2EEq自动ؓ(f)应用E序处理了很多实现细节,如安全、多U程{?<br /><br />用J2EE开发N层应用包括将二层化结构中的不同层面切分成许多层。一个N层化应用A能够Z下的每种服务提供一个分开的层Q?<br /><br />昄Q在一个典型的Web应用中,客户端机器上q行的浏览器负责实现用户界面?<br /><br />动态生成显C? 管览器可以完成某些动态内Ҏ(gu)C,但ؓ(f)了兼容不同的览器,q些动态生成工作应该放在Web服务器端q行Q用JSP、ServletsQ或者XMLQ可扩展标记语言Q和Q可扩展样式表语aQ?<br /><br />业务逻辑Q业务逻辑适合用Session EJBsQ后面将介绍Q来实现?<br /><br />数据讉KQ数据访问适合用Entity EJBsQ后面将介绍Q和JDBC来实现?<br /><br />后台pȝ集成: 同后台系l的集成可能需要用到许多不同的技术,至于何种最佳需要根据后台系l的特征而定?<br /><br />(zhn)可能开始诧异:(x)Z么有q么多的层?事实上,多层方式可以使企业应用h很强的׾~性,它允许每层专注于特定的角艌Ӏ例如,让Web服务器负责提供页面,应用服务器处理应用逻辑Q而数据库服务器提供数据库服务?<br /><br />׃J2EE建立在Java2q_标准版(J2SEQ的基础上,所以具备了J2SE的所有优点和功能。包括“编写一ơ,到处可用”的可移植性、通过JDBC讉K数据库、同原有企业资源q行交互的CORBA技术,以及(qing)一个经q验证的安全模型。在q些基础上,J2EE又增加了对EJBQ企业JavalgQ、Java servlets、Java服务器页面(JSPsQ和XML技术的支持?<br /><br />分布式结构与WebLogic应用服务?<br /><br />J2EE提供了一个框?-一套标准API--用于开发分布式l构的应用,q个框架的实际实现留l了W三方厂商。部分厂商只是专注于整个J2EE架构中的的特定组Ӟ例如Apache的Tomcat提供了对JSP和servlets的支持,BEApȝ公司则通过其WebLogic应用服务器品ؓ(f)整个J2EE规范提供了一个较为完整的实现?<br /><br />WebLogic服务器已使徏立和部v伸羃性较好的分布式应用的q程大ؓ(f)化。WebLogic和J2EE代你处理了大量常规的~程dQ包括提供事务服务、安全领域、可靠的消息、名字和目录服务、数据库讉K和连接池、线E池、负载^衡和定w处理{?<br /><br />通过以一U标准、易用的方式提供q些公共服务Q象WebLogic服务器这L(fng)产品造就了具有更好׾~性和可维护性的应用pȝQ其ؓ(f)大量的用h供了增长的可用性?<br /><br />J2EE技?<br /><br />在接下来的部分里Q我们将描述构成J2EE的各U技术,q且了解WebLogic服务器是如何在一个分布式应用中对它们q行支持的。最常用的J2EE技术应该是JDBC、JNDI、EJB、JSP和servletsQ对q些我们作更仔l的考察?<br /><br />Java Database Connectivity (JDBC) <br /><br />JDBC API以一U统一的方式来对各U各L(fng)数据库进行存取。和ODBC一PJDBC为开发h员隐藏了不同数据库的不同Ҏ(gu)。另外,׃JDBC建立在Java的基?因此q提供了数据库存取的q_独立性?<br /><br />JDBC定义?U不同的驱动E序Q现分述如下Q?<br /><br />cd 1: JDBC-ODBC Bridge <br /><br />在JDBC出现的初期,JDBC-ODBC桥显然是非常有实用意义的Q通过JDBC-ODBC桥,开发h员可以用JDBC来存取ODBC数据源。不的是,他需要在客户端安装ODBC驱动E序Q换句话_(d)必须安装Microsoft Windows的某个版本。用这一cd你需要牺牲JDBC的^台独立性。另外,ODBC驱动E序q需要具有客L(fng)的控制权限?<br /><br />cd 2: JDBC-native driver bridge <br /><br />JDBC本地驱动E序桥提供了一UJDBC接口Q它建立在本地数据库驱动E序的顶层,而不需要用ODBC?JDBC驱动E序对数据库的API从标准的JDBC调用转换为本地调用。用此cd需要牺牲JDBC的^台独立性,q要求在客户端安装一些本C码?<br /><br />cd 3: JDBC-network bridge <br /><br />JDBC|络桥驱动程序不再需要客L(fng)数据库驱动程序。它使用|络上的中间服务器来存取数据库。这U应用得以下技术的实现有了可能Q这些技术包括负载均衡、连接缓冲池和数据缓存等。由于第3U类型往往只需要相Ҏ(gu)的下蝲旉Q具有^台独立性,而且不需要在客户端安装ƈ取得控制权,所以很适合于Internet上的应用?<br /><br />cd 4: Pure Java driver <br /><br />W?U类型通过使用一个纯Java数据库驱动程序来执行数据库的直接讉K。此cd实际上在客户端实C2层结构。要在N-层结构中应用Q一个更好的做法是编写一个EJBQ让它包含存取代码ƈ提供一个对客户端具有数据库独立性的服务?<br /><br />WebLogic服务器ؓ(f)一些通常的数据库提供了JDBC驱动E序Q包括Oracle, Sybase, Microsoft SQL Server以及(qing)Informix。它也带有一UJDBC驱动E序用于CloudscapeQ这是一U纯Java的DBMSQW(xu)ebLogic服务器中带有该数据库的评估版本?<br /><br />以下让我们看一个实例?<br /><br />JDBC实例 <br /><br />在这个例子中我们假定你已l在Cloudscape中徏立了一个PhoneBook数据库,q且包含一个表Q名?CONTACT_TABLE Q它带有2个字D:(x)NAME ?PHONE?开始的时候先装蝲Cloudscape JDBC driverQƈh driver manager得到一个对PhoneBook Cloudscape数据库的q接。通过q一q接Q我们可以构造一?Statement 对象q用它来执行一个简单的SQL查询。最后,用@环来遍历l果集的所有数据,q用标准输出NAME和PHONE字段的内容进行输出?<br /><br /><br /><br /><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 /><br /><br /><br />OK。接着我们来看一看JDBC是如何在企业应用中的q行使用?<br /><br />JDBC在企业应用中的应用 <br /><br />以上实例其实是很基本的,可能有些微不道。它假定了一?层结构。在一个多层的企业U应用中Q更大的可能是在客户端和一个EJBq行通信Q该EJB徏立数据库q接。ؓ(f)了实现和改进可׾~性和pȝ性能Q?WebLogic服务器提供了对连接缓冲池connection pool的支持?<br /><br />Connection pool减少了徏立和释放数据库连接的消耗。在pȝ启动以后卛_建立q样的缓冲池Q此后如故再有对数据库的hQW(xu)ebLogic服务器可以很单地从缓冲池中取出数据。数据缓冲池可以在WebLogic服务器的 weblogic.properties 文g中进行定义?可参?weblogic.properties 文g中的例子QW(xu)ebLogic服务器的文档中还有更详细的参考信? <br /><br />在企业应用的另一个常见的数据库特性是事务处理。事务是一l申明statementQ它们必d为同一个statement来处理以保证数据完整性。缺省情况下JDBC使用 auto-commit 事务模式。这可以通过使用Connectioncȝ setAutoCommit() Ҏ(gu)来实现?<br /><br />现在我们已经对JDBC有了一些认识,下面该{向JNDI了?/p> <p>Java Naming and Directory Interface (JNDI) <br /><br />JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业U的资源如DNS和LDAPQ本地文件系l,后者在应用服务器中的对象?<br /><br />在JNDI中,在目录结构中的每一个结点称为context。每一个JNDI名字都是相对于context的。这里没有绝对名字的概念存在。对一个应用来_(d)它可以通过使用 InitialContext cL得到其第一个context: <br /><br /><br /><br /><br />Context ctx = new InitialContext(); <br /><br /><br /><br /><br />应用可以通过q个初始化的contextl有q个目录?wi)来定位它所需要的资源或对象。例如,假设你在Weblogic服务器中展开了一个EJBq将home接口l定到名?myApp.myEJB Q那么该EJB的某个客户在取得一个初始化context以后Q可以通过以下语句定位home接口Q?<br /><br /><br />MyEJBHome home = ctx.lookup( "myApp.myEJB" ); <br /><br /><br /><br /><br />在这个例子中Q一旦你有了对被h对象的参考,EJB的home接口可以在它上面调用方法。我们将在下面的"Enterprise Java Beans"章节中做更多的介l?<br /><br />以上关于JNDI的讨论只是冰׃一角而已。如果要更进一步地在context中查扑֯象,JNDI也提供了一些方法来q行以下操作Q  <br /><br />一个对象插入或l定到context。这在你展开一个EJB的时候是很有效的?<br /><br />从context中移d象?<br /><br />列出context中的所有对象?<br /><br />创徏或删除子一U的context?<br /><br />接下来,我们要开始关注EJB了?<br /><br />Enterprise Java Beans (EJB) <br /><br />J2EE技术之所以赢得某体广泛重视的原因之一是EJB。它们提供了一个框架来开发和实施分布式商务逻辑Q由此很显著地简化了h可׾~性和高度复杂的企业应用的开发。EJB规范定义了EJBlg在何时如何与它们的容器进行交互作用。容器负责提供公用的服务Q例如目录服务、事务管理、安全性、资源缓冲池以及(qing)定w性?<br /><br />EJB规范定义?中基本的beancd: <br /><br />Stateless session beans: 提供某种单一的服务,不维持Q何状态,在服务器故障发生时无法l存在,生命期相对较短。例如,一个stateless session bean可能被用于执行温度{换计?<br /><br />Stateful session bean: T提供了与客户端的?x)话交互Q可以存储状态从而代表一个客戗典型例子是购物车。Stateful session bean在服务器故障时无法l生存,生命气相对较短。每一个实例只用于一个单个的U程?<br /><br />Entity beans: 提供了一致性数据的表示-- 通常存放在数据库?-- 在服务器故障发生后能l箋存在。多用户情况下可以用EJB来表C相同的数据。entity EJB的一个典型例子是客户的帐号信息?<br /><br />管有以上的区别Q所有的EJBq是有许多的共同之处。它们都处理home interface。它定义了一个客L(fng)是如何创Z消亡EJB的。可以在bean中对定义了客L(fng)Ҏ(gu)的远E接口进行调用;beancd执行了主要的商务逻辑?<br /><br />描述EJB的开发已l超Z本文的范围。但是,如果一个EJB已经被开发了或者从W三方进行了购买Q它?yu)必d应用服务器中q行发布。WebLogic Server 5.1带有一个EJB Deployer Tool来协助处理EJB的发布。当你用EJB Deployer Tool的时候,你要定义客户端所用的JNDI名字来定位EJB。Deployer Tool生成wrappercL处理和容器的通信以及(qing)在一个jar文g中把被请求的Javacȝ定在一赗?<br /><br />一旦EJB被发布,客户端就可以使用它的JNDI名字来定位EJB。首先,它必dC个到home接口的reference。然后,客户端可以用该接口Q调用一?create() Ҏ(gu)来得到服务器上运行的某个bean实例的句柄;最后,客户端可以用该句柄在bean中调用方法?<br /><br />了解 EJB后,让我们再来看JSP?<br /><br />JavaServer Pages (JSPs) <br /><br />我们中间可能已经有许多h已经熟?zhn)Microsoft的Active Server Pages (ASP)技术了。JSP和ASP相对应的Q但更具有^台对立性。他们被设计用以帮助Web内容开发h员创建动态网,q且只需要相对较?yu)的代码?即Web设计师不懂得如何~程也可以用JSPQ因为JSP应用是很方便的?JSP面由HTML代码和嵌入其中的Java代码所l成。服务器在页面被客户端所h以后对这些Java代码q行处理Q然后将生成的HTML面q回l客L(fng)的浏览器?<br /><br />下面我们来看一个JSP的简单实例。它只显CZ服务器的当前日期和时间。虽Ӟ对语法的具体解释已经出了本文的范围Q但我们q是可以很直观地看到QJava代码被放在符L(fng)中间Q而Java的表辑ּ则放在符号之间?<br /><br />Date JSP sample <br /><br />The current date is . <br /><br />(zhn)可能有时候听说过JHTML。这是JSP以前的一U较老的标准。WebLogic服务器既可支持JSPQ又可支持JHTML。请注意Q在~省状况下,JSP在WebLogic服务器中q没有处于有效状态。要使之有效Q你可以~辑weblogic.properties文g。如果Web服务器还没有处于有效状态,则要先之有效。Servlet的情况和JSP是一L(fng)?<br /><br />下面? Java servlets <br /><br />Java servlets <br /><br />servlet提供的功能大多与JSPcMQ不q实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码Q而servlets全部由Java写成q且生成HTML?<br /><br />servlet是一U小型的JavaE序Q它扩展了Web服务器的功能。作ZU服务器端的应用Q当被请求时开始执行,q和CGI Perl脚本很相伹{Servlets和CGI脚本的一个很大的区别是:(x)每一个CGI在开始的时候都要求开始一个新的进E?-- 而servlets是在servlet引擎中以分离的线E来q行的。因此servlets在可伸羃性上提供了很好的改进?<br /><br />在开发servlets的时候,(zhn)常帔R要扩展javax.servlet.http.HttpServlet c,q且override一些它的方法,其中包括Q?<br /><br />service(): 作ؓ(f)dispatcher来实现命?定义Ҏ(gu) <br /><br />doGet(): 处理客户端的HTTP GETh?<br /><br />doPost(): q行HTTP POST操作 <br /><br />其它的方法还包括处理不同cd的HTTPh -- 可以参考HttpServlet API文档?<br /><br />以上描述的是标准J2EE Servlet API的各U方法。WebLogic服务器提供了一个该API完整的实现途径。一旦你开发了一个servletQ你可以在weblogic.properties 中加以注册ƈ由此可以在WebLogic服务器中对它q行配置?<br /><br />通过Java servlets,我们已经到达了J2EE主要技术的末尾了。但J2EE所提供的ƈ不止于这些。下面的D落中我们将要地看一下现存的一些技术,包括RMI, Java IDL和CORBA, JTA, 以及(qing)XMLQ等{?<br /><br />Remote Method Invocation (RMI) <br /><br />正如其名字所表示的那PRMI协议是在q程对象上调用一些方法。它使用了连l序列方式在客户端和服务器端传递数据。RMI是一U被EJB使用的更下层的协议?<br /><br />Java IDL/CORBA <br /><br />在Java IDL的支持下Q开发h员可以将Java和CORBA集成在一赗?他们可以创徏Java对象q之可在CORBA ORB中展开, 或者他们还可以创徏Javacdƈ作ؓ(f)和其它ORB一起展开的CORBA对象的客戗后一U方法提供了另外一U途径Q通过它Java可以被用于将你的新的应用和legacypȝ盔R成?<br /><br />Java Transaction Architecture (JTA)/Java Transaction Service (JTS) <br /><br />JTA定义了一U标准的APIQ应用系l由此可以存取各U事务监控?<br /><br />JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务理器是在高层支持Java Transaction API (JTA)规范Qƈ且在较底层实现OMG OTS specification的Java映像。JTS事务理器ؓ(f)应用服务器、资源管理器、独立的应用以及(qing)通信资源理器提供了事务服务?<br /><br />JavaMail and JavaBeans Activation Framework <br /><br />JavaMail是用于存取邮件服务器的APIQ它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器?<br /><br />JavaMail利用JavaBeans Activation Framework (JAF)来处理MIME-~码的邮仉件。MIME的字节流可以被{换成Java对象Q或者{换自Java对象。由此大多数应用都可以不需要直接用JAF?<br /><br />Java Messaging Service (JMS) <br /><br />JMS是用于和面向消息的中间g怺通信的应用程序接?Java Naming and Directory Interface (JNDI) <br /><br />JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业U的资源如DNS和LDAPQ本地文件系l,后者在应用服务器中的对象?<br /><br />在JNDI中,在目录结构中的每一个结点称为context。每一个JNDI名字都是相对于context的。这里没有绝对名字的概念存在。对一个应用来_(d)它可以通过使用 InitialContext cL得到其第一个context: <br /><br /><br /><br /><br />Context ctx = new InitialContext(); <br /><br /><br /><br /><br />应用可以通过q个初始化的contextl有q个目录?wi)来定位它所需要的资源或对象。例如,假设你在Weblogic服务器中展开了一个EJBq将home接口l定到名?myApp.myEJB Q那么该EJB的某个客户在取得一个初始化context以后Q可以通过以下语句定位home接口Q?<br /><br /><br />MyEJBHome home = ctx.lookup( "myApp.myEJB" ); <br /><br /><br /><br /><br />在这个例子中Q一旦你有了对被h对象的参考,EJB的home接口可以在它上面调用方法。我们将在下面的"Enterprise Java Beans"章节中做更多的介l?<br /><br />以上关于JNDI的讨论只是冰׃一角而已。如果要更进一步地在context中查扑֯象,JNDI也提供了一些方法来q行以下操作Q  <br /><br />一个对象插入或l定到context。这在你展开一个EJB的时候是很有效的?<br /><br />从context中移d象?<br /><br />列出context中的所有对象?<br /><br />创徏或删除子一U的context?<br /><br />接下来,我们要开始关注EJB了?<br /><br />Enterprise Java Beans (EJB) <br /><br />J2EE技术之所以赢得某体广泛重视的原因之一是EJB。它们提供了一个框架来开发和实施分布式商务逻辑Q由此很显著地简化了h可׾~性和高度复杂的企业应用的开发。EJB规范定义了EJBlg在何时如何与它们的容器进行交互作用。容器负责提供公用的服务Q例如目录服务、事务管理、安全性、资源缓冲池以及(qing)定w性?<br /><br />EJB规范定义?中基本的beancd: <br /><br />Stateless session beans: 提供某种单一的服务,不维持Q何状态,在服务器故障发生时无法l存在,生命期相对较短。例如,一个stateless session bean可能被用于执行温度{换计?<br /><br />Stateful session bean: T提供了与客户端的?x)话交互Q可以存储状态从而代表一个客戗典型例子是购物车。Stateful session bean在服务器故障时无法l生存,生命气相对较短。每一个实例只用于一个单个的U程?<br /><br />Entity beans: 提供了一致性数据的表示-- 通常存放在数据库?-- 在服务器故障发生后能l箋存在。多用户情况下可以用EJB来表C相同的数据。entity EJB的一个典型例子是客户的帐号信息?<br /><br />管有以上的区别Q所有的EJBq是有许多的共同之处。它们都处理home interface。它定义了一个客L(fng)是如何创Z消亡EJB的。可以在bean中对定义了客L(fng)Ҏ(gu)的远E接口进行调用;beancd执行了主要的商务逻辑?<br /><br />描述EJB的开发已l超Z本文的范围。但是,如果一个EJB已经被开发了或者从W三方进行了购买Q它?yu)必d应用服务器中q行发布。WebLogic Server 5.1带有一个EJB Deployer Tool来协助处理EJB的发布。当你用EJB Deployer Tool的时候,你要定义客户端所用的JNDI名字来定位EJB。Deployer Tool生成wrappercL处理和容器的通信以及(qing)在一个jar文g中把被请求的Javacȝ定在一赗?<br /><br />一旦EJB被发布,客户端就可以使用它的JNDI名字来定位EJB。首先,它必dC个到home接口的reference。然后,客户端可以用该接口Q调用一?create() Ҏ(gu)来得到服务器上运行的某个bean实例的句柄;最后,客户端可以用该句柄在bean中调用方法?<br /><br />了解 EJB后,让我们再来看JSP?<br /><br />JavaServer Pages (JSPs) <br /><br />我们中间可能已经有许多h已经熟?zhn)Microsoft的Active Server Pages (ASP)技术了。JSP和ASP相对应的Q但更具有^台对立性。他们被设计用以帮助Web内容开发h员创建动态网,q且只需要相对较?yu)的代码?即Web设计师不懂得如何~程也可以用JSPQ因为JSP应用是很方便的?JSP面由HTML代码和嵌入其中的Java代码所l成。服务器在页面被客户端所h以后对这些Java代码q行处理Q然后将生成的HTML面q回l客L(fng)的浏览器?<br /><br />下面我们来看一个JSP的简单实例。它只显CZ服务器的当前日期和时间。虽Ӟ对语法的具体解释已经出了本文的范围Q但我们q是可以很直观地看到QJava代码被放在符L(fng)中间Q而Java的表辑ּ则放在符号之间?<br /><br />Date JSP sample <br /><br />The current date is . <br /><br />(zhn)可能有时候听说过JHTML。这是JSP以前的一U较老的标准。WebLogic服务器既可支持JSPQ又可支持JHTML。请注意Q在~省状况下,JSP在WebLogic服务器中q没有处于有效状态。要使之有效Q你可以~辑weblogic.properties文g。如果Web服务器还没有处于有效状态,则要先之有效。Servlet的情况和JSP是一L(fng)?<br /><br />下面? Java servlets <br /><br />Java servlets <br /><br />servlet提供的功能大多与JSPcMQ不q实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码Q而servlets全部由Java写成q且生成HTML?<br /><br />servlet是一U小型的JavaE序Q它扩展了Web服务器的功能。作ZU服务器端的应用Q当被请求时开始执行,q和CGI Perl脚本很相伹{Servlets和CGI脚本的一个很大的区别是:(x)每一个CGI在开始的时候都要求开始一个新的进E?-- 而servlets是在servlet引擎中以分离的线E来q行的。因此servlets在可伸羃性上提供了很好的改进?<br /><br />在开发servlets的时候,(zhn)常帔R要扩展javax.servlet.http.HttpServlet c,q且override一些它的方法,其中包括Q?<br /><br />service(): 作ؓ(f)dispatcher来实现命?定义Ҏ(gu) <br /><br />doGet(): 处理客户端的HTTP GETh?<br /><br />doPost(): q行HTTP POST操作 <br /><br />其它的方法还包括处理不同cd的HTTPh -- 可以参考HttpServlet API文档?<br /><br />以上描述的是标准J2EE Servlet API的各U方法。WebLogic服务器提供了一个该API完整的实现途径。一旦你开发了一个servletQ你可以在weblogic.properties 中加以注册ƈ由此可以在WebLogic服务器中对它q行配置?<br /><br />通过Java servlets,我们已经到达了J2EE主要技术的末尾了。但J2EE所提供的ƈ不止于这些。下面的D落中我们将要地看一下现存的一些技术,包括RMI, Java IDL和CORBA, JTA, 以及(qing)XMLQ等{?<br /><br />Remote Method Invocation (RMI) <br /><br />正如其名字所表示的那PRMI协议是在q程对象上调用一些方法。它使用了连l序列方式在客户端和服务器端传递数据。RMI是一U被EJB使用的更下层的协议?<br /><br />Java IDL/CORBA <br /><br />在Java IDL的支持下Q开发h员可以将Java和CORBA集成在一赗?他们可以创徏Java对象q之可在CORBA ORB中展开, 或者他们还可以创徏Javacdƈ作ؓ(f)和其它ORB一起展开的CORBA对象的客戗后一U方法提供了另外一U途径Q通过它Java可以被用于将你的新的应用和legacypȝ盔R成?<br /><br />Java Transaction Architecture (JTA)/Java Transaction Service (JTS) <br /><br />JTA定义了一U标准的APIQ应用系l由此可以存取各U事务监控?<br /><br />JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务理器是在高层支持Java Transaction API (JTA)规范Qƈ且在较底层实现OMG OTS specification的Java映像。JTS事务理器ؓ(f)应用服务器、资源管理器、独立的应用以及(qing)通信资源理器提供了事务服务?<br /><br />JavaMail and JavaBeans Activation Framework <br /><br />JavaMail是用于存取邮件服务器的APIQ它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器?<br /><br />JavaMail利用JavaBeans Activation Framework (JAF)来处理MIME-~码的邮仉件。MIME的字节流可以被{换成Java对象Q或者{换自Java对象。由此大多数应用都可以不需要直接用JAF?<br /><br />Java Messaging Service (JMS) <br /><br />JMS是用于和面向消息的中间g怺通信的应用程序接?API)。它既支持点对点的域Q有支持发布/订阅(publish/subscribe)cd的域Qƈ且提供对下列cd的支持:(x)l认可的消息传?事务型消息的传递,一致性消息和h持久性的订阅者支持。JMSq提供了另一U方式来Ҏ(gu)的应用与legacy backendpȝ盔R成?<br /><br />Extensible Markup Language (XML) <br /><br />XML是一U可以用来定义其它标记语a的语a。它被用来在不同的商务过E中׃n数据。XML的发展和Java是相互独立的Q但是,它和Javah的相同目标正是^台独立性。通过Java和XML的组合,(zhn)可以得C个完的hq_独立性的解决Ҏ(gu)。目前正有许多不同的公司在ؓ(f)Java和XML的组合而努力。如果要了解更多的这斚w的信息,可以讉KSun的Java-XML面Q或者IBM developerWorks的XML Zone?<br />API)。它既支持点对点的域Q有支持发布/订阅(publish/subscribe)cd的域Qƈ且提供对下列cd的支持:(x)l认可的消息传?事务型消息的传递,一致性消息和h持久性的订阅者支持。JMSq提供了另一U方式来Ҏ(gu)的应用与legacy backendpȝ盔R成?<br /><br />Extensible Markup Language (XML) <br /><br />XML是一U可以用来定义其它标记语a的语a。它被用来在不同的商务过E中׃n数据。XML的发展和Java是相互独立的Q但是,它和Javah的相同目标正是^台独立性。通过Java和XML的组合,(zhn)可以得C个完的hq_独立性的解决Ҏ(gu)。目前正有许多不同的公司在ؓ(f)Java和XML的组合而努力。如果要了解更多的这斚w的信息,可以讉KSun的Java-XML面Q或者IBM developerWorks的XML Zone?/p> <img src ="http://www.tkk7.com/jiabao/aggbug/102710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jiabao/" target="_blank">金家?/a> 2007-03-09 01:11 <a href="http://www.tkk7.com/jiabao/articles/102710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE架构下系l设计模?/title><link>http://www.tkk7.com/jiabao/articles/102708.html</link><dc:creator>金家?/dc:creator><author>金家?/author><pubDate>Thu, 08 Mar 2007 16:52:00 GMT</pubDate><guid>http://www.tkk7.com/jiabao/articles/102708.html</guid><wfw:comment>http://www.tkk7.com/jiabao/comments/102708.html</wfw:comment><comments>http://www.tkk7.com/jiabao/articles/102708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jiabao/comments/commentRss/102708.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jiabao/services/trackbacks/102708.html</trackback:ping><description><![CDATA[     摘要: 1.1  J2EE 应用模型 J2EE 提供了一个企业的计模型和q行环境用于开发和部v多层分布式结构的应用模型。该模型h重用lg的能力、基于扩展标记语a (XML) 的数据交换、统一的安全模式和灉|的事务控制。它通过提供企业计算环境所必需的各U服务,使得部v? J...  <a href='http://www.tkk7.com/jiabao/articles/102708.html'>阅读全文</a><img src ="http://www.tkk7.com/jiabao/aggbug/102708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jiabao/" target="_blank">金家?/a> 2007-03-09 00:52 <a href="http://www.tkk7.com/jiabao/articles/102708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://fuzhiwushu.com" target="_blank">һëƬһëƬaa</a>| <a href="http://zhaoxinwo.com" target="_blank">˳777߲</a>| <a href="http://86trader.com" target="_blank">jŮjڲվ</a>| <a href="http://chinaedubrand.com" target="_blank">޳_վͼƬ</a>| <a href="http://zengzeyu.com" target="_blank">޾Ʒþþþþþþþþþ</a>| <a href="http://81am.com" target="_blank">ۺɫƵ</a>| <a href="http://2030188.com" target="_blank">ëƬ߲ѹۿ</a>| <a href="http://czhos.com" target="_blank">ѹվ߿ </a>| <a href="http://857434.com" target="_blank">òѸƵ</a>| <a href="http://w9366.com" target="_blank">Ұ߹ۿƵ</a>| <a href="http://91packing.com" target="_blank">㽶һƵ߹ۿ</a>| <a href="http://kdp44.com" target="_blank">avרav</a>| <a href="http://xxxxnii.com" target="_blank">СƵ߲</a>| <a href="http://www-66409b.com" target="_blank">Ļһþ</a>| <a href="http://taoh2517.com" target="_blank">ڵĤѿ </a>| <a href="http://6000cpkj.com" target="_blank">޸һѿ</a>| <a href="http://www454yu.com" target="_blank">Ʒ߹ۿ</a>| <a href="http://222xx8.com" target="_blank">Ļ </a>| <a href="http://7272004.com" target="_blank">Ƶ</a>| <a href="http://zhaoav7.com" target="_blank">߾ƷһС˵</a>| <a href="http://vc77777.com" target="_blank">Ůֻˬ߹ۿ</a>| <a href="http://jastrelax.com" target="_blank">ձһһһ</a>| <a href="http://xj47777.com" target="_blank">ձһaƵѹۿ</a>| <a href="http://789xxoo.com" target="_blank">һƷһAVһи </a>| <a href="http://sdshfengji.com" target="_blank">ɫaѿ</a>| <a href="http://yuntuzy.com" target="_blank">޹˱ɫ</a>| <a href="http://yy1288.com" target="_blank">һ</a>| <a href="http://97chaopeng2.com" target="_blank">츾AV</a>| <a href="http://222941.com" target="_blank">ŷAVר</a>| <a href="http://wua72.com" target="_blank">ձ޾ƷɫӰԺ</a>| <a href="http://zz1965.com" target="_blank">޹ҹƷƬ߲</a>| <a href="http://455zx.com" target="_blank">Ƶվ߲</a>| <a href="http://228609.com" target="_blank">Ʒþþþþ</a>| <a href="http://njchxf.com" target="_blank">Ƭ߹ۿѹۿȫһ </a>| <a href="http://26672814.com" target="_blank">͵޾Ʒ</a>| <a href="http://116com.com" target="_blank">þþþ޹AV鶹</a>| <a href="http://slmlxg.com" target="_blank">һëƬѲ</a>| <a href="http://www398ph.com" target="_blank">һëƬƵ</a>| <a href="http://qmoread.com" target="_blank">þֻƷ10 </a>| <a href="http://bbscqz.com" target="_blank">aëƬ</a>| <a href="http://ssdtsz.com" target="_blank">aëƬ߻վ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>