??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久中文,中文字幕亚洲一区二区三区,亚洲人成电影网站http://www.aygfsteel.com/byterat/category/16470.htmlzh-cnFri, 30 Mar 2007 09:09:14 GMTFri, 30 Mar 2007 09:09:14 GMT60(?spring事务探烦http://www.aygfsteel.com/byterat/archive/2007/03/05/101915.html比特?/dc:creator>比特?/author>Mon, 05 Mar 2007 06:45:00 GMThttp://www.aygfsteel.com/byterat/archive/2007/03/05/101915.htmlhttp://www.aygfsteel.com/byterat/comments/101915.htmlhttp://www.aygfsteel.com/byterat/archive/2007/03/05/101915.html#Feedback0http://www.aygfsteel.com/byterat/comments/commentRss/101915.htmlhttp://www.aygfsteel.com/byterat/services/trackbacks/101915.html spring事务探烦

原文出处:
http://www.javaeye.com/topic/11190

spring自徏事务理模块。而且q个事务理是一个抽象设计,可以应用到很多场合,包括普通的DataSourceQjtaQjms和hibernate上?/font>

要正用spring的事务,首先需要了解spring在事务设计上的一些概?
l观spring事务Q围l着两个核心PlatformTransactionManager和TransactionStatus

PlatformTransactionManager直译q来是q_相关事务Q这里的q_指的是“事务源”,包括刚才我说的DataSourceQjta{等。这些无一不是一个事务源。广义的_凡是可以完成事务性操作的对象Q都可以设计出相对应的PlatformTransactionManagerQ只要这个事务源支持commitQrollback和getTransaction语意?/font>

查看spring代码Q可以发现这些manager实现事务Q就是调用事务源的事务操作方?/font>

比如

HibernateTransactionManager

代码

 

  1. protected   void  doCommit(DefaultTransactionStatus status) {   
  2.         HibernateTransactionObject txObject = (HibernateTransactionObject) status.getTransaction();   
  3.          if  (status.isDebug()) {   
  4.             logger.debug( "Committing Hibernate transaction on session ["  +   
  5.                     txObject.getSessionHolder().getSession() +  "]" );   
  6.         }   
  7.          try  {   
  8.             txObject.getSessionHolder().getTransaction().commit();   
  9.         }   
  10. ...   
  11.   
  12.     }  

jdbc 的DataSourceTransactionManager

代码

 

  1. protected   void  doCommit(DefaultTransactionStatus status) {   
  2.         DataSourceTransactionObject txObject = (DataSourceTransactionObject) status.getTransaction();   
  3.         Connection con = txObject.getConnectionHolder().getConnection();   
  4.          if  (status.isDebug()) {   
  5.             logger.debug( "Committing JDBC transaction on connection ["  + con +  "]" );   
  6.         }   
  7.          try  {   
  8.             con.commit();   
  9.         }   
  10.         ...   
  11.     }  

那么PlatformTransactionManager以什么依据处理事务呢Q?
是TransactionStatus
查看api发现q个接口有三个方?
isNewTransaction() QisRollbackOnly()QsetRollbackOnly()
PlatformTransactionManager是Ҏ前两个方法决定是否要创徏一个新事务Q是要递交q是回滚。至于第三个Ҏ是改变事务当前状态的Q很多地斚w要用刎ͼ偏偏PlatformTransactionManager自n好像不怎么用,毕竟事务状态的改变是由E序员代码决定的Q不需要一个manager多管闲事?/font>

ȝ上面所说的Qspring的事务由PlatformTransactionManager理Qmanager最后调用事务源的方法来实现一个事务过E。而manager通过TransactionStatus 来决定如何实现?

接下去说spring事务中的TransactionTemplate和TransactionInterceptor

TransactionTemplate其实和spring中其他的template的作用类|起到化简代码的作用,不要被它那么长的名字吓倒了Q事实上q个templateq不是什么非常核心的对象。如果比较学I派的,可以ȝ看template设计模式Q在此就不再Ҏ赘述了?
Z么要有TransactionTemplateQ先来看看如果没有TransactionTemplateQ我们的代码该怎么?/font>

先来看看spring reference中的一D代?

代码

 

  1. DefaultTransactionDefinition def =  new  DefaultTransactionDefinition()   
  2. def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);   
  3.   
  4. TransactionStatus status = transactionManager.getTransaction(def);   
  5.   
  6. try  {   
  7.      // execute your business logic here   
  8. catch  (MyException ex) {   
  9.     transactionManager.rollback(status);   
  10.      throw  ex;   
  11. }   
  12. transactionManager.commit(status);  


q是直接使用transactionManager的例子,可以看到真正执行business logic 的地Ҏ在try当中那段Q前后的代码都是Z完成事务理的。如果每个business logic都要写上那么一D,我肯定是疯了。我们翻出TransactionTemplate的代码看看他怎么化简了我们的代码

代码

 

  1. public  Object execute(TransactionCallback action)  throws  TransactionException {   
  2.         TransactionStatus status =  this .transactionManager.getTransaction( this );   
  3.         Object result =  null ;   
  4.          try  {   
  5.             result = action.doInTransaction(status);   
  6.         }   
  7.          catch  (RuntimeException ex) {   
  8.              // transactional code threw application exception -> rollback   
  9.             rollbackOnException(status, ex);   
  10.              throw  ex;   
  11.         }   
  12.          catch  (Error err) {   
  13.              // transactional code threw error -> rollback   
  14.             rollbackOnException(status, err);   
  15.              throw  err;   
  16.         }   
  17.          this .transactionManager.commit(status);   
  18.          return  result;   
  19.     }  

同上面的代码如出一辙,前后是事务处理代码,当中那段result = action.doInTransaction(status);是我们的应用代码。至于action是什么,全看各位的需要了。但是有一点要主要Q如果利用TransactionTemplateQ那么他不管你扔Z么异帔R会回滚事务,但是回滚的是哪个事务呢?l箋挖代?

代码

 

  1. private   void  rollbackOnException(TransactionStatus status, Throwable ex)  throws  TransactionException {   
  2.          if  (logger.isDebugEnabled()) {   
  3.             logger.debug( "Initiating transaction rollback on application exception" , ex);   
  4.         }   
  5.          try  {   
  6.              this .transactionManager.rollback(status);   
  7.         }   
  8.          catch  (RuntimeException ex2) {   
  9.             logger.error( "Application exception overridden by rollback exception" , ex);   
  10.              throw  ex2;   
  11.         }   
  12.          catch  (Error err) {   
  13.             logger.error( "Application exception overridden by rollback error" , ex);   
  14.              throw  err;   
  15.         }   
  16.     }  


真相大白Q是对template所持有的某个transactionManagerq行回滚。所以如果你的应用代码用的是事务源a的一些资源,比如到服务器a的一个datasourceQ但是你的transactionManager理的是另一些资源,比如服务器b的一个datasourceQ代码铁定不会正常运?

特别是在一些多事务源的E序里,q点千万不能搞错。如果多个事务源之间要完成全局事务Q还是老老实实用分布式事务管理服务吧QjtaQ?/font>

那么TransactionInterceptor是干什么的Q这个是spring 的声明式事务的支持方式。因为用TransactionTemplate要硬~码Q而且调整事务{略很麻烦(不是说不能调。D个例子原来程序抛出异常A需要回滚,现在不需要要Q我可以把a catch吃掉。这时候template׃会回滚了。但是每ơ调整都要重写编码。)而用TransactionInterceptor可以将q些调整写在配置中。我们再来挖TransactionInterceptor的代?/font>

代码

 

  1. public  Object invoke(MethodInvocation invocation)  throws  Throwable {   
  2.          // Work out the target class: may be null.   
  3.          // The TransactionAttributeSource should be passed the target class   
  4.          // as well as the method, which may be from an interface   
  5.         Class targetClass = (invocation.getThis() !=  null ) ? invocation.getThis().getClass() :  null ;   
  6.            
  7.          // Create transaction if necessary   
  8.         TransactionInfo txInfo = createTransactionIfNecessary(invocation.getMethod(), targetClass);   
  9.   
  10.         Object retVal =  null ;   
  11.          try  {   
  12.              // This is an around advice.   
  13.              // Invoke the next interceptor in the chain.   
  14.              // This will normally result in a target object being invoked.   
  15.             retVal = invocation.proceed();   
  16.         }   
  17.          catch  (Throwable ex) {   
  18.              // target invocation exception   
  19.             doCloseTransactionAfterThrowing(txInfo, ex);   
  20.              throw  ex;   
  21.         }   
  22.          finally  {   
  23.             doFinally(txInfo);   
  24.         }   
  25.         doCommitTransactionAfterReturning(txInfo);   
  26.   
  27.          return  retVal;   
  28.     }  


万变不离其宗?

所以用spring的事务管理需要作q些?
1Q设|好事务源,比如DataSourceQhibernate的session。如果有多个事务源要考虑他们之间是否有全局事务Q如果有Q老老实实用jtaQ否则就需要自己写一个manager?
2Q设|managerQ根据你的事务源选择对应的PlatformTransactionManager
3Q选择实现事物的方式,用templateq是interceptor。用template代码直观点,但是template所辖的manager和你应用代码所用的事务源要一致。如果用interceptor千万注意Q一定要调用interceptor那个beanQ而不是原始的那个target。在坛子上我已经看到臛_有两个朋友说spring事物不v作用Q从配置和代码上看都正确Q这时要好好查查Q调用的bean是哪一个?
4Q这个是设计问题了,推荐事务处于一个较高层ơ,比如service上的某个函数Q而底层的dao可以不考虑事务Q否则可能会出现事务嵌套Q增加程序复杂度?/font>



]]>
今年的技术规? http://www.aygfsteel.com/byterat/archive/2007/02/02/97572.html比特?/dc:creator>比特?/author>Fri, 02 Feb 2007 07:28:00 GMThttp://www.aygfsteel.com/byterat/archive/2007/02/02/97572.htmlhttp://www.aygfsteel.com/byterat/comments/97572.htmlhttp://www.aygfsteel.com/byterat/archive/2007/02/02/97572.html#Feedback0http://www.aygfsteel.com/byterat/comments/commentRss/97572.htmlhttp://www.aygfsteel.com/byterat/services/trackbacks/97572.html 2007q已l过M个月? q没有制定今q的规划, 现在是时候了!

