??xml version="1.0" encoding="utf-8" standalone="yes"?>超碰97在线播放,亚洲日韩中文字幕,国产成人综合视频http://www.aygfsteel.com/sansan/INGzh-cnSat, 05 Jul 2025 17:43:44 GMTSat, 05 Jul 2025 17:43:44 GMT60ExtJS Record ?Store 说明http://www.aygfsteel.com/sansan/archive/2011/04/14/348280.htmlE草E草Thu, 14 Apr 2011 03:20:00 GMThttp://www.aygfsteel.com/sansan/archive/2011/04/14/348280.htmlhttp://www.aygfsteel.com/sansan/comments/348280.htmlhttp://www.aygfsteel.com/sansan/archive/2011/04/14/348280.html#Feedback1http://www.aygfsteel.com/sansan/comments/commentRss/348280.htmlhttp://www.aygfsteel.com/sansan/services/trackbacks/348280.html阅读全文

E草 2011-04-14 11:20 发表评论
]]>
Spring TransactionAttributeshttp://www.aygfsteel.com/sansan/archive/2011/03/29/347176.htmlE草E草Tue, 29 Mar 2011 03:05:00 GMThttp://www.aygfsteel.com/sansan/archive/2011/03/29/347176.htmlhttp://www.aygfsteel.com/sansan/comments/347176.htmlhttp://www.aygfsteel.com/sansan/archive/2011/03/29/347176.html#Feedback0http://www.aygfsteel.com/sansan/comments/commentRss/347176.htmlhttp://www.aygfsteel.com/sansan/services/trackbacks/347176.html

PROPAGATION_REQUIRED--支持当前事务Q如果当前没有事务,新Z个事务。这是最常见的选择?br /> PROPAGATION_SUPPORTS--支持当前事务Q如果当前没有事务,׃非事务方式执行?br /> PROPAGATION_MANDATORY--支持当前事务Q如果当前没有事务,抛出异常?br /> PROPAGATION_REQUIRES_NEW--新徏事务Q如果当前存在事务,把当前事务挂赗?br /> PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作Q如果当前存在事务,把当前事务挂v?br /> PROPAGATION_NEVER--以非事务方式执行Q如果当前存在事务,则抛出异常?br /> PROPAGATION_NESTED--如果当前存在事务Q则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIREDcM的操作?/p>

 

如果出现<prop key="myMethod">PROPAGATION_REQUIRED,readOnly,-Exception </prop>

其中:

-Exception表示有Exception抛出?事务回滚. -代表回滚+׃表提?/p>

readonly 是read only, 讄操作权限为只?一般用于查询的Ҏ,优化作用.



E草 2011-03-29 11:05 发表评论
]]>
q去http://www.aygfsteel.com/sansan/archive/2011/03/25/346988.htmlE草E草Thu, 24 Mar 2011 16:36:00 GMThttp://www.aygfsteel.com/sansan/archive/2011/03/25/346988.htmlhttp://www.aygfsteel.com/sansan/comments/346988.htmlhttp://www.aygfsteel.com/sansan/archive/2011/03/25/346988.html#Feedback0http://www.aygfsteel.com/sansan/comments/commentRss/346988.htmlhttp://www.aygfsteel.com/sansan/services/trackbacks/346988.html旉Nq_是我对他们的记忆都停留在q少。成长年_我们没有问候、没有往来。对彼此生活环境、心灵不了解?不是一个圈子了QE了,了Q忘了?/div>




E草 2011-03-25 00:36 发表评论
]]>
有道?/title><link>http://www.aygfsteel.com/sansan/archive/2011/03/15/346331.html</link><dc:creator>E草</dc:creator><author>E草</author><pubDate>Tue, 15 Mar 2011 09:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/sansan/archive/2011/03/15/346331.html</guid><wfw:comment>http://www.aygfsteel.com/sansan/comments/346331.html</wfw:comment><comments>http://www.aygfsteel.com/sansan/archive/2011/03/15/346331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/sansan/comments/commentRss/346331.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/sansan/services/trackbacks/346331.html</trackback:ping><description><![CDATA[<span style="color: #333333; font-family: Arial, Helvetica, Verdana, sans-serif; font-size: 15px; line-height: 22px; "> <pre class="pdTxtEditorPre" style="line-height: 27px; text-indent: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #333333; font-size: 15px; clear: both; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: 宋体, tahoma, arial, sans-serif; overflow-x: hidden; overflow-y: hidden; white-space: pre-wrap; width: 665px; word-break: break-all; word-wrap: break-word; ">在中国现行的教育情况下,没必要苛求专业与学历。降低硬性条Ӟ用三的人才拿二的工资Q同样可以做Z的事来。而且q样做十分有助于培养团队的稳定性,基本上你培养出来的h都是你的Q流q不会很高。当Ӟ前提是你必须有个好的Z?/pre> </span> <img src ="http://www.aygfsteel.com/sansan/aggbug/346331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/sansan/" target="_blank">E草</a> 2011-03-15 17:32 <a href="http://www.aygfsteel.com/sansan/archive/2011/03/15/346331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windowbuilderhttp://www.aygfsteel.com/sansan/archive/2011/02/24/345028.htmlE草E草Wed, 23 Feb 2011 16:22:00 GMThttp://www.aygfsteel.com/sansan/archive/2011/02/24/345028.htmlhttp://www.aygfsteel.com/sansan/comments/345028.htmlhttp://www.aygfsteel.com/sansan/archive/2011/02/24/345028.html#Feedback0http://www.aygfsteel.com/sansan/comments/commentRss/345028.htmlhttp://www.aygfsteel.com/sansan/services/trackbacks/345028.html 

