Java

±¾ÀàÔĶÁTOP10

¡¤Ê¹ÓÃMyEclipse¿ª·¢Struts¿ò¼ÜµÄHello World!(¼Ïñ1)
¡¤hibernateÅäÖñʼÇ
¡¤AOP±à³ÌÈëÃÅ--Javaƪ
¡¤linuxÏÂTomcat 5.0.20 Óë Apache 2 °²×°/¼¯³É/ÅäÖÃ
¡¤ÔÚwin2003ÏÂÕûºÏÁËÕûºÏTomcat5.5+ apache_2.0.53+ mod_jk_2.0.47.dll
¡¤¹¹½¨LinuxÏÂIDE»·¾³--Eclipseƪ
¡¤Jsp Á¬½Ó mySQL¡¢Oracle Êý¾Ý¿â±¸Íü(Windowsƽ̨)
¡¤ASP¡¢JSP¡¢PHP ÈýÖÖ¼¼Êõ±È½Ï
¡¤Tomcat5.5.9µÄ°²×°ÅäÖÃ
¡¤AWT GUI Éè¼Æ±Ê¼Ç(¶þ)

¡ú ·ÖÀർº½
VCÓïÑÔDelphi
VBÓïÑÔASP
PerlJava
ScriptÊý¾Ý¿â
ÆäËûÓïÑÔÓÎÏ·¿ª·¢
Îļþ¸ñÊ½ÍøÕ¾ÖÆ×÷
Èí¼þ¹¤³Ì.NET¿ª·¢
Ó**ibernate InterceptorºÜAOPµÄ¸ã¶¨¶ÔÏóÐ޸ļͼµÄ±£´æ

×÷ÕߣºÎ´Öª À´Ô´£ºÔ¹âÈí¼þÕ¾ ¼ÓÈëʱ¼ä£º2005-2-28¡¡Ô¹âÈí¼þÕ¾

 ÔÚÏîÄ¿ÊÕβ½×¶Î£¬¿Í»§Í»È»Ìá³öÒ»¸öºÜÂé·³µ«Ò²ºÜÕý³£µÄÐèÇó£¬ÏµÍ³ÄÚµÄÒ»Çи͝¶¼Òª½øÐмǼ¡£¸ñʽÈç:
    2004.1.1 12:30  ÓôÒ²·ç ÏúÊÛ¶©µ¥ ¶©»õÈÕÆÚ 2004.1.2->2004.1.3
   
    µÚһʱ¼äÎÒ¾ÍÏëµ½ÁËÒ²ºÜAOPµÄTrigger£¬µ«Trigger±Ï¾¹ºÍJava´úÂëÊÇÁ½¸öÊÀ½ç£¬Ôõô°Ñ²Ù×÷Ô±Ãû×Ö´«½øÈ¥¾ÍÓеãÂé·³(ÒªËùÓбíÔÙ¼ÓÒ»¸ölast modifierµÄÁУ¬È»ºóÐ޸ijÌÐò)£¬Í¬Ê±TriggerÒ»¸öºÜ²»¹»AOPµÄµØ·½¾ÍÊÇÓжàÉÙ¸ö±í¾ÍҪд¶àÉÙ¸öTrigger£¬ÓжàÉÙ¸öÁоÍҪд¶àÉÙÁС£
    HibernateµÄCommunity Area ¸ÕºÃÓÐһƪHistory InterceptorµÄÎÄÕ£¬ºÜAOPµÄ½â¾öÁËÕâ¸öÎÊÌâ¡£ËäÈ»ÓÃVelocityÉú³ÉTrigger¿ÉÄܸü¼Ó¼¯Öпì½Ý£¬µ«¼¼ÊõµÄ¿ñÈÈÇýʹÎÒÈ¥³¢ÊÔÁË·½·¨2¡£
 
1.Hibernate Inteceptor ¸ÅÄî
  Inteceptor--À¹½ØÆ÷µÄ¸ÅÄîÔ´×ÔAOP,ÔÚ2.1.6ÖÐÎİæµÄ²Î¿¼ÊÖ²áÀïÃæÕâÑùд
  Interceptor½Ó¿ÚÌṩ´Ósessionµ½ÄãµÄÓ¦ÓóÌÐòµÄ»Øµ÷·½·¨£¬ÈÃÄãµÄ³ÌÐò¿ÉÒÔÔڳ־û¯¶ÔÏó±£´æ/¸ü¸Ä/ɾ³ý»òÕß×°ÔØµÄʱºò²Ù×÷ËüµÄÊôÐÔ¡£µäÐÍ´úÂ룺