争取掌握以下技?

1. Ruby On Rails 
q一步学习ruby的语法和语义Q最好能深入到解释器一层看看有些特性是怎么实现的?br />
2、Spring AOP ?AspectJ
个h觉得Spring 2.0和AspectJ的结合,有很多潜力,值得深入挖掘?br />
3. Web Service

4. Java JPA

5. Role-Based Access Control , Acegi
buaawhl推荐的,
http://csrc.nist.gov/rbac/
http://www.amazon.com/Role-Based-Access-Control-David-Ferraiolo/dp/1580533701/sr=1-1/qid=1161828835/ref=pd_bbs_1/002-1138304-7372032?ie=UTF8&s=books

下一个项目的权限理会比较复杂,以前没学q这斚w的知识。从Acegi开始吧Q如果够用最好?br />
6. JBoss JBoss的CacheQAppServer的cluster斚w是我比较感兴的地方Q想试一下JBoss应用服务?br />
7. 满一定条?比如: q发?000个请?框架Web Application集部v



]]>
关于Spring属性编辑器详解(?http://www.aygfsteel.com/byterat/archive/2007/01/20/95083.html比特?/dc:creator>比特?/author>Sat, 20 Jan 2007 13:21:00 GMThttp://www.aygfsteel.com/byterat/archive/2007/01/20/95083.htmlhttp://www.aygfsteel.com/byterat/comments/95083.htmlhttp://www.aygfsteel.com/byterat/archive/2007/01/20/95083.html#Feedback0http://www.aygfsteel.com/byterat/comments/commentRss/95083.htmlhttp://www.aygfsteel.com/byterat/services/trackbacks/95083.html

关于Spring属性编辑器详解

原文出处Q?
http://stamen.javaeye.com/blog/24660

最q刚在研ISpring的编辑器Q发现很有意思,刚好galaxystar起了一个这栯Q我惛_PropertyEditor作一个详l的整理会对大家有益Q特定启了这个新帖?

所谓的PropertyEditorQ顾名思义Q就是属性编辑器。由于Bean属性通过配置文档以字W串了方式ؓ属性赋|所以必L一个“东东”负责将q个字符串{换ؓ属性的直接对象Q如属性的cd为intQ那么编辑器要做的工作就是int i = Integer.parseInt("1");
SpringZ般的属性类型提供了默认的编辑器QBeanWrapperImpl是Spring框架中重要的c,它负责对注入的Beanq行包装化的理Q常见属性类型对应的~辑器即在该cM通过以下代码定义Q?

代码

但是Qƈ非Bean的属性都是这些常见的cdQ如果你的Bean需要注入一个自定义cd的属性,而又想n受IoC的好处,那么只得自己开qԌ提供一个自定义的PropertyEditor了?
下面Q分几个步骤来说明,定义一个自定义PropertyEditor的过E?
1)首先Q碰到的问题xQ要如何~辑自己的PropertyEditor,其实需要了解一点java.beans包的知识Q在该包中,有一个java.beans.PropertyEditor的接口,它定义了一套接口方法(12个)Q即通过q些Ҏ如何一个String变成内部的一个对象,q两个方法是比较重要的:
a)setValue(Object value) 直接讄一个对象,一般不直接用该Ҏ讄属性对?
b)setAsText(String text) 通过一个字W串来构造对象,一般在此方法中解析字符Ԍ构造一?
cd象,调用setValue(Object)来完成属性对象设|操作?