http://hi.baidu.com/zhiqian528/blog/item/a56a3c0a7ae684850b7b823a.html

E草 2011-02-24 00:22 发表评论
]]>
Hibernate配置属?Qhibernate.max_fetch_depthQ?/title><link>http://www.aygfsteel.com/sansan/archive/2011/02/19/344671.html</link><dc:creator>E草</dc:creator><author>E草</author><pubDate>Sat, 19 Feb 2011 13:39:00 GMT</pubDate><guid>http://www.aygfsteel.com/sansan/archive/2011/02/19/344671.html</guid><wfw:comment>http://www.aygfsteel.com/sansan/comments/344671.html</wfw:comment><comments>http://www.aygfsteel.com/sansan/archive/2011/02/19/344671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/sansan/comments/commentRss/344671.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/sansan/services/trackbacks/344671.html</trackback:ping><description><![CDATA[<table border="1" summary="Hibernate配置属?> <tbody> <tr> <td><tt class="literal">hibernate.dialect</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>Hibernate<tt class="literal">方言QDialectQ?/tt>的类?- 可以让Hibernate使用某些特定的数据库q_的特?/em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">full.classname.of.Dialect</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.default_schema</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>在生成的SQL中,scheml/tablespace的全限定?/em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">SCHEMA_NAME</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.session_factory_name</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>?tt class="literal">SessionFactory</tt>l定到JNDI中去.</em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">jndi/composite/name</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.use_outer_join</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>允许使用外连接抓?</em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">true</tt> | <tt class="literal">false</tt> </p> </td> </tr> <tr> <td><tt style="color: #0000ff" class="literal">hibernate.max_fetch_depth</tt></td> <td style="color: #0000ff"><span id="wmqeeuq" class="emphasis"><em>讄外连接抓取树的最大深?/em></span> <p><span id="wmqeeuq" class="strong">取?</span> 讄?tt class="literal">0</tt>?tt class="literal">3</tt>之间 </p> </td> </tr> <tr> <td><tt class="literal">hibernate.jdbc.fetch_size</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>一个非零|用来军_JDBC的获取量大小?会调用calls <tt class="literal">Statement.setFetchSize()</tt>).</em></span></td> </tr> <tr> <td><tt class="literal">hibernate.jdbc.batch_size</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>一个非零|会开启Hibernate使用JDBC2的批量更新功?/em></span> <p><span id="wmqeeuq" class="strong">取?</span> 值在 <tt class="literal">5</tt> ?<tt class="literal">30</tt>之间?</p> </td> </tr> <tr> <td><tt class="literal">hibernate.jdbc.use_scrollable_resultset</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>允许Hibernate使用JDBC2提供的可滚动l果集。只有在使用用户自行提供的连接时Q这个参数才是必需的。否则Hibernate会用连接的元数?metadata)?/em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">true</tt> | <tt class="literal">false</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.jdbc.use_streams_for_binary</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>在从JDBCd<tt class="literal">binaryQ二q制Q?/tt>或?tt class="literal">serializableQ可序列化)</tt>cd?是否使用stream()</em></span>. q是一个系l别的属性? <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">true</tt> | <tt class="literal">false</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.cglib.use_reflection_optimizer</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>是否使用CGLIB来代替运行时反射操作。(pȝU别属性,默认为在可能旉使用CGLIBQ?在调试的时候有时候用反会有用?/em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">true</tt> | <tt class="literal">false</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.jndi.<span id="wmqeeuq" class="emphasis"><em><propertyName></em></span></tt></td> <td><span id="wmqeeuq" class="emphasis"><em>?tt class="literal">propertyName</tt>q个属性传递到JNDI <tt class="literal">InitialContextFactory</tt>?/em></span> (可? </td> </tr> <tr> <td><tt class="literal">hibernate.connection.isolation</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>事务隔离U别</em></span> (可? <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">1, 2, 4, 8</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.connection.<span id="wmqeeuq" class="emphasis"><em><propertyName></em></span></tt></td> <td><span id="wmqeeuq" class="emphasis"><em>?<tt class="literal">propertyName</tt>q个JDBC 属性传递到<tt class="literal">DriverManager.getConnection()</tt>?/em></span>. </td> </tr> <tr> <td><tt class="literal">hibernate.connection.provider_class</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>指定一个自定义?tt class="literal">ConnectionProvider</tt>cd</em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">classname.of.ConnectionProvider</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.cache.provider_class</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>指定一个自定义?tt class="literal">CacheProvider</tt>~存提供者的cd</em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">classname.of.CacheProvider</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.transaction.factory_class</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>指定一个自定义?tt class="literal">TransactionFactory</tt>cdQHibernate Transaction API会使用.</em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">classname.of.TransactionFactory</tt> </p> </td> </tr> <tr> <td><tt class="literal">jta.UserTransaction</tt></td> <td><span id="wmqeeuq" class="emphasis"><em><tt class="literal">JTATransactionFactory</tt> 用来获取JTA <tt class="literal">UserTransaction</tt>的JNDI?</em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">jndi/composite/name</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.transaction.manager_lookup_class</tt></td> <td><span id="wmqeeuq" class="emphasis"><em><tt class="literal">TransactionManagerLookup</tt>的类?- 当在JTA环境中,JVMU别的缓存被打开的时候?</em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">classname.of.TransactionManagerLookup</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.query.substitutions</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>把Hibernate查询中的一些短语映ؓSQL短语。(比如说短语可能是函数或者字W) .</em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.show_sql</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>把所有的SQL语句都输出到控制?可以作ؓlog功能的一个替?.</em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">true</tt> | <tt class="literal">false</tt> </p> </td> </tr> <tr> <td><tt class="literal">hibernate.hbm2ddl.auto</tt></td> <td><span id="wmqeeuq" class="emphasis"><em>自动输出schema创徏DDL语句.</em></span> <p><span id="wmqeeuq" class="strong">取?</span> <tt class="literal">update</tt> | <tt class="literal">create</tt> | <tt class="literal">create-drop</tt> </p> </td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/sansan/aggbug/344671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/sansan/" target="_blank">E草</a> 2011-02-19 21:39 <a href="http://www.aygfsteel.com/sansan/archive/2011/02/19/344671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate 延迟加蝲问题探讨http://www.aygfsteel.com/sansan/archive/2011/02/18/344629.htmlE草E草Fri, 18 Feb 2011 09:24:00 GMThttp://www.aygfsteel.com/sansan/archive/2011/02/18/344629.htmlhttp://www.aygfsteel.com/sansan/comments/344629.htmlhttp://www.aygfsteel.com/sansan/archive/2011/02/18/344629.html#Feedback0http://www.aygfsteel.com/sansan/comments/commentRss/344629.htmlhttp://www.aygfsteel.com/sansan/services/trackbacks/344629.htmlhibernate 延迟加蝲问题探讨
文章出处Q?a >http://fangyong2006.javaeye.com/blog/117555
但就此说一下关于lazy机制
延迟初始化错误是q用Hibernate开发项目时最常见的错误。如果对一个类或者集合配|了延迟索策略,那么必须当代理类实例或代理集合处于持久化状态(卛_于Session范围内)Ӟ才能初始化它。如果在游离状态时才初始化它,׃产生延迟初始化错误?