public class AuditInterceptor implements Interceptor, Serializable 
{
   public boolean onFlushDirty(Object entity,
                                Serializable id,
                                Object[] currentState,
                                Object[] previousState,
                                String[] propertyNames,
                                Type[] types) 
   {
        if ( entity instanceof Auditable )
       {
            for ( int i=0; i < propertyNames.length; i++ )
            {
                if ( "lastUpdateTimestamp".equals( propertyNames[i] ) )
               {
                    currentState[i] = new Date();
                    return true;
                }
            }
        }
        return false;
    }
}
µ±session±»´´½¨µÄʱºò£¬Ö¸¶¨À¹½ØÆ÷¡£
Session session = sf.openSession( new AuditInterceptor() );
 
¿É¼û,InterceptorµÄ»ù±¾Ä£Ê½ÊÇ
1.ÌṩonLoad(),onSave(),onDelete,onFlushDirty()¼¸¸ö»Øµ÷º¯Êý¡£
   ÔÚ´´½¨sessionʱÏòsessionÖ¸¶¨Interceptor.

2.ÿ¸ö»Øµ÷º¯ÊýµÄ²ÎÊýÈçÏÂ,ÒѾ­×ã¹»×÷ÈκÎÊÂÇé
   1.Object entity   ¶ÔÏó
   2.Serializable id   ¶ÔÏóµÄid
   3.String[] propertyNames  ÊôÐÔµÄÃû³ÆÊý×é
   4.Type[] types   ÊôÐÔµÄÀàÐÍÊý×é
   5.Object[] previousState  ¸üÐÂǰµÄÊôÐÔÖµ
   6.Object[] currentState    ¸üкóµÄÊôÐÔÖµ
 
3.ÔÚº¯ÊýÄÚ,ͨ¹ýif ( entity instanceof Auditable )ÅжÏÊÇ·ñÄ¿±ê¶ÔÏóÀàÐÍ.
 
2.History Interceptorģʽ
1.ËùÓÐÐèÒª¼Ç¼¸ü¸ÄÀúÊ·µÄVO implement Historizable½Ó¿Ú¡£
   History Interceptor¸ù¾Ý if ( entity instanceof Historizable)lÀ´ÅжÏÊÇ·ñÐèÒª¸É»î¡£

2.ËùÓÐVOº¬ÓÐsetLastModifyer()º¯Êý¡£ÔÚ³ÌÐòÖаѲÙ×÷Ô±Ãû×Ö´«Èë¡£

3.´´½¨HistoryEntryµÄPOJOºÍhbm
   °üº¬ÈçϵÄÁÐ id,who,what,property,oldValue,newValue
 
4.´´½¨Ò»¸öHistory±í£¬¿¿history_typeÁÐÓü̳ÐÓ³ÉäΪ²»Í¬µÄ×ÓÀà,ÈçGoodsHistory,CustomerHistory¡£
 
5.ΪËùÓÐÐèÒª¼Í¼¸ü¸ÄÀúÊ·µÄ¶ÔÏóÔÚPOJOºÍhbmÖмÓÈëhistoryEntry Set¡£
6.ÁôÒâÊôÐÔ³ýString,BigDecimalµÈ»ù±¾ÀàÐÍÍâ,ÆäËûÄÚǶ¶ÔÏóÒª±£Ö¤ÓÐEqualsº¯ÊýºÍtoString()º¯Êý.
ÓÃhbm2javaÉú³ÉµÄjava code,  toString()º¯ÊýÊä³öµÄÊÇID,ÐèÒª¸ÄΪÓÐÒâÒåµÄID+name,
¿ÉÒÔÔÚhbmÀï°ÑnameÊôÐÔµÄ<meta>ÉèΪ<meta-attribute name="is-tostring-value" value="true">
 
3.ʣϵÄÎÊÌâ
  1.µ¥²ãµÄ¶ÔÏóÒѾ­»ñµÃÍêÃÀµÄ½â¾ö,µ«¶ÔÓÚ¶©µ¥µÄ×Ó¶ÔÏóÓÖÈçºÎ½â¾öÄØ?

  2.ÈçºÎ¸ßЧÀûÓÃi18°Ñ±»¸ü¸ÄµÄ±íÃûºÍÁÐÃû·­Òë³ÉÖÐÎÄ¡£
  3.SpringËä¿ÉÔÚ<Session Factory>»òÕß<trancetion manager>½Úµã¶¨Òå<Entity Interceptor>,µ«ÔÚonflushDirty()º¯ÊýÖÐÀÏÊÇÄò»µ½previousState,ËäȻͬÊÂÕÒµ½·½·¨ÔÝʱ½â¾öÁË,µ«×ÜÊDz»Õý¹æ.
 
    ÆäÖÐÎÊÌâ1ÊÇTrigger¸ü¼ÓÎÞ·¨Íê³ÉµÄ¡£



Ïà¹ØÎÄÕ£º

Ïà¹ØÈí¼þ£º