2)实现所有的接口Ҏ是麻烦的Qjava.beans.PropertyEditorSupport 适时dQ一般情况下Q我们通过扩展q个方便cd可?

3)~写完后Q就是在Spring配置文g中注册该属性类型编辑器的问题,Spring提供了专门的注册工具c?
org.springframework.beans.factory.config.CustomEditorConfigurerQ它负责属性类型和
属性编辑器兌h。到时BeanFactory注入Bean的属性时Q即会在注册表中查找属性类型对应的~辑器?

下面l出一个小例子Q例子先作一个简单描qͼ
1)Person 需要进行属性注入的BeanQ有两个属?一个是name,一个是address Address是一个类
2)Address Person的属性类型,本n?个属性?
3)AddressPropertyEditor Addresscd对应的属性编辑器?

开工:
1.Person.java

代码

2.Address.java
代码


AddressPropertyEditor.java
代码

打开Spring配置文gQ添上这两个配置:

代码

 

下面是我自己写的日期转换c:

我的配置Q?br />

]]>
javascript技?amp;&JavaScript[对象.属性]集锦 [转蝲了多] http://www.aygfsteel.com/byterat/archive/2007/01/19/94961.html比特?/dc:creator>比特?/author>Fri, 19 Jan 2007 08:51:00 GMThttp://www.aygfsteel.com/byterat/archive/2007/01/19/94961.htmlhttp://www.aygfsteel.com/byterat/comments/94961.htmlhttp://www.aygfsteel.com/byterat/archive/2007/01/19/94961.html#Feedback0http://www.aygfsteel.com/byterat/comments/commentRss/94961.htmlhttp://www.aygfsteel.com/byterat/services/trackbacks/94961.html

]]>
(转蝲)OpenSessionInView模式http://www.aygfsteel.com/byterat/archive/2007/01/19/94943.html比特?/dc:creator>比特?/author>Fri, 19 Jan 2007 07:33:00 GMThttp://www.aygfsteel.com/byterat/archive/2007/01/19/94943.htmlhttp://www.aygfsteel.com/byterat/comments/94943.htmlhttp://www.aygfsteel.com/byterat/archive/2007/01/19/94943.html#Feedback0http://www.aygfsteel.com/byterat/comments/commentRss/94943.htmlhttp://www.aygfsteel.com/byterat/services/trackbacks/94943.html 原文Q?/font> http://www.aygfsteel.com/waterye/archive/2005/08/23/10836.aspx