下面把Customer.hbm.xml文g?lt;class>元素的lazy属性设为trueQ表CZ用gq检索策略:

<class name="mypack.Customer" table="CUSTOMERS" lazy="true">

当执行Session的load()ҎӞHibernate不会立即执行查询CUSTOMERS表的select语句Q仅仅返回Customercȝ代理cȝ实例Q这个代理类L以下特征Q?

Q?Q?由Hibernate在运行时动态生成,它扩展了Customerc,因此它承了Customercȝ所有属性和ҎQ但它的实现对于应用E序是透明的?
Q?Q?当Hibernate创徏Customer代理cd例时Q仅仅初始化了它的OID属性,其他属性都为nullQ因此这个代理类实例占用的内存很?
Q?Q当应用E序W一ơ访问Customer代理cd例时Q例如调用customer.getXXX()或customer.setXXX()ҎQ, Hibernate会初始化代理cd例,在初始化q程中执行select语句Q真正从数据库中加蝲Customer对象的所有数据。但有个例外Q那是当应用程序访问Customer代理cd例的getId()ҎӞHibernate不会初始化代理类实例Q因为在创徏代理cd例时OID存在了Q不必到数据库中L询?

提示QHibernate采用CGLIB工具来生成持久化cȝ代理cRCGLIB是一个功能强大的Java字节码生成工P它能够在E序q行时动态生成扩?JavacL者实现Java接口的代理类。关于CGLIB的更多知识,请参考:http://cglib.sourceforge.net/?

以下代码先通过Session的load()Ҏ加蝲Customer对象Q然后访问它的name属性:

tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
customer.getName();
tx.commit();

在运行session.load()Ҏ时Hibernate不执行Q何select语句Q仅仅返回Customercȝ代理cȝ实例Q它的OID?Q这是由load()Ҏ的第二个参数指定的。当应用E序调用customer.getName()ҎӞHibernate会初始化Customer代理cd例,从数据库中加载Customer对象的数据,执行以下select语句Q?

select * from CUSTOMERS where ID=1;
select * from ORDERS where CUSTOMER_ID=1;

