隨筆-26  評(píng)論-111  文章-19  trackbacks-0
            2005年12月12日
          在Window下啟動(dòng)Hadoop-0.21.0版本時(shí),會(huì)出現(xiàn)下面這樣的錯(cuò)誤提示:

           1 java.lang.NoClassDefFoundError: org/apache/hadoop/util/PlatformName
           2 Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.util.PlatformName
           3 
           4         at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
           5         at java.security.AccessController.doPrivileged(Native Method)
           6         at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
           7         at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
           8         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
           9         at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
          10 Could not find the main class: org.apache.hadoop.util.PlatformName.  Program wil
          11 l exit.

          經(jīng)過不斷的查找原因和嘗試,終于有了解決這個(gè)錯(cuò)誤的辦法,只需要將${HADOOP_HOME}/bin/hadoop-config.sh文件中的第190行的一下的內(nèi)容

          JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -"s/ /_/g"`


          修改成以下的內(nèi)容即可

          JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m -classpath ${HADOOP_COMMON_HOME}/hadoop-common-0.21.0.jar org.apache.hadoop.util.PlatformName | sed -"s/ /_/g"`


          posted @ 2010-09-29 17:03 snoics 閱讀(12405) | 評(píng)論 (7)編輯 收藏
              下載地址:http://code.google.com/p/snoics-retrieval/

              版本更新說明

          V1.01

                          1、提高創(chuàng)建索引的效率

                   2、通過對(duì)象池管理IndexWriterIndexReader對(duì)象

                   3、修正若干BUG

          V1.0

                   初始版本



          基于Lucene的全文檢索框架,提供快速方便的索引創(chuàng)建及查詢方式,并提供擴(kuò)展功能對(duì)框架進(jìn)行擴(kuò)展。

              項(xiàng)目地址:http://code.google.com/p/snoics-retrieval/

              

             環(huán)境要求

          Java1.5+

          Lucene 3.0+



          posted @ 2010-09-28 16:33 snoics 閱讀(2403) | 評(píng)論 (1)編輯 收藏


          做了一些小的修改和調(diào)整

          基于Lucene的全文檢索框架,提供快速方便的索引創(chuàng)建及查詢方式,并提供擴(kuò)展功能對(duì)框架進(jìn)行擴(kuò)展。

              項(xiàng)目地址:http://code.google.com/p/snoics-retrieval/

              

          環(huán)境要求

          Java1.5+

          Lucene 3.0+

          posted @ 2010-08-18 15:00 snoics 閱讀(2087) | 評(píng)論 (0)編輯 收藏
               摘要:        對(duì)四則運(yùn)算表達(dá)式字符串進(jìn)行解析后計(jì)算出結(jié)果,可以使用逆波蘭表達(dá)式進(jìn)行處理。        首先說明一下什是逆波蘭表達(dá)式:         逆波蘭表達(dá)式又叫做后綴表達(dá)...  閱讀全文
          posted @ 2010-07-29 17:44 snoics 閱讀(3402) | 評(píng)論 (2)編輯 收藏
               摘要:         基于自己的興趣,利用業(yè)務(wù)時(shí)間在Lucene基礎(chǔ)上做的一個(gè)搜索框架,請(qǐng)大家多多指教。 一、        介紹 基于Lucene的全文檢索框架,提供快速方便的索引創(chuàng)建及查詢方式,并提供擴(kuò)展功能對(duì)框架進(jìn)行擴(kuò)展。  &nbs...  閱讀全文
          posted @ 2010-07-26 08:06 snoics 閱讀(2761) | 評(píng)論 (0)編輯 收藏
              Myeclipse 7 的插件安裝方式與原先的方式完全不一樣了,下面以JBossTools-2.1.2.GA插件安裝為例進(jìn)行說明。

              假設(shè)
                      Myeclipse 7的安裝路徑為:C:\Genuitec
                      JBossTools-2.1.2.GA插件的路徑為:  C:\eclipse-plugins\plugins\JBossTools-2.1.2.GA-ALL-win32

              將下面這段代碼編譯后執(zhí)行:

              
           1package test;
           2
           3import java.io.File;
           4import java.util.ArrayList;
           5import java.util.List;
           6
           7
           8/**
           9 * Descript: 
          10 *
          11 *
          12 */

          13
          14public class CreatePluginsConfig {
          15    private String path;
          16    
          17    public CreatePluginsConfig(String path){
          18        this.path=path;
          19    }

          20    
          21    public void print(){
          22        List list=getFileList(path);
          23        if(list==null){
          24            return;
          25        }

          26        
          27        int length=list.size();
          28        for(int i=0;i<length;i++){
          29            String result="";
          30            String thePath=getFormatPath(getString(list.get(i)));
          31            File file=new File(thePath);
          32            if(file.isDirectory()){
          33                String fileName=file.getName();
          34                if(fileName.indexOf("_")<0){
          35                    continue;
          36                }

          37                String[] filenames=fileName.split("_");
          38                String filename1=filenames[0];
          39                String filename2=filenames[1];
          40                result=filename1+","+filename2+",file:/"+path+"\\"+fileName+"\\,4,false";
          41                System.out.println(result);
          42            }
          else if(file.isFile()){
          43                String fileName=file.getName();
          44                if(fileName.indexOf("_")<0){
          45                    continue;
          46                }

          47                String[] filenames=fileName.split("_");
          48                String filename1=filenames[0];
          49                String filename2=filenames[1].substring(0, filenames[1].lastIndexOf("."));
          50                result=filename1+","+filename2+",file:/"+path+"\\"+fileName+",4,false";
          51                System.out.println(result);
          52            }

          53            
          54        }

          55    }

          56    
          57    public List getFileList(String path){
          58        path=getFormatPath(path);
          59        path=path+"/";
          60        File filePath=new File(path);
          61        if(!filePath.isDirectory()){
          62            return null;
          63        }

          64        String[] filelist=filePath.list();
          65        List filelistFilter=new ArrayList();
          66
          67        for(int i=0;i<filelist.length;i++){
          68            String tempfilename=getFormatPath(path+filelist[i]);
          69            filelistFilter.add(tempfilename);
          70        }

          71        return filelistFilter;
          72    }

          73    
          74    public String getString(Object object){
          75        if(object==null){
          76            return "";
          77        }

          78        return String.valueOf(object);
          79    }

          80    
          81    public String getFormatPath(String path) {
          82        path = path.replaceAll("\\\\""/");
          83        path = path.replaceAll("//""/");
          84        return path;
          85    }

          86    
          87    public static void main(String[] args){
          88        new CreatePluginsConfig("C:\\eclipse-plugins\\plugins\\JBossTools-2.1.2.GA-ALL-win32\\eclipse\\plugins").print();
          89    }

          90}
              
              執(zhí)行完之后,將控制臺(tái)中打印出的執(zhí)行結(jié)果,直接復(fù)制到下面這個(gè)文件中:

              C:\Genuitec\MyEclipse 7.0\configuration\org.eclipse.equinox.simpleconfigurator\bundles.info

              然后用 -clean 命令重新啟動(dòng)Myeclipse即了完成插件的安裝。
              
          posted @ 2008-12-15 13:41 snoics 閱讀(8476) | 評(píng)論 (13)編輯 收藏

                  “不要重新發(fā)明輪子!!!”

                  乍聽之下,這一句話似乎是很有道理。確實(shí)在很多情況下,這句話是很有道理。可是殊不知在這一句冠冕堂皇的理由下,有多少的創(chuàng)意、多少的激情被抹殺了?

                  在很多情況下,有些中國的程序員只要自己想做一些有創(chuàng)造性的工作,確總是被上級(jí)或其他的某些同行嘲笑“你要做的這個(gè)東西已經(jīng)有現(xiàn)成的了,有必要再花時(shí)間去做嗎?你能做的比別人做出來的東西更好嗎?你這是在重新發(fā)明輪子,而且是不好的輪子。”

                  結(jié)果,一個(gè)接著一個(gè)的萌芽被‘不要重新發(fā)明輪子’這個(gè)古訓(xùn)扼殺了。

                  想起來真是覺得很悲哀也很無奈,中國的程序員永遠(yuǎn)只能使用外國人的技術(shù),甚至其中有不少都是已經(jīng)快要過時(shí)了才開始在中國普及開。一個(gè)接著一個(gè)的流行框架在國外的人手中產(chǎn)生出來,為什么他們就可以重新發(fā)明輪子,而我們就不行呢?死守古訓(xùn)導(dǎo)致的唯一的結(jié)果就是無法進(jìn)步,永遠(yuǎn)只能使用別人的東西,最多就是羅列了一堆會(huì)使用的框架,真正的技術(shù)都是掌握在別人的手里。

                   有一次面試,簡歷上列出了會(huì)使用:JSF,SPRING,HIBERNATE(還有不少其他的,具體的記不太清了),而且已經(jīng)參與開發(fā)過了兩個(gè)WEB類型的項(xiàng)目,并且已經(jīng)通過了SCJP認(rèn)證。結(jié)果確連幾種List的區(qū)別,HashTable和HashMap的區(qū)別都分不清,設(shè)計(jì)模式方面更是慘不忍睹,甚至更不可思議的是連使用HTML語法畫出一個(gè)稍顯復(fù)雜的表格都辦不到。回答是:因?yàn)槎际鞘褂每蚣芎涂蚣芴峁┑臉?biāo)簽,所以不需要接觸這些……

                  還是那句話:有時(shí)候是該反省反省,除了框架,自己還剩下什么?



          posted @ 2008-04-24 12:52 snoics 閱讀(1821) | 評(píng)論 (2)編輯 收藏
               摘要:           數(shù)據(jù)分頁顯示是一項(xiàng)挺煩人的工作,涉及到數(shù)據(jù)來源,數(shù)據(jù)生成,數(shù)據(jù)顯示這幾個(gè)方面。數(shù)據(jù)有可能是從任意地方以任意方式獲取到的,而且獲取到的數(shù)據(jù)又有可能是經(jīng)過了任意的方式處理之后,再以任意的方式顯示給最終用戶。         這...  閱讀全文
          posted @ 2008-03-25 11:39 snoics 閱讀(2953) | 評(píng)論 (3)編輯 收藏
          IE有時(shí)會(huì)在打開一些頁面時(shí)出現(xiàn)

          此對(duì)話框出現(xiàn)錯(cuò)誤。

          錯(cuò)誤:53
          存儲(chǔ)空間不足,無法完成此操作


          的錯(cuò)誤提示框,導(dǎo)致頁面最終無法打開


          經(jīng)過很長時(shí)間,終于發(fā)現(xiàn)在IE7中解決這個(gè)問題的解決方法

          在IE7中進(jìn)行如下操作:

          Tools-->Internet Options-->Programs-->Advanced-->Reset-->Reset

          這樣講IE7中的各項(xiàng)配置,包括插件全部都恢復(fù)到IE7剛安裝完時(shí)的最初始化的狀態(tài),之前的那個(gè)錯(cuò)誤也解決了。



          posted @ 2008-03-24 20:38 snoics 閱讀(6122) | 評(píng)論 (5)編輯 收藏
                  迷惑了一段時(shí)間,現(xiàn)在終于想通了,還是繼續(xù)以前的執(zhí)著,繼續(xù)朝以前的那個(gè)目標(biāo)不斷努力吧。差點(diǎn)就放棄了,不過還是終于還是又回來了。

                  一定要,也一定會(huì)變得更強(qiáng),對(duì)自己有信心    ^_^

          posted @ 2007-11-25 18:51 snoics 閱讀(1088) | 評(píng)論 (2)編輯 收藏
          ????
          ?????????? 最近因?yàn)楣ぷ魈Φ脑颍恢睕]有時(shí)間來更新,現(xiàn)在放出2.1的版本(包含最新的源代碼)。

          ??????? 下載地址:
          ?????????????????????????snoics-reptile2.1.part1.rar
          ?????????????????????????snoics-reptile2.1.part2.rar
          ?????????????????????????snoics-reptile2.1.part3.rar
          ?????????????????????????snoics-reptile2.1.part4.rar

          ????????? (大家有什么意見可以在這里提出,只要有時(shí)間,我會(huì)盡量更新,有什么建議可以在blog里面提出,或者加我的MSN一起討論。? ^_^ )

          版本歷史

          2.1:

          1、不用再配置snoics-configpath.xml中的路徑。
          2、定時(shí)自動(dòng)保存Cache
          3、修改了一些Bug
          2.0:

          核心代碼全部重寫,增加了擴(kuò)展性,通過擴(kuò)展之后,基本上能實(shí)現(xiàn)對(duì)整個(gè)網(wǎng)站完整的解析

          1.0:

          實(shí)現(xiàn)了整站抓取的基本的功能,不能解析特殊的URL,對(duì)javascript無法辨認(rèn)
          posted @ 2006-10-27 21:05 snoics 閱讀(4829) | 評(píng)論 (21)編輯 收藏
          發(fā)現(xiàn)貓撲的電臺(tái)不錯(cuò),把它作成遨游的插件了,放上來與大家分享。

          下載以后把文件解壓到遨游的插件目錄下,就會(huì)在側(cè)邊攔出現(xiàn)MOP的電臺(tái),用起來很方便。


          http://www.aygfsteel.com/Files/snoics/MOP.rar
          posted @ 2006-09-06 19:28 snoics 閱讀(1307) | 評(píng)論 (0)編輯 收藏

          ??? 有些人說不知道snoics-reptile中的snoics-systemconfig.xml不知道怎么配置,這里就給出一個(gè)CSDN中Java文檔中心的抓取配置的抓取配置。

          ???? 在抓取完了之后往Apache的httpd.conf中加入
          Listen 10001
          <VirtualHost *:10001>
          ??? DocumentRoot D:\\temp\\reptile\\website
          </VirtualHost>
          ???? 這段配置。


          ???? 最后刪除抓取下來的文件夾中的D:\temp\reptile\website\author\index.html這個(gè)文件。不知道為什么文檔中心的這個(gè)URL是一個(gè)空的頁面http://dev.csdn.net/author? ,把這個(gè)URL的相對(duì)應(yīng)的抓取下的文件刪除就可以正常使用了

          ???? 在抓取的過程中,有些圖片文件可能會(huì)出現(xiàn)錯(cuò)誤,不過不影響使用,因?yàn)檫@些圖片的路徑本身大概就有些問題。


          ????? 附件-配置文件:http://www.aygfsteel.com/Files/snoics/snoics-systemconfig.rar

          posted @ 2006-08-19 14:30 snoics 閱讀(1565) | 評(píng)論 (0)編輯 收藏
          源代碼發(fā)布

          snoics-reptile?網(wǎng)頁爬蟲2.0?
          作者: 施偉
          EMail: snoics@hotmail.com
          主頁: http://www.aygfsteel.com/snoics


          FAQ


          1、snoics-reptile是什么?

          ????是用純Java開發(fā)的,用來進(jìn)行網(wǎng)站鏡像抓取的工具,可以使用配制文件中提供的URL入口,
          把這個(gè)網(wǎng)站所有的能用瀏覽器通過GET的方式獲取到的資源全部抓取到本地,包括網(wǎng)頁和各
          種類型的文件,如:圖片、flash、mp3、zip、rar、exe等文件。可以將整個(gè)網(wǎng)站完整地下傳至
          硬盤內(nèi),并能保持原有的網(wǎng)站結(jié)構(gòu)精確不變。只需要把抓取下來的網(wǎng)站放到web服務(wù)器
          (如:Apache)中,就可以實(shí)現(xiàn)完整的網(wǎng)站鏡像。

          2、現(xiàn)在已經(jīng)有了其他的類似的軟件,為什么還要開發(fā)snoics-reptile?

          ????因?yàn)橛行┰谧ト〉倪^程中經(jīng)常會(huì)出現(xiàn)錯(cuò)誤的文件,而且對(duì)很多使用
          javascript控制的URL沒有辦法正確的解析,而snoics-reptile通過對(duì)外提供
          接口和配置文件的形式,對(duì)特殊的URL,可以通過自由的擴(kuò)展對(duì)外提
          供的接口,并通過配置文件注入的方式,基本上能實(shí)現(xiàn)對(duì)所有的網(wǎng)頁都
          正確的解析和抓取。

          3、如何使用?

          ????a、配置 bin\snoics-configpath.xml 文件

          ????????將配置文件中的path節(jié)點(diǎn)的值改為conf文件夾在系統(tǒng)中的絕對(duì)路徑,
          ????????如: c:\snoics-reptile\conf

          ????b、配置 conf\snoics-systemconfig.xml 文件

          ????????其中parameters節(jié)點(diǎn)中的配置為對(duì)需要抓取的網(wǎng)站的參數(shù)的配置,

          ????????以下是各個(gè)參數(shù)的說明:

          ????????1、websitename:

          ????????站點(diǎn)的名稱(不能為空,由字母和數(shù)字組成)

          ????????2、charsetName:

          ????????該站點(diǎn)使用的字符集類型

          ????????3、website:

          ????????將被抓取的站點(diǎn)的域名

          ????????4、startpage:

          ????????抓取的起始頁面

          ????????5、url:

          ????????該站點(diǎn)中將被抓取的部分(如果留空則為整個(gè)站點(diǎn),可以有多個(gè)URL,
          每個(gè)URL之間使用";"隔開)

          ????????6、remoteurlflag:

          ????????代表遠(yuǎn)程URL的標(biāo)志,沒有特殊情況請(qǐng)不要修改此處,使用默認(rèn)值
          (多個(gè)之間使用";"隔開)

          ????????7、forbidurl:

          ????????該站點(diǎn)中不被抓取的部分(多個(gè)之間使用";"隔開)

          ????????8、cachefile:

          ????????該站點(diǎn)使用的緩存文件,如果緩存文件不存在則自動(dòng)創(chuàng)建一個(gè)新的,
          如果已經(jīng)存在,則會(huì)載入文件中保存的信息

          ????????9、filerootpath:

          ????????抓取下的文件的保存路徑(必須是系統(tǒng)中的絕對(duì)路徑)

          ????????10、indexpage:

          ????????將被保存成index.html文件名的URL類型(多個(gè)之間使用";"隔開)

          ????????11、filenamelength:

          ????????頁面保存到本地時(shí),隨機(jī)生成的文件名的長度

          ????????12、cacheunitsize:

          ????????一個(gè)cache單元的大小

          ????????13、reptile-downloadfiletype:

          ????????將被抓取到本地的文件類型(多個(gè)之間使用";"隔開)

          ????????14、reptile-undownloadfiletype:

          ????????頁面被保存到本地時(shí),該種類型的文件的URL將被改成遠(yuǎn)程的URL地址
          ,如果這種類型出現(xiàn)在reptile-downloadfiletype中時(shí),則文件將被抓取到本地,
          而URL也將改成本地的URL(多個(gè)之間使用";"隔開)

          ????c、在參數(shù)配置好之后,執(zhí)行bin/run.bat文件

          4、如何擴(kuò)展接口?

          ????擴(kuò)展接口使用的配置文件是:conf/snoics-reptile-urlregex.xml

          ????首先加入一段如下的配置
          ????<bean id="ahrefRegexUrl" class="com.snoics.reptile.regex.url.impl.UrlRegex" singleton="false">
          ????????<property name="regexUrl">
          ????????????<!-- 提取可能包含URL的字符串 -->
          ????????????<value><![CDATA[<[^!<>]*\shref\s*=\s*["']?[^<>]*["'\s][^<>]*>]]></value>
          ????????</property>
          ????????<property name="replaceRegexUrl">
          ????????????<!-- 替換可能包含URL的字符串 -->
          ????????????<value><![CDATA[<[^!<>]*\shref\s*=\s*["']?reptile-replace-string["'\s][^<>]*>]]></value>
          ????????</property>
          ????????<property name="getRegexUrl">
          ????????????<!-- 提取最終URL -->
          ????????????<ref bean="ahrefGetRegexUrl"/>
          ????????</property>
          ????</bean>
          ????

          ????其中ahrefGetRegexUrl是實(shí)現(xiàn)了com.snoics.reptile.regex.url.IGetUrlRegex接口的類,用來從可能包含了URL的字符串里面提取其中包含的URL


          ??? 其次加入如下的配置:

          ???? <bean id="ahrefGetRegexUrl" class="com.snoics.reptile.regex.url.impl.AhrefGetRegexUrl" singleton="false">
          ???????? <property name="regexString">
          ????????????? <!-- 提取最終URL -->
          ?????????????? <value><![CDATA[href\s*=\s*["']?[^\s"]+["'\s]\s*]]></value>
          ???????? </property>
          ???????? <property name="unIncludeRegexString">
          ??????????????? <!--
          ???????????????????? 排除不需要的類型
          ???????????????????? 多個(gè)正則表達(dá)式之間使用';'隔開
          ???????????????? ?-->
          ??????????????? ?<value><![CDATA[javascript\s?:\s?;mailto\s?:\s?;^#$;]]></value>
          ?????????? </property>
          ????? </bean>


          ????最后,在如下的配置中,加入剛才配置好的部分

          ????<bean id="urlRegexMap" class="com.snoics.reptile.regex.url.impl.UrlRegexMap">
          ????????<property name="ulrRegexMap">
          ????????????<map>
          ????????????????<!-- 名稱 -->
          ????????????????<entry key="ahref">
          ????????????????????<!-- 解析URL使用的類 -->
          ????????????????????<ref bean="ahrefRegexUrl"/>
          ????????????????</entry>
          ????????????????<entry key="src">
          ????????????????????<ref bean="srcRegexUrl"/>
          ????????????????</entry>
          ????????????</map>
          ????????</property>
          ????</bean>


          5、版本歷史

          2.0:

          核心代碼全部重寫,增加了擴(kuò)展性,通過擴(kuò)展之后,基本上能實(shí)現(xiàn)對(duì)整個(gè)網(wǎng)站完整的解析

          1.0:

          實(shí)現(xiàn)了整站抓取的基本的功能,不能解析特殊的URL,對(duì)javascript無法辨認(rèn)

          源代碼下載地址:

          snoics-reptile2.0-src.part1.rar
          snoics-reptile2.0-src.part2.rar
          snoics-reptile2.0-src.part3.rar
          snoics-reptile2.0-src.part4.rar
          posted @ 2006-06-03 10:53 snoics 閱讀(4531) | 評(píng)論 (13)編輯 收藏
          snoics-reptile?網(wǎng)頁爬蟲2.0

          作者: 施偉
          EMail: snoics@hotmail.com
          主頁: http://www.aygfsteel.com/snoics


          FAQ


          1、snoics-reptile是什么?

          ????是用純Java開發(fā)的,用來進(jìn)行網(wǎng)站鏡像抓取的工具,可以使用
          配制文件中提供的URL入口,把這個(gè)網(wǎng)站所有的能用瀏覽器通過
          GET的方式獲取到的資源全部抓取到本地,包括網(wǎng)頁和各種類型
          的文件,如:圖片、flash、mp3、zip、rar、exe等文件。可以將整
          個(gè)網(wǎng)站完整地下傳至硬盤內(nèi),并能保持原有的網(wǎng)站結(jié)構(gòu)精確不變。
          只需要把抓取下來的網(wǎng)站放到web服務(wù)器(如:Apache)中,就可以
          實(shí)現(xiàn)完整的網(wǎng)站鏡像。

          2、現(xiàn)在已經(jīng)有了其他的類似的軟件,為什么還要開發(fā)snoics-reptile?

          ????因?yàn)橛行┰谧ト〉倪^程中經(jīng)常會(huì)出現(xiàn)錯(cuò)誤的文件,而且對(duì)很多使用
          javascript控制的URL沒有辦法正確的解析,而snoics-reptile通過對(duì)外提供
          接口和配置文件的形式,對(duì)特殊的URL,可以通過自由的擴(kuò)展對(duì)外提供
          的接口,并通過配置文件注入的方式,基本上能實(shí)現(xiàn)對(duì)所有的網(wǎng)頁都
          正確的解析和抓取。

          3、如何使用?

          ????a、配置 bin\snoics-configpath.xml 文件

          ????????將配置文件中的path節(jié)點(diǎn)的值改為conf文件夾在系統(tǒng)中的絕對(duì)路徑,
          ????????如: c:\snoics-reptile\conf

          ????b、配置 conf\snoics-systemconfig.xml 文件

          ????????其中parameters節(jié)點(diǎn)中的配置為對(duì)需要抓取的網(wǎng)站的參數(shù)的配置,

          ????????以下是各個(gè)參數(shù)的說明:

          ????????1、websitename:

          ????????站點(diǎn)的名稱(不能為空,由字母和數(shù)字組成)

          ????????2、charsetName:

          ????????該站點(diǎn)使用的字符集類型

          ????????3、website:

          ????????將被抓取的站點(diǎn)的域名

          ????????4、startpage:

          ????????抓取的起始頁面

          ????????5、url:

          ????????該站點(diǎn)中將被抓取的部分(如果留空則為整個(gè)站點(diǎn),可以有多個(gè)URL,
          ???????? 每個(gè)URL之間使用";"隔開)

          ????????6、remoteurlflag:

          ????????代表遠(yuǎn)程URL的標(biāo)志,沒有特殊情況請(qǐng)不要修改此處,使用默認(rèn)值
          (多個(gè)之間使用";"隔開)

          ????????7、forbidurl:

          ????????該站點(diǎn)中不被抓取的部分(多個(gè)之間使用";"隔開)

          ????????8、cachefile:

          ????????該站點(diǎn)使用的緩存文件,如果緩存文件不存在則自動(dòng)創(chuàng)建一個(gè)新的,
          如果已經(jīng)存在,則會(huì)載入文件中保存的信息

          ????????9、filerootpath:

          ????????抓取下的文件的保存路徑(必須是系統(tǒng)中的絕對(duì)路徑)

          ????????10、indexpage:

          ????????將被保存成index.html文件名的URL類型(多個(gè)之間使用";"隔開)

          ????????11、filenamelength:

          ????????頁面保存到本地時(shí),隨機(jī)生成的文件名的長度

          ????????12、cacheunitsize:

          ????????一個(gè)cache單元的大小

          ????????13、reptile-downloadfiletype:

          ????????將被抓取到本地的文件類型(多個(gè)之間使用";"隔開)

          ????????14、reptile-undownloadfiletype:

          ????????頁面被保存到本地時(shí),該種類型的文件的URL將被改成遠(yuǎn)程的URL
          地址,如果這種類型出現(xiàn)在reptile-downloadfiletype中時(shí),則文件將被抓取
          到本地,而URL也將改成本地的URL(多個(gè)之間使用";"隔開)

          ????c、在參數(shù)配置好之后,執(zhí)行bin/run.bat文件

          4、如何擴(kuò)展接口?

          ????擴(kuò)展接口使用的配置文件是:conf/snoics-reptile-urlregex.xml

          ????首先加入一段如下的配置,其中正則表達(dá)式部分應(yīng)該特定的需要自己給出,
          ??? reptile-replace-string用來代替URL出現(xiàn)的位置,在程序執(zhí)行的過程中,該部分
          ??? 會(huì)被自動(dòng)替換。
          ????<bean id="ahrefRegexUrl" class="com.snoics.reptile.regex.url.impl.UrlRegex" singleton="false">
          ????????<property name="regexUrl">
          ????????????<!-- 提取可能包含URL的字符串 -->
          ????????????<value><![CDATA[<[^!<>]*\shref\s*=\s*["']?[^<>]*["'\s][^<>]*>]]></value>
          ????????</property>
          ????????<property name="replaceRegexUrl">
          ????????????<!-- 替換可能包含URL的字符串 -->
          ????????????<value><![CDATA[<[^!<>]*\shref\s*=\s*["']?reptile-replace-string["'\s][^<>]*>]]></value>
          ????????</property>
          ????????<property name="getRegexUrl">
          ????????????<!-- 提取最終URL -->
          ????????????<ref bean="ahrefGetRegexUrl"/>
          ????????</property>
          ????</bean>
          ????

          ????其中ahrefGetRegexUrl是實(shí)現(xiàn)了com.snoics.reptile.regex.url.IGetUrlRegex
          ??? 接口的類,用來從可能包含了URL的字符串里面提取其中包含的URL?

          ??? 其次加入如下的配置:

          ???? <bean id="ahrefGetRegexUrl" class="com.snoics.reptile.regex.url.impl.AhrefGetRegexUrl" singleton="false">
          ???????? <property name="regexString">
          ????????????? <!-- 提取最終URL -->
          ?????????????? <value><![CDATA[href\s*=\s*["']?[^\s"]+["'\s]\s*]]></value>
          ???????? </property>
          ???????? <property name="unIncludeRegexString">
          ??????????????? <!--
          ???????????????????? 排除不需要的類型
          ???????????????????? 多個(gè)正則表達(dá)式之間使用';'隔開
          ???????????????? ?-->
          ??????????????? ?<value><![CDATA[javascript\s?:\s?;mailto\s?:\s?;^#$;]]></value>
          ?????????? </property>
          ????? </bean>

          ????最后,在如下的配置中,加入剛才配置好的部分

          ????<bean id="urlRegexMap" class="com.snoics.reptile.regex.url.impl.UrlRegexMap">
          ????????<property name="ulrRegexMap">
          ????????????<map>
          ????????????????<!-- 名稱 -->
          ????????????????<entry key="ahref">
          ????????????????????<!-- 解析URL使用的類 -->
          ????????????????????<ref bean="ahrefRegexUrl"/>
          ????????????????</entry>
          ????????????????<entry key="src">
          ????????????????????<ref bean="srcRegexUrl"/>
          ????????????????</entry>
          ????????????</map>
          ????????</property>
          ????</bean>


          5、版本歷史

          2.0:

          核心代碼全部重寫,增加了擴(kuò)展性,通過擴(kuò)展之后,基本上能實(shí)現(xiàn)對(duì)整個(gè)網(wǎng)站完整的解析

          1.0:

          實(shí)現(xiàn)了整站抓取的基本的功能,不能解析特殊的URL,對(duì)javascript無法辨認(rèn)


          下載地址:

          snoics-reptile2.0.part1.rar

          snoics-reptile2.0.part2.rar

          snoics-reptile2.0-doc.rar?????
          posted @ 2006-05-29 21:41 snoics 閱讀(2816) | 評(píng)論 (3)編輯 收藏
               現(xiàn)在各種各樣的框架滿天飛,幾乎隨便找個(gè)人都能把各種框架,模式,說的頭頭是道.弄的好象如果不懂這些,你就是落伍,就不懂的什么是編程,什么是企業(yè)應(yīng)用系統(tǒng)的開發(fā).

               現(xiàn)在很多初學(xué)者一上來,就是這個(gè)框架,那個(gè)框架的,一會(huì)學(xué)了這個(gè)一會(huì)又學(xué)那個(gè),往往忽略了最重要最基本的JAVA基礎(chǔ).
              
               個(gè)人認(rèn)為,框架不等同于JAVA,它只是JAVA下面的一種工具,就算學(xué)會(huì)使用再多的框架也不代表就學(xué)會(huì)了JAVA.一種工具可能一開始不會(huì)用,可是如果重復(fù)使用過幾次,我想只要是正常的人,沒有人學(xué)不會(huì)的,就算是條件反射也該會(huì)了(會(huì)用了和理解了是兩種完全不同的情況).

               結(jié)果也就出現(xiàn)了這樣的情況,問到一個(gè)挺簡單的問題,可是卻都答不上來,原因是原來都是在別人的或者是框架里面封裝好的東西,自己只是負(fù)責(zé)調(diào)用而已.

               框架是比較容易過時(shí)的東西,只有基礎(chǔ)才是比較持久的.所以當(dāng)在學(xué)會(huì)了使用一大堆的框架以后,請(qǐng)考慮一下,如果除了框架,我還剩下了什么.

               只是對(duì)這種情況的感想,沒有任何貶低框架的意思.
          posted @ 2006-03-09 09:43 snoics 閱讀(2100) | 評(píng)論 (4)編輯 收藏
                  一般情況下,在記錄日志時(shí),只能把通過API進(jìn)行記錄的信息寫入自定義的日志文件,其余的信息就無法被寫入了.

                 解決的辦法就是重寫System.out和System.err,讓System.out,System.err的寫入轉(zhuǎn)向到你的日志文件,這樣只要在控制臺(tái)的所有的輸出信息都會(huì)被記錄到日志文件中.

                例如可以在系統(tǒng)進(jìn)行初始化時(shí)進(jìn)行這樣的操作:

                重寫System.out:
                        PrintStream printStreamOut = new PrintStream(outputStreamOut);
                        System.setOut(printStreamOut);
               
                重寫System.err
                        PrintStream printStreamErr = new PrintStream(outputStreamErr);
                        System.setErr(printStreamErr);


                這里的outputStreamOut,和outputStreamErr都是自定義的重定向的日志文件的OutputStream


                現(xiàn)在重定向輸出的問題解決了,可以又出現(xiàn)了一個(gè)新的問題: 在控制臺(tái)上看不到任何輸出信息,輸出的信息全部被定向到日志文件中.

                 要解決這個(gè)問題還需要自己實(shí)現(xiàn)一個(gè)OutputStream,讓OutputStream能同時(shí)寫入多個(gè)輸出.

                 首先繼承java.io.OutputStream,然后實(shí)現(xiàn)public abstract void write(int b) throws IOException; 并且覆寫java.io.OutputStream中的其他的方法,具體的實(shí)現(xiàn)方式按照自己的需求來做,這里就不做出具體的實(shí)現(xiàn)了.

                 通過實(shí)現(xiàn)自己實(shí)現(xiàn)OutputStream之后,
                在
                     PrintStream printStreamOut = new PrintStream(outputStreamOut);
                     PrintStream printStreamErr = new PrintStream(outputStreamErr);
                中分別把outputStreamOut和outputStreamErr對(duì)象換成自己實(shí)現(xiàn)的OutputStream對(duì)象,這樣就可以實(shí)現(xiàn)在一個(gè)OutputStream對(duì)象中進(jìn)行多個(gè)輸出操作.

                按照以上的思路進(jìn)行的實(shí)現(xiàn),可以完全把控制臺(tái)的所有的輸出寫入到日志文件中,包括System.out.println這樣的輸出.

                         snoics
          posted @ 2006-03-03 09:10 snoics 閱讀(3850) | 評(píng)論 (7)編輯 收藏
          1. 把opencms.war復(fù)制到Tomcat\webapps目錄下,并復(fù)制classes12.jar到Tomcat\common\lib目錄下,然后啟動(dòng)Tomcat,在啟動(dòng)完成之后,刪除opencms.war

          2. 在oracle中新建一個(gè)表空間opencms

          3. 用http://localhost:8080/opencms/setup進(jìn)行安裝

          4. 安裝過程中,數(shù)據(jù)庫類型選擇oracle9i, 用戶名為system,另一個(gè)用戶名是準(zhǔn)備用來分配給opencms使用的用戶名,這個(gè)地方可以按照具體的情況自己進(jìn)行設(shè)置,這個(gè)用戶可以是本身在oracle中并不存在的用戶,安裝程序會(huì)自動(dòng)的創(chuàng)建這個(gè)用戶,并把opencms表空間分配給該用戶,接下來的表空間和Index的輸入框中都輸入opencms.

          5. 接下去只需要按照提示一路Continue,最后當(dāng)文件都導(dǎo)入完成之后,opencms就安裝完成了,初始管理員和密碼是Admin,admin

          6. 安裝完成之后,
            修改/system/workplace/resources/commons/explorer.js
            中的行:
          "<td>"+vr.langadress+"&</td>\n"
          為:"<td nowrap>"+vr.langadress+"</td>\n"

          然后把org.opencms.locales.zh.zip包復(fù)制到Tomcat\webapps\opencms\WEB-INF\packages\modules目錄下,使用Admin進(jìn)入opencms系統(tǒng),選擇Administrator管理界面,然后選擇模塊管理,導(dǎo)入org.opencms.locales.zh.zip包.然后解壓org.opencms.locales.zh.zip,把org.opencms.locales.zh\system\workplace\locales\zh\messages下的templateone_form_zh.properties和templateone_zh.properties以及org整個(gè)文件夾復(fù)制到Tomcat\webapps\opencms\WEB-INF\classes目錄下.

          7.重啟Tomcat,使用Admin進(jìn)入opencms系統(tǒng),選擇Administrator管理界面,然后把語言類型設(shè)置成chinese,這時(shí)就能使用中文界面的opencms了
          posted @ 2006-02-23 09:57 snoics 閱讀(4135) | 評(píng)論 (9)編輯 收藏

          /*
           * Encrypt 字符串加密
           *
           * @author shiwei 2004-8-28
           */

          package com.snoics.base.util;
          /**
           * Encrypt 字符串加密
           * @author shiwei
           *
           */
          public class Encrypt {

              public Encrypt() {

              }

              /**
               * 加密字符串
               * @param encryptstring
               * @return String
               */
              public static String encrypt(String encryptstring){
               String newstring="";
               if(encryptstring.length()<1){
                return encryptstring;
               }else{
                String tempstring=StringClass.remove(encryptstring,0,(int)(encryptstring.length()/3));
                tempstring=StringClass.getConvertString(tempstring);
                encryptstring=StringClass.getConvertString(encryptstring);
                newstring=encrypt(encryptstring,tempstring);
                return newstring;
               }
              }
             
              /**
               * 普通加密字符串
               *
               * @param encryptstring1
               * @param encryptstring2
               * @return String
               */
              public static String encrypt(String encryptstring1, String encryptstring2) {
                  int strcount = 0; //字符串ASCII碼的總和
                  int newpasswordlength = 0; //生成的密碼長度
                  int seed1 = 0; //種子
                  int seed2 = 0;
                  String str = "";
                  String newpassword = ""; //生成的密碼
                  char newchar;
                  int newcharint = 0;
                  int thechar = 0;

                  str = encryptstring2 + encryptstring1;

                  if (str.length() > 0) {
                      for (int i = 0; i < str.length(); i++) {
                          strcount = strcount + str.charAt(i);
                      }

                      newpasswordlength = (strcount * strcount) / str.length() + str.length();

                      int temp = 0;
                      int temp2 = 0;
                      while ((newpasswordlength <= 0) || (newpasswordlength > 100)) {
                          temp = temp + str.length();
                          temp2 = temp + temp2;
                          newpasswordlength = 100;
                      }

                      for (int i = 0; i < encryptstring1.length(); i++) {
                          seed1 = seed1 + encryptstring1.charAt(i);
                      }
                      for (int i = 0; i < encryptstring2.length(); i++) {
                          seed2 = seed2 + encryptstring2.charAt(i);
                      }

                      for (int i = 0; i < newpasswordlength; i++) {

                          if (i < str.length()) {
                              thechar = str.charAt(i);
                          } else {
                              thechar = str.charAt(i % (str.length() - 1))
                                      + str.charAt((str.length() - 1)
                                              - (i % str.length()));
                          }
                          newcharint = thechar * (seed1 * (i + 1) + thechar);
                          newcharint = newString(newcharint);
                          newcharint = thechar * (seed2 * (i + 1) + thechar);
                          newcharint = newString(newcharint);
                          newchar = (char) newcharint;
                          newpassword = newpassword + String.valueOf(newchar);
                      }
                      newpassword = newpassword.substring((encryptstring2.length() + encryptstring1.length()) % 100);
                      return (newpassword);
                  } else {
                      return ("空字符串不能被加密");
                  }
              }

              private static int newString(int charint) {
                  while ((charint > 127) || (charint < 32)) {
                      while (charint > 127) {
                          charint = (charint - charint/2+1) / 2;
                          while(charint==60||charint==62||charint==34||charint==32||charint==39){
                           charint = charint + 1;
                          }
                      }
                      while (charint < 32) {
                          charint = (charint + charint/2-1) * 2;
                          while(charint==60||charint==62||charint==34||charint==32||charint==39){
                           charint = charint + 1;
                          }
                      }
                  }
                  return (charint);
              }

              public static void main(String[] args) {
                  String theusername = "1abc1";
                  String thepassword = "1def1";
                  String theusername1 = "1def1";
                  String thepassword1 = "1abc1";
                  String newstring=Encrypt.encrypt(theusername,thepassword);
                  System.out.println("newstring="+newstring);
                  String newstringa=Encrypt.encrypt(theusername1,thepassword1);
                  System.out.println("newstringa="+newstringa);
                  String newstring2=Encrypt.encrypt(newstring);
                  System.out.println("newstring2="+newstring2);
                  String newstring3=Encrypt.encrypt(newstring2);
                  System.out.println("newstring3="+newstring3);
              }

          }


          執(zhí)行結(jié)果:

          newstring=*?C4%;V[GKOoUX[_#i%ptvy)!!#01&c(46*o;=?y{?AB#4HI7%7LM:==U?@?AXBZFGHH`IJKfgO4QlmR7qrt::wxz=
          newstringa=(=A4$;TYDHLmTW[_#d#kpvx*!#-/$a(56)m89;vy@AB!2DE4$7LN::;P==?AYBXCDEE^IJKceL3NikR6opq89uvw;
          newstring2=ij887i)54)?!@A!!!Ab##eBf##ddd#efff#b#cadc#bc_!!]@
          newstring3=(qI}!+A!#z%%4?((
          posted @ 2006-02-20 10:45 snoics 閱讀(1753) | 評(píng)論 (0)編輯 收藏


          1. 用戶可以從外部的系統(tǒng)接入,模塊中的用戶只有用戶名,密碼和描述這三個(gè)最基本的系統(tǒng),然后通過ID和外部系統(tǒng)的用戶建立聯(lián)系

          2. 角色之間可以繼承,可以有父角色和子角色,而且個(gè)數(shù)不限,允許多重繼承,通過繼承之后,角色可以擁有所有父角色的權(quán)限

          3. 權(quán)限的劃分方式
          ????
          ??? a.權(quán)限用事件來劃分,每個(gè)事件通過一個(gè)handle來進(jìn)行處理
          ???
          ??? b.一個(gè)handle就是一個(gè)class

          ??? c.事件的來源是一個(gè)配置文件,因此配置文件的方式可以是這樣的


          <?xml version="1.0" encoding="GBK"?>
          <control>
          ?<!-- 是否自動(dòng)轉(zhuǎn)向 默認(rèn)為false-->
          ?<isforward>false</isforward>
          ?<!-- 組件 -->
          ?<cmp id="cmp1" name="組件一">
          ??<!-- 事件 -->
          ??<event id="event1" name="事件一">
          ???<handle>com.snoics.cmp.event.Event1</handle>
          ???<view>/url1/pagename1</view>
          ??</event>
          ??<event id="event2" name="事件二">
          ???<handle>com.snoics.cmp.event.Event2</handle>
          ???<view>/url2/pagename2</view>
          ??</event>
          ?</cmp>
          ?<cmp id="cmp2" name="組件二">
          ??<event id="event3" name="事件三">
          ???<handle>com.snoics.cmp.event.Event3</handle>
          ???<view>/url3/pagename3</view>
          ??</event>
          ??<event id="event4" name="事件四">
          ???<handle>com.snoics.cmp.event.Event4</handle>
          ???<view>/url4/pagename4</view>
          ??</event>
          ?</cmp>
          </control>

          ?
          通過解析這個(gè)配置文件,可以得到每個(gè)事件的ID,這個(gè)ID就是以后的權(quán)限標(biāo)志

          給角色分配的權(quán)限就是這樣的一個(gè)一個(gè)的標(biāo)志


          4.??通過AOP給應(yīng)用系統(tǒng)加入權(quán)限控制

          ???? 系統(tǒng)在執(zhí)行的過程中,能自動(dòng)的進(jìn)行攔截,如果發(fā)現(xiàn)當(dāng)前的class是處于配置文件中的某一個(gè)handle的時(shí)候,自動(dòng)進(jìn)行權(quán)限驗(yàn)證,分析當(dāng)前用戶所擁有的角色中是否具有執(zhí)行相關(guān)的handle的權(quán)限,在驗(yàn)證通過以后允許執(zhí)行這個(gè)handle中的操作,否則拒絕執(zhí)行


          這樣做的好處就是能夠不在業(yè)務(wù)系統(tǒng)中寫入任何和權(quán)限相關(guān)的代碼,與權(quán)限相關(guān)的部分全部都是通過配置文件的配置來進(jìn)行處理的,同時(shí)實(shí)現(xiàn)了權(quán)限控制的完全組件化.


          如果大家有什么好的建議歡迎一起討論

          posted @ 2006-02-16 13:11 snoics 閱讀(1866) | 評(píng)論 (3)編輯 收藏
               摘要: 經(jīng)過一段時(shí)間終于把分頁完善了,可以實(shí)現(xiàn)JDBC分頁(可以根據(jù)配置屏蔽不同的數(shù)據(jù)庫之間的差異,并能對(duì)自動(dòng)根據(jù)具體的數(shù)據(jù)庫類型進(jìn)行SQL優(yōu)化),HIBERNATE2,和HIBERNATE3的分頁,對(duì)內(nèi)存中的數(shù)組進(jìn)行分頁,并且都支持快速的查詢功能,不過hibernate分頁的除外.使用HIBERNATE進(jìn)行分頁的時(shí)候,需要實(shí)現(xiàn)一個(gè)接口,將POJO轉(zhuǎn)換成二維數(shù)組的形式.同時(shí)支持將已經(jīng)讀取到的數(shù)據(jù)在顯示到表...  閱讀全文
          posted @ 2006-02-16 10:09 snoics 閱讀(2767) | 評(píng)論 (4)編輯 收藏



          能實(shí)現(xiàn)整個(gè)網(wǎng)站的抓取,暫時(shí)還不支持javascript形式的連接

          能抓取網(wǎng)頁,網(wǎng)頁中的所有的URL重新生成,圖片,文件,包括所有格式的文件,全部都能保持原有的路徑結(jié)構(gòu)

          抓取下的網(wǎng)頁,通過apache搭建成網(wǎng)站,能在本地保持成一個(gè)完整的網(wǎng)站的形式

          能直接使用,也能支持二次開發(fā)使用,不過暫時(shí)還會(huì)存在比較多的不完善的地方.

          提供內(nèi)置線程,能控制抓取操作執(zhí)行的時(shí)間,循環(huán)執(zhí)行

          東西還不是很完善,歡迎大家提出意見

          下載地址  http://www.aygfsteel.com/Files/snoics/snoics-reptile.rar

          posted @ 2006-02-10 09:20 snoics 閱讀(2987) | 評(píng)論 (11)編輯 收藏
          首先配置摸板

           <!-- 代理模板 -->
           <bean id="txProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
            <property name="transactionManager"><ref local="transactionManager"/></property>
            <property name="transactionAttributes">
                <props>
                          <prop key="*">PROPAGATION_REQUIRED</prop>
                      </props>
            </property>
           </bean>


          摸板配置好以后,每次要添加一個(gè)新的代理,只需要類似下面這樣添加

           <bean id="servicerProxy" parent="txProxy">
                  <property name="target">
                        <ref local="serviceTarget"/>
                  </property>
              </bean>

          從而大大簡化了代理的配置
          posted @ 2005-12-13 10:25 snoics 閱讀(634) | 評(píng)論 (0)編輯 收藏

          --角色繼承關(guān)系表
          create table SNOICS_RI  (
             RI_PARE_ROLEID       VARCHAR2(32)                    not null,
             RI_CHILD_ROLEID      VARCHAR2(32)                    not null,
             constraint PK_SNOICS_RI primary key (RI_PARE_ROLEID, RI_CHILD_ROLEID)
          );

          --角色表
          create table SNOICS_ROLE  (
             ROLE_ID              VARCHAR2(32)                    not null,
             ROLE_NAME            VARCHAR2(32)                    not null,
             ROLE_FORBID          VARCHAR2(1),
             ROLE_DESCRIPT        VARCHAR2(500),
             constraint PK_SNOICS_ROLE primary key (ROLE_ID)
          );

          角色資料存放在SNOICS_ROLE中
          角色之間可以繼承,而且可以多重繼承,
          角色的繼承關(guān)系存放在SNOICS_RI

          可以使用SNOICS_ROLE自己到自己的多對(duì)多的關(guān)系來進(jìn)行配置

          -----------------------------------------------------------------------------------------------------
          POJO:

          package com.snoics.cmp.security.dao.spring.hibernate.pojo;

          import java.io.Serializable;
          import java.util.Set;

          public class RolePOJO implements Serializable {
           private static final long serialVersionUID = -4776193447586778294L;
           private String roleid;
           private String rolename;
           private String roleforbid;
           private String roledescript;
           
           private Set user;
           private Set rolePermission;
           private Set roleP;
           private Set roleC;

           /**
            * @return Returns the roleC.
            */
           public Set getRoleC() {
            return roleC;
           }

           /**
            * @param roleC The roleC to set.
            */
           public void setRoleC(Set roleC) {
            this.roleC = roleC;
           }

           /**
            * @return Returns the roleP.
            */
           public Set getRoleP() {
            return roleP;
           }

           /**
            * @param roleP The roleP to set.
            */
           public void setRoleP(Set roleP) {
            this.roleP = roleP;
           }

           /**
            * @return Returns the rolePermission.
            */
           public Set getRolePermission() {
            return rolePermission;
           }

           /**
            * @param rolePermission The rolePermission to set.
            */
           public void setRolePermission(Set rolePermission) {
            this.rolePermission = rolePermission;
           }

           /**
            * @return Returns the user.
            */
           public Set getUser() {
            return user;
           }

           /**
            * @param user The user to set.
            */
           public void setUser(Set user) {
            this.user = user;
           }

           /**
            * @return Returns the roledescript.
            */
           public String getRoledescript() {
            return roledescript;
           }

           /**
            * @param roledescript The roledescript to set.
            */
           public void setRoledescript(String roledescript) {
            this.roledescript = roledescript;
           }

           /**
            * @return Returns the roleforbid.
            */
           public String getRoleforbid() {
            return roleforbid;
           }

           /**
            * @param roleforbid The roleforbid to set.
            */
           public void setRoleforbid(String roleforbid) {
            this.roleforbid = roleforbid;
           }

           /**
            * @return Returns the roleid.
            */
           public String getRoleid() {
            return roleid;
           }

           /**
            * @param roleid The roleid to set.
            */
           public void setRoleid(String roleid) {
            this.roleid = roleid;
           }

           /**
            * @return Returns the rolename.
            */
           public String getRolename() {
            return rolename;
           }

           /**
            * @param rolename The rolename to set.
            */
           public void setRolename(String rolename) {
            this.rolename = rolename;
           }
          }

          -----------------------------------------------------------------------------------------------------
          role.hbm.xml中的繼承關(guān)系部分的配置

            <set name="roleP" table="SNOICS_RI" cascade="all" inverse="false" lazy="true">
                 <key column="RI_CHILD_ROLEID"/>
                <many-to-many column="RI_PARE_ROLEID" class="com.snoics.cmp.security.dao.spring.hibernate.pojo.RolePOJO"/>
            </set>
            <set name="roleC" table="SNOICS_RI" cascade="all" inverse="false" lazy="true">
               <key column="RI_PARE_ROLEID"/>
               <many-to-many column="RI_CHILD_ROLEID" class="com.snoics.cmp.security.dao.spring.hibernate.pojo.RolePOJO"/>
            </set>

          posted @ 2005-12-12 16:28 snoics 閱讀(698) | 評(píng)論 (1)編輯 收藏
          主站蜘蛛池模板: 藁城市| 宜宾市| 五台县| 大埔区| 莱阳市| 民权县| 罗城| 庆安县| 正阳县| 新余市| 新和县| 崇州市| 深圳市| 郧西县| 多伦县| 中卫市| 莱西市| 尖扎县| 长沙县| 海林市| 海原县| 乌拉特后旗| 柳林县| 营山县| 辉南县| 怀化市| 扎囊县| 枣强县| 平邑县| 大英县| 阜平县| 涿鹿县| 岳普湖县| 江西省| 会昌县| 东平县| 盐城市| 兴化市| 泽普县| 新郑市| 阳高县|