OpenSessionInView模式

Spring+Hibernate中,  集合映射如果使用lazy="true"Q?当PO传到View层时Q?出现未初始化session已关闭的错误Q只能在dao先初始化
parent.getChilds().size();

Spring提供Open Session In View来解册个问? 有两U方?br />1. Interceptor
    <!--  =========== OpenSession In View pattern ============== -->
    
< bean  id ="openSessionInViewInterceptor"
          class
="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor" >
        
< property  name ="sessionFactory"  ref ="sessionFactory" />
    
</ bean >

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

        
</ property >
    
</ bean >
2. 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 > *.do </ url-pattern >
</ filter-mapping >

</ web-app >

说明Q?个h更喜Ƣ用Interceptor方式Q?filter是在web.xml中定?br />有了OpenSessionInViewQƈ不是一切就ok了。简单的crud可以Q但对于复杂业务逻辑p想点法子?br />
OSIV默认是request per session? 所以即使没有显式update(po)QHibernate也会帮你保存的,dao的业务判断就无效Q还好有evict()可用?br />update code
// Controller
public
 ModelAndView update() {
    p 
=
 dao.getVo(id);
    bindObject(request);
    dao.update(p);
}

// Dao
public
 Object getVo(id) {
    p 
=
 getHibernateTemplate().get(clazz, id);
    p.getChilds().size();
    getHibernateTemplate().evict(p);
    
return
 p;
}