?lt;class>元素的lazy属性ؓtrueQ会影响Session的load()Ҏ的各U运行时行ؓQ下面D例说明?

1Q如果加载的Customer对象在数据库中不存在QSession的load()Ҏ不会抛出异常Q只有当q行customer.getName()Ҏ时才会抛Z下异常:

ERROR LazyInitializer:63 - Exception initializing proxy
net.sf.hibernate.ObjectNotFoundException: No row with the given identifier exists: 1, of class:
mypack.Customer

2Q如果在整个Session范围内,应用E序没有讉KqCustomer对象Q那么Customer代理cȝ实例一直不会被初始化,Hibernate不会执行Mselect语句。以下代码试囑֜关闭Session后访问Customer游离对象Q?

tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
tx.commit();
session.close();
customer.getName();

׃引用变量customer引用的Customer代理cȝ实例在Session范围内始l没有被初始化,因此在执行customer.getName()ҎӞHibernate会抛Z下异常:

ERROR LazyInitializer:63 - Exception initializing proxy
net.sf.hibernate.HibernateException: Could not initialize proxy - the owning Session was closed

由此可见QCustomer代理cȝ实例只有在当前Session范围内才能被初始化?

3Qnet.sf.hibernate.Hibernatecȝinitialize()静态方法用于在Session范围内显式初始化代理cd例,isInitialized()Ҏ用于判断代理cd例是否已l被初始化。例如:

tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
if(!Hibernate.isInitialized(customer))
Hibernate.initialize(customer);
tx.commit();
session.close();
customer.getName();

以上代码在Session范围内通过Hibernatecȝinitialize()Ҏ昑ּ初始化了Customer代理cd例,因此当Session关闭后,可以正常讉KCustomer游离对象?

4Q当应用E序讉K代理cd例的getId()ҎӞ不会触发Hibernate初始化代理类实例的行为,例如Q?

tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
customer.getId();
tx.commit();
session.close();
customer.getName();

当应用程序访问customer.getId()ҎӞ该方法直接返回Customer代理cd例的OID|无需查询数据库。由于引用变?customer始终引用的是没有被初始化的Customer代理cd例,因此当Session关闭后再执行customer.getName()ҎQ?Hibernate会抛Z下异常:

ERROR LazyInitializer:63 - Exception initializing proxy
net.sf.hibernate.HibernateException: Could not initialize proxy - the owning Session was closed


解决ҎQ?

׃hibernate采用了lazy=true,q样当你用hibernate查询?q回实际为利用cglib增强的代理类,但其q没有实际填?当你在前?利用它来取?getXXX)?q时Hibernate才会到数据库执行查询,q填充对?但此时如果和q个代理cȝ关的session已关闭掉,׃产生U错?
在做一对多Ӟ有时会出?could not initialize proxy - clothe owning Session was sed,q个好像是hibernate的缓存问?问题解决:需要在<many-to-one>里设|lazy="false". 但有可能会引发另一个异常叫

failed to lazily initialize a collection of role: XXXXXXXX, no session or session was closed


解决Ҏ:在web.xml中加?
<filter>
  <filter-name>hibernateFilter</filter-name>
  <filter-class>
  org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
  </filter-class>
</filter
<filter-mapping>
  <filter-name>hibernateFilter</filter-name>
  <url-pattern>*.do</url-pattern>
</filter-mapping>
可以了;

参考了:
Hibernate与gq加载:

Hibernate对象关系映射提供延迟的与非gq的对象初始化。非延迟加蝲在读取一个对象的时候会与q个对象所有相关的其他对象一赯取出来。这有时会导致成癄Q如果不是成千的话)select语句在读取对象的时候执行。这个问题有时出现在使用双向关系的时候,l常会导致整个数据库都在初始化的阶段被读出来了。当Ӟ你可以不厌其烦地查每一个对象与其他对象的关p,q把那些最昂贵的删除,但是到最后,我们可能会因此失M本想在ORM工具中获得的便利?


一个明昄解决Ҏ是用Hibernate提供的gq加载机制。这U初始化{略只在一个对象调用它的一对多或多对多关系时才关pd象读取出来。这个过E对开发者来说是透明的,而且只进行了很少的数据库操作hQ因此会得到比较明显的性能提升。这Ҏ术的一个缺h延迟加蝲技术要求一个Hibernate会话要在对象使用的时候一直开着。这会成为通过使用DAO模式持久层抽象出来时的一个主要问题。ؓ了将持久化机制完全地抽象出来Q所有的数据库逻辑Q包括打开或关闭会话,都不能在应用层出现。最常见的是Q一些实C单接口的DAO实现cd数据库逻辑完全装h了。一U快速但是笨拙的解决Ҏ是放弃DAO模式Q将数据库连接逻辑加到应用层中来。这可能对一些小的应用程序有效,但是在大的系l中Q这是一个严重的设计~陷Q妨了pȝ的可扩展性?

在Web层进行gq加?

q运的是QSpring框架为Hibernate延迟加蝲与DAO模式的整合提供了一U方便的解决Ҏ。对那些不熟悉Spring与Hibernate集成使用的hQ我不会在这里讨多的l节Q但是我你去了解Hibernate与Spring集成的数据访问。以一个Web应用ZQSpring提供了OpenSessionInViewFilter和OpenSessionInViewInterceptor。我们可以随意选择一个类来实现相同的功能。两U方法唯一的不同就在于interceptor在Spring容器中运行ƈ被配|在web应用的上下文中,而Filter在Spring之前q行q被配置在web.xml中。不用哪个Q他们都在请求将当前会话与当前(数据库)U程l定时打开Hibernate会话。一旦已l定到线E,q个打开了的Hibernate会话可以在DAO实现cM透明C用。这个会话会为gq加载数据库中值对象的视图保持打开状态。一旦这个逻辑视图完成了,Hibernate会话会在Filter的doFilterҎ或者Interceptor的postHandleҎ中被关闭。下面是每个lg的配|示例:



Interceptor的配|?


<beans>
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="openSessionInViewInterceptor"/>
</list>
</property>
<property name="mappings">

</bean>

<bean name="openSessionInViewInterceptor"
class="org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor">
<property name="sessionFactory"><ref bean="sessionFactory"/></property>
</bean>
</beans>

Filter的配|?


<web-app>

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate.support.OpenSessionInViewFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*. spring </url-pattern>
</filter-mapping>

</web-app>


实现Hibernate的Dao接口来用打开的会话是很容易的。事实上Q如果你已经使用了Spring框架来实C的Hibernate Dao,很可能你不需要改变Q何东ѝ方便的HibernateTemplate公用lg使访问数据库变成菜一,而DAO接口只有通过q个lg才可以访问到数据库。下面是一个示例的DAOQ?


public class HibernateProductDAO extends HibernateDaoSupport implements ProductDAO {

public Product getProduct(Integer productId) {
return (Product)getHibernateTemplate().load(Product.class, productId);
}

public Integer saveProduct(Product product) {
return (Integer) getHibernateTemplate().save(product);
}

public void updateProduct(Product product) {
getHibernateTemplate().update(product);
}
}


在业务逻辑层中使用延迟加蝲

即在视囑֤面,Spring框架也通过使用AOP 拦截?HibernateInterceptor来得gq加载变得很Ҏ实现。这个Hibernate 拦截器透明地将调用配置在Spring应用E序上下文中的业务对象中Ҏ的请求拦截下来,在调用方法之前打开一个Hibernate会话Q然后在Ҏ执行完之后将会话关闭。让我们来看一个简单的例子Q假设我们有一个接口BussinessObjectQ?


public  interface  BusinessObject  {
public  void  doSomethingThatInvolvesDaos();
}
cBusinessObjectImpl实现了BusinessObject接口:

public  class  BusinessObjectImpl  implements  BusinessObject  {
public  void  doSomethingThatInvolvesDaos()  {
//  lots of logic that calls
//  DAO classes Which access
//  data objects lazily
}
}



通过在Spring应用E序上下文中的一些配|,我们可以让将调用BusinessObject的方法拦截下来,再o它的Ҏ支持延迟加蝲。看看下面的一个程序片D:



<beans>
<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="businessObjectTarget" class="com.acompany.BusinessObjectImpl">
<property name="someDAO"><ref bean="someDAO"/></property>
</bean>
<bean id="businessObject" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target"><ref bean="businessObjectTarget"/></property>
<property name="proxyInterfaces">
<value>com.acompany.BusinessObject</value>
</property>
<property name="interceptorNames">
<list>
<value>hibernateInterceptor</value>
</list>
</property>
</bean>
</beans>

当businessObject被调用的时候,HibernateInterceptor打开一个Hibernate会话Qƈ调用请求传递给BusinessObjectImpl对象。当BusinessObjectImpl执行完成后,HibernateInterceptor透明地关闭了会话。应用层的代码不用了解Q何持久层逻辑Q还是实C延迟加蝲?


在单元测试中试延迟加蝲

最后,我们需要用J-Unit来测试我们的延迟加蝲E序。我们可以轻易地通过重写TestCasecM的setUp和tearDownҎ来实现这个要求。我比较喜欢用这个方便的抽象cM为我所有测试类的基cR?


public abstract class MyLazyTestCase extends TestCase {

private SessionFactory sessionFactory;
private Session session;

public void setUp() throws Exception {
super.setUp();
SessionFactory sessionFactory = (SessionFactory) getBean("sessionFactory");
session = SessionFactoryUtils.getSession(sessionFactory, true);
Session s = sessionFactory.openSession();
TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(s));

}

protected Object getBean(String beanName) {
//Code to get objects from Spring application context
}

public void tearDown() throws Exception {
super.tearDown();
SessionHolder holder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory);
Session s = holder.getSession();
s.flush();
TransactionSynchronizationManager.unbindResource(sessionFactory);
SessionFactoryUtils.closeSessionIfNecessary(s, sessionFactory);
}
}