public   void
 update(p) {
    oldP 
=
 getVo(id);
    
//  ++--(oldP);

    getHibernateTemplate().update(p);
    
//  ++--(p);

}


]]>
Hibernate 关键字key的自动生?/title><link>http://www.aygfsteel.com/byterat/archive/2007/01/18/94582.html</link><dc:creator>比特?/dc:creator><author>比特?/author><pubDate>Thu, 18 Jan 2007 02:44:00 GMT</pubDate><guid>http://www.aygfsteel.com/byterat/archive/2007/01/18/94582.html</guid><wfw:comment>http://www.aygfsteel.com/byterat/comments/94582.html</wfw:comment><comments>http://www.aygfsteel.com/byterat/archive/2007/01/18/94582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/byterat/comments/commentRss/94582.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/byterat/services/trackbacks/94582.html</trackback:ping><description><![CDATA[ <font face="Courier New" size="2">例如Q?br /><class name="User" table="user"><br /><id name="id" column="id" type="java.lang.Long"><br /></font> <font face="Courier New"> <font size="2"> <font color="#ff0000"><generator class="native"/><br /></font></id><br /><br /><font color="#ff0000">generator</font>标识W生成器 描述<br /><br />increment      适用于代理主键。由Hibernate自动以递增方式生成<br />identity      适用于代理主键。由底层数据库生成标识符<br />sequence      适用于代理主键。HibernateҎ底层数据库的序列生成标识W,q要求底层数据库支持序列<br />hilo         适用于代理主键。Hibernate分局high/low法生成标识W?br />seqhilo       适用于代理主键。用一个高/低位法来高效的生成longQshort或者intcd的标识符?br />native        适用于代理主键。根据底层数据库对自动生成标识符的方式,自动选择identity、sequence或hilo<br />uuid.hex       适用于代理主键。HibernateZ128 位UUID 法生成16 q制数|~码后以长度32 的字W串表示Q?br />uuid.string      适用于代理主键。与uuid.hex cMQ只是生成的主键未进行编码(以长?6 的字W串表示Q,不能应用?PostgreSQL 数据库中<br />assigned       适用于自然主键。由Java应用E序负责生成标识W?br />foreign        适用于代理主键。用另外一个相兌的对象的标识W?br /><br /></font> </font> <p> <font face="Courier New" size="2">以下举例Q?br />1、指定参数的情况Q?br />    <id name="id" unsaved-value="0"> <br />      <generator class="sequence"><br />        <param name="sequence">SEQ_CHILD</param><br />      </generator><br /></id><br />使用的是sequenceQ适合oracle数据库;</font> </p> <br /> <p> <font face="Courier New" size="2">2、对于sql server2000中的数据库子增字D?在配|文件用下列方法实玎ͼ<br /><id name="id" type="long" unsaved-value="0"><br />     <column name="id" sql-type="numeric" not-null="true" /><br />     <generator class="identity" /> <br /></id><br />q里主要?identity:代表由sql server2000数据库自己提供子增字D?如果要hibernate自己提供,则用increment关键字来实现</font> </p> <br /> <p> <font face="Courier New" size="2">3、如果表中的主键用字W串cd:可以用hibernate自己提供的方法实C键唯一:<br />  <id name="id" type="string" unsaved-value="null"><br />      <column name="cid" sql-type="char(32)" not-null="true" /><br />      <generator class="uuid.hex" /><br />  </id><br />使用的是uuid.hex: 采用128位的法来生成一?2位字W串。最通用的一U方式。适用于所有数据库?/font> </p> <br /> <p> <font face="Courier New" size="2">重要的知识点:<br />1. 如果有部门表,有员工表,员工表中有dep_id,则表部门cd员工cLone-to-many的关p?<br />   可以使用:  ( 在部门类department中用下?<br />   Departmentc?  <br />     /**  部门的所有员工 ?*/<br />    private Set staffs = new TreeSet();<br />    <br />    xml的文?<br />      <set name="staffs" ><br />          <key column="dep_id"/><br />          <one-to-many class="hbp.sys.data.Staff"/><br />      </set><br />      如果是list,需要用索引<index> </index>,具体其中的含?不是很明?待以后研I?br />      <br /> 2. 如果部门要有一个负责h,即部门表(tb_department)中有一个字D?staff_id.<br />     那么表示部门和负责h之间的关pLmany-to-one的关p?br />     Departmentc? <br />      /** 部门负责人id */<br />    private Staff staff;<br />    <br />    xml 文g<br />     <many-to-one name="staff" class="hbp.sys.data.Staff"  column="staff_id"/>  <br />  <br /> 3. 多对多关p?一般我们是做一个中间关联表.我用角色和权限做了个例子,<br />      Right(id,name)     Role(id,name)   中间?tb_role_right(role_id,right_id)<br />      RightcM有一个Role的集?private Set roles=new TreeSet();<br />      RolecM也有一个Right的集?private Set rights=new TreeSet();<br />      则两者是明显的多对多关系.使用many-to-many来实?<br />      xml文g?br />      right.hbm.xml:如下:<br />        <set name="roles" table="tb_role_right" cascade="all"><br />           <key column="right_id"/><br />           <many-to-many column="role_id" class="hbp.sys.data.Role"/><br />        </set> <br />      role.hbm.xml文g中类?<br />        <set name="rights" table="tb_role_right" cascade="all"><br />          <key column="role_id"/><br />          <many-to-many column="right_id" class="hbp.sys.data.Right"/><br />        </set> </font> </p> <br /> <p> <font face="Courier New" size="2">4. 几个值得注意的问?<br />        a)在xml?映射文g?写类的名字时一定用cȝ全名:??cd?(hbp.sys.data.Staff),q个错误使我费了半天?:(<br />        b)我在写实现基本DAO操作?写了<br />             session.delete("from Right as right where right.id="+id);  <br />             E序L报错,我折腾了半天,跟踪到底,才恍然大?hibernate在解析sql语句的时候把<br />             其中的right,当成了数据库中的双?"保留?),?q种关键?不能随便用啊,:)</font> </p> <br /> <p> <font face="Courier New" size="2">5. hibernate中HQL语言的查询根据你的sql的不同而返回不同的对象cd.<br />         如果你用session.find(String hql)<br />         一般会q回一个List,?from Staff staff;q回的是包含所有的员工对象的集?br />         如你的hql?select count(*) from Staff staff;则返回的是一个Integer对象<br />         如果你用的hql?select count(distinct staff.name),count(*) from Staff staff;则返回的是一个Object<br />         即Object[],需要先把他转换成Object[],然后在取[0],[1].<br />         q种设计我不知道hibernate是如何处理的,感觉既好也不?好的是可以用一个find获得L查询<br />         不好在于Ҏhql来处理返回结?Ҏ出错.</font> </p> <img src ="http://www.aygfsteel.com/byterat/aggbug/94582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/byterat/" target="_blank">比特?/a> 2007-01-18 10:44 <a href="http://www.aygfsteel.com/byterat/archive/2007/01/18/94582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">踽</a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">٤ʦ</a>| <a href="http://" target="_blank">ӳ</a>| <a href="http://" target="_blank">Ͻ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ҧ</a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ֺ</a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˴</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></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>