E草 2011-02-18 17:24 发表评论
]]>
encodeURI ,encodeURIComponenthttp://www.aygfsteel.com/sansan/archive/2011/02/16/344435.htmlE草E草Wed, 16 Feb 2011 04:13:00 GMThttp://www.aygfsteel.com/sansan/archive/2011/02/16/344435.htmlhttp://www.aygfsteel.com/sansan/comments/344435.htmlhttp://www.aygfsteel.com/sansan/archive/2011/02/16/344435.html#Feedback0http://www.aygfsteel.com/sansan/comments/commentRss/344435.htmlhttp://www.aygfsteel.com/sansan/services/trackbacks/344435.html
找了很久?encodeURI 试了下不行,最后找?encodeURIComponent 可以?br />
原来Q?br />     
   encodeURI不对下列字符q行URL~码Q?#8220;:”?#8220;/”?#8220;;”'&'“?”{等?
   el:
      encodeURI('/?&惔') ,   l果Q?/?&%E7%A5%9E%E6%B3%A5


   encodeURIComponentҎ对所有字WURL~码
   el:
     encodeURIComponent('/?&惔')  , l果Q?u>%2F%3F%26%E7%A5%9E%E6%B3%A5



E草 2011-02-16 12:13 发表评论
]]>
ANT-build.xml文g详解http://www.aygfsteel.com/sansan/archive/2011/02/16/344426.htmlE草E草Wed, 16 Feb 2011 03:41:00 GMThttp://www.aygfsteel.com/sansan/archive/2011/02/16/344426.htmlhttp://www.aygfsteel.com/sansan/comments/344426.htmlhttp://www.aygfsteel.com/sansan/archive/2011/02/16/344426.html#Feedback0http://www.aygfsteel.com/sansan/comments/commentRss/344426.htmlhttp://www.aygfsteel.com/sansan/services/trackbacks/344426.html

转蝲Qhttp://www.aygfsteel.com/zhengtengfeng/archive/2007/04/20/zhtfeng.html

Ant的概?br /> 可能有些读者ƈ不连接什么是Ant以及入可使用它,但只要用通过Linuxpȝ得读者,应该知道

makeq个命o。当~译Linux内核及一些Y件的源程序时Q经常要用这个命令。Make命o其实?/font>

是一个项目管理工P而Ant所实现功能与此cM。像makeQgnumake和nmakeq些~译工具都有

一定的~陷Q但是Ant却克服了q些工具的缺陗最初Ant开发者在开发跨q_的应用时Q用样也

是基于这些缺陷对Ant做了更好的设计?/font>

Ant ?makefile
Makefile有一些不之处,比如很多人都会碰到的烦h的Tab问题。最初的Ant开发者多ơ强?#8221;

只是我在Tab前面加了一个空|所以我的命令就不能执行”。有一些工具在一定程度上解决?/font>

q个问题Q但q是有很多其他的问题。Ant则与一般基于命令的工具有所不同Q它是Javacȝ?/font>

展。Antq行需要的XML格式的文件不是Shell命o文g。它是由一个Projectl成的,而一?/font>

Project又可分成可多targetQtarget再细分又分成很多taskQ每一个task都是通过一个实现特

定接口的javacL完成的?/font>

Ant的优?/font>

Ant是Apache软g基金会JAKARTA目录中的一个子目Q它有以下的优点?br /> 跨^台性。Ant是存Java语言~写的,所C具有很好的跨^台性?br /> 操作单。Ant是由一个内|Q务和可选Q务组成的。Antq行旉要一个XML文g(构徏文g)?/font>

Ant通过调用target树,可以执行各Utask。每个task实现了特定接口对象。由于Ant构徏文g

时XML格式的文Ӟ所以和Ҏl护和书写,而且l构很清晰?br /> Ant可以集成到开发环境中。由于Ant的跨q_性和操作单的特点Q它很容易集成到一些开发环

境中厅R?/font>

Ant 开?/font>

Ant的构建文?br /> 当开始一个新的项目时Q首先应该编写Ant构徏文g。构建文件定义了构徏q程Qƈ被团队开?/font>

中每个h使用。Ant构徏文g默认命名为build.xmlQ也可以取其他的名字。只不过在运行的时?/font>

把这个命名当作参ClAnt。构建文件可以放在Q何的位置。一般做法是攑֜目层目录?/font>

Q这样可以保持项目的z和清晰。下面是一个典型的目层次l构?br /> (1) src存放文g?br /> (2) class存放~译后的文g?br /> (3) lib存放W三方JAR包?br /> (4) dist存放打包Q发布以后的代码?br /> Ant构徏文g是XML文g。每个构建文件定义一个唯一的项?Project元素)。每个项目下可以?/font>

义很多目?target元素)Q这些目标之间可以有依赖关系。当执行q类目标Ӟ需要执行他们所

依赖的目标?br /> 每个目标中可以定义多个Q务,目标中还定义了所要执行的d序列。Ant在构建目标时必须?/font>

用所定义的Q务。Q务定义了Ant实际执行的命令。Ant中的d可以?cR?br /> Q?Q?nbsp;核心d。核心Q务是Ant自带的Q务?br /> Q?Q?nbsp;可选Q务。可选Q务实来自W三方的dQ因此需要一个附加的JAR文g?br /> Q?Q?nbsp;用户自定义的d。用戯定义的Q务实用户自己开发的d?br /> 1.<project>标签
  每个构徏文g对应一个项目?lt;project>标签时构建文件的Ҏ{。它可以有多个内在属性,

如代码中所C,其各个属性的含义分别如下?br /> (1) default表示默认的运行目标,q个属性是必须的?br /> (2) basedir表示目的基准目录?br /> (3) name表示目名?br /> (4) description表示目的描q?br /> 每个构徏文g都对应于一个项目,但是大型目l常包含大量的子目Q每一个子目都可以有

自己的构建文件?/font>

2.<target>标签
一个项目标{下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例

如,有一个target用于~译E序Q另一个target用于声称可执行文件。在生成可执行文件之前必

d~译该文Ӟ因策可执行文件的target依赖于编译程序的target。Target的所有属性如下?br /> (1).name表示标明Q这个属性是必须的?br /> (2).depends表示依赖的目标?br /> (3)if表示仅当属性设|时才执行?br /> (4)unless表示当属性没有设|时才执行?br /> (5)description表示目的描q?br /> Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现序依次执行

每个target。在执行之前Q首先需要执行它所依赖的target。程序中的名为run的target?/font>

depends属性compileQ而名为compile的target的depends属性是prepareQ所以这几个target?/font>

行的序是prepare->compile->run?br /> 一个target只能被执行一ơ,即有多个target依赖于它。如果没有if或unless属性,target?/font>

会被执行?/font>

3.<mkdir>标签
该标{于创Z个目录,它有一个属性dir用来指定所创徏的目录名Q其代码如下Q?br /> <mkdir dir=”Q{class.root}”/>
通过以上代码创Z一个目录,q个目录已经被前面的property标签所指定?/font>

4<jar>标签
该标{来生成一个JAR文gQ其属性如下?br /> (1) destfile表示JAR文g名?br /> (2) basedir表示被归档的文g名?br /> (3) includes表示别归档的文g模式?br /> (4) exchudes表示被排除的文g模式?/font>

5Q?lt;javac标签>
该标{于编译一个或一ljava文gQ其属性如下?br /> (1).srcdir表示源程序的目录?br /> (2).destdir表示class文g的输出目录?br /> (3).include表示被编译的文g的模式?br /> (4).excludes表示被排除的文g的模式?br /> (5).classpath表示所使用的类路径?br /> (6).debug表示包含的调试信息?br /> (7).optimize表示是否使用优化?br /> (8).verbose 表示提供详细的输Z息?br /> (9).fileonerror表示当碰到错误就自动停止?/font>

6Q?lt;java>标签
该标{来执行编译生成的.class文gQ其属性如下?br /> (1).classname 表示执行的cd?br /> (2).jar表示包含该类的JAR文g名?br /> (3).classpath所表示用到的类路径?br /> (4).fork表示在一个新的虚拟机中运行该cR?br /> (5).failonerror表示当出现错误时自动停止?br /> (6).output 表示输出文g?br /> (7).append表示q加或者覆盖默认文件?/font>

7.<delete>标签
该标{于删除一个文件或一l文Ӟd性如下?br /> (1)/file表示要删除的文g?br /> (2).dir表示要删除的目录?br /> (3).includeEmptyDirs 表示指定是否要删除空目录Q默认值是删除?br /> (4).failonerror 表示指定当碰到错误是否停止,默认值是自动停止?br /> (5).verbose表示指定是否列出所删除的文Ӟ默认gؓ不列出?/font>

8.<copy>标签
该标{于文件或文g集的拯Q其属性如下?br /> (1).file 表示源文件?br /> (2).tofile 表示目标文g?br /> (3).todir 表示目标目录?br /> (4).overwrite 表示指定是否覆盖目标文gQ默认值是不覆盖?br /> (5).includeEmptyDirs 表示制定是否拯I目录,默认gؓ拯?br /> (6).failonerror 表示指定如目标没有发现是否自动停止,默认值是停止?br /> (7).verbose 表示制定是否昄详细信息Q默认g昄?/font>

Ant的数据类?br /> 在构建文件中Z标识文g或文件组Q经帔R要用数据类型。数据类型包含在

org.apache.tool.ant.types包中。下面镜单介l构建文件中一些常用的数据cd?/font>

1. argument cd
 由Ant构徏文g调用的程序,可以通过<arg>元素向其传递命令行参数Q如apply,exec和java?/font>

务均可接受嵌?lt;arg>元素Q可以ؓ各自的过E调用指定参数。以下是<arg>的所有属性?br /> (1).values 是一个命令参数。如果参数种有空|但又惛_它作为单独一个|则用此属?/font>

?br /> (2).file表示一个参数的文g名。在构徏文g中,此文件名相对于当前的工作目录?br /> (3).line表示用空格分隔的多个参数列表?br /> (4).path表示路径?/font>

2.ervironment cd
  由Ant构徏文g调用的外部命令或E序Q?lt;env>元素制定了哪些环境变量要传递给正在执行的系

l命令,<env>元素可以接受以下属性?br /> (1).file表示环境变量值得文g名。此文g名要被{换位一个绝对\径?br /> (2).path表示环境变量的\径。Ant会将它{换ؓ一个本地约定?br /> (3).value 表示环境变量的一个直接变量?br /> (4).key 表示环境变量名?br /> 注意  file path ?value只能取一个?/font>

3.filelistcd
 Filelist 是一个支持命名的文g列表的数据类型,包含在一个filelistcd中的文g不一定是

存在的文件。以下是其所有的属性?br /> (1).dir是用于计绝Ҏ件名的目录?br /> (2).files 是用逗号分隔的文件名列表?br /> (3).refid 是对某处定义的一?lt;filelist>的引用?br /> 注意  dir ?files 都是必要的,除非指定了refid(q种情况下,dir和files都不允许使用)?/font>

4.filesetcd
Fileset 数据cd定义了一l文Ӟq常表示?lt;fileset>元素。不q,许多antd构徏成了

隐式的fileset,q说明他们支持所有的fileset属性和嵌套元素。以下ؓfileset 的属性列表?br /> (1).dir表示fileset 的基目录?br /> (2).casesensitive的值如果ؓfalseQ那么匹配文件名Ӟfileset不是区分大小写的Q其默认

gؓtrue.
(3).defaultexcludes 用来定是否使用默认的排除模式,默认为true?br /> (4).excludes 是用逗号分隔的需要派出的文g模式列表?br /> (5).excludesfile 表示每行包含一个排除模式的文g的文件名?br /> (6).includes 是用逗号分隔的,需要包含的文g模式列表?br /> (7).includesfile 表示每行包括一个包含模式的文g名?/font>

5.patternset cd
Fileset 是对文g的分l,而patternset是对模式的分l,他们是紧密相关的概念?/font>

<patternset>支持4个属性:includes excludex includexfile ?excludesfile,与fileset?/font>

同。Patternset q允总下嵌套元素:include,exclude,includefile ?excludesfile.

6.filterset cd
Filterset定义了一l过滤器Q这些过滤器在文gUd或复制时完成文g的文本替换?br /> 主要属性如下:
(1).begintoken 表示嵌套qo器所搜烦的记Pq是标识其开始的字符丌Ӏ?br /> (2).endtoken表示嵌套qo器所搜烦的记可是标识其l束的字W串?br /> (3).id是过滤器的唯一标志W?br /> (4).refid是对构徏文g中某处定义一个过滤器的引用?/font>

7.Pathcd
Path元素用来表示一个类路径Q不q它q可以用于表C其他的路径。在用作揖个属性时Q\l中

的各用分号或冒号隔开。在构徏的时候,此分隔符代替当前^C所有的路径分隔W,其拥

有的属性如下?br /> (1).location 表示一个文件或目录。Ant在内部将此扩展ؓ一个绝对\径?br /> (2).refid 是对当前构徏文g中某处定义的一个path的引用?br /> (3).path表示一个文件或路径名列表?/font>

8.mappercd
Mappercd定义了一l输入文件和一l输出文仉的关p,其属性如下?br /> (1).classname 表示实现mappercȝcd。当内置mapper不满求时Q用于创建定制mapper.
(2).classpath表示查找一个定制mapper时所用的cd路径?br /> (3).classpathref是对某处定义的一个类路径的引用?br /> (4).from属性的含义取决于所用的mapper.
(5).to属性的含义取决于所用的mapper.
(6).type属性的取gؓidentityQflatten glob merge  regexp  其中之一Q它定义了要是用?/font>

内置mapper的类型?/font>


Ant 的运?br /> 安装好Antq且配置好\径之后,在命令行中切换到构徏文g的目录,输入Ant命o可以运?/font>

Ant.若没有指定Q何参敎ͼAnt会在当前目录下查询build.xml文g。如果找Cq该文件作?/font>

构徏文g。如果用了 –find 选项QAnt ׃在上U目录中找构建文Ӟ直至到达文gpȝ?/font>

跟目录。如果构建文件的名字不是build.xml Q则Antq行的时候就可以使用 –buildfile file

,q里file 指定了要使用的构建文件的名称Q示例如下:
Ant
如下说明了表C当前目录的构徏文g为build.xml q行 ant 执行默认的目标?/font>

Ant –buildfile  test.xml
使用当前目录下的test.xml 文gq行Ant ,执行默认的目?/font>



E草 2011-02-16 11:41 发表评论
]]>
վ֩ģ壺 Ϫ| ƽ| | | | | ˶| Ͼ| | | Դ| | ̶| | ʳ| | | | ͬ| ڶ| ױ| ɽ| ͨ| | | | | Ƥɽ| ƽ̶| | | ͨ| | | | | ½| ϰ| ɽ| | |