Jeffrey's Sky

          Go with wind
          隨筆 - 14, 文章 - 1, 評論 - 15, 引用 - 0
          數(shù)據(jù)加載中……

          2008年10月14日

          安裝配置 IBM FileNet 所遇問題記錄系列 之六 使用好 VWTool工具以及 log。

          在 使用 PE WorkFlow 的過程中, 總會遇到流程中的一些異常情況。 如果,某些節(jié)點執(zhí)行出現(xiàn)異常,Hang住等等。 因此,此時使用一些 PE下的工具尤為重要。

          (1) vwtool 
           
                a. 啟動
                    vwtool -r <region number> -Y <admin user>+<pwd>

                b. 常用命令
                    count *     : 列出所有系統(tǒng) queue
                    wobquery <Queue name>   : 在這里,可以列出隊列里的內(nèi)容,以及某個wobnum下的參數(shù)值等等,以便debug.

           (2) elog

                elog 記錄了PE在啟動運行過程中的事件, 包括 PE的system default locale. 
                elog 所在的位置在 \fnsw\local\logs\elogs folder (the same folder where you installed the Process Service software).
           

          posted @ 2011-10-21 00:46 Jeffrey Feng 閱讀(343) | 評論 (0)編輯 收藏

          在IBM P Server (LPAR)上重裝AIX操作系統(tǒng)記錄

          前幾天,有機會自己實戰(zhàn)了將刻好的AIX6.1系統(tǒng)(里面還有一些FileNet相關軟件)盤恢復到一個IBM P570 Server 上。 其中,使用了HMC,設置引導程序。
          現(xiàn)將過程記錄如下:

          posted @ 2011-10-21 00:46 Jeffrey Feng 閱讀(444) | 評論 (0)編輯 收藏

          在 WebSphere中 配置 Oracle Datasource 問題記錄

               摘要: 在 WebSphere中 配置 Oracle Datasource 問題記錄  閱讀全文

          posted @ 2010-09-07 11:53 Jeffrey Feng 閱讀(753) | 評論 (0)編輯 收藏

          XA Datasource 與 Non-XA Datasource 區(qū)別

               摘要:   閱讀全文

          posted @ 2010-08-27 13:39 Jeffrey Feng 閱讀(4576) | 評論 (2)編輯 收藏

          安裝配置 IBM FileNet 所遇問題記錄系列 之五 打好客戶端的Patch

          CE 和 PE都有自己的客戶端安裝包。 這些安裝包有助于CE,PE, AE間在相互通訊時不會因為某些小版本的改動而使得相互不匹配。

          因此,注意,一定要, CE,PE間相互的Client端相互打好Patch.
          還要將CE,PE的Client 端都給AE打一遍。


          posted @ 2010-08-11 11:00 Jeffrey Feng 閱讀(337) | 評論 (0)編輯 收藏

          安裝配置 IBM FileNet 所遇問題記錄系列 之四 檢查AE,PE, CE 狀態(tài)是否正常


          在Install & Config 完 IBM FileNet之后,一個重要的事情就是check所安裝的AE,PE,CE是否安裝正確、能夠正常啟動。 這里,簡要列出一些check方法。

          1. 啟動 CE DB .
              與CE有關的一般有兩個 DB。 一個 是 FNGCDDB用于記錄 CE Domain的一些配置信息。 主要有以FNGCD為 prefix 的四個表(FNGCD, FNGCD_ADDON, FNGCD_CESERVERS, FNGCD_OSCBROWNERS)。 當你有需要想重新建立CE Domain的時候,最好將這四個表刪掉,然后重新建。
               再一個DB就是 Object Store所在的DB,比如FNOS1DB. 在這個DB中,在建完Domain之后共有179張表。
           
                值得注意的是,CE App Server是通過 DataSource來連接CE的DB的。所以,如果,有任何CE DB的改變,也同時需要更改DataSource。 顯而易見,因為有兩個 CE DB,所以也有兩套CE DataSource, 一個是用于連接 FNGCDDB(還有個以XA結(jié)尾的,這個在運行時經(jīng)常被用到),一個是用于連接FNOSDB,即Object Store DB。CE 就是靠這兩個Source來取得CE 信息的。

                Check CE 狀態(tài)的方法:
                http://localhost:9080/FileNet/Engine.

          2.  啟動 AE。
          由于 AE是一個 WebApp 程序,所以只需要啟動 AE所在的 Server即可。
               
                Check AE 狀態(tài)的方法:
               http://localhost:9080/Workplace

          3. 啟動 PE
          PE 核心是一個 C++程序。在運行時, AE會嘗試連接 PE,CE,而PE和CE之間也有連接關系。

          Windows based 的PE server需要注意有兩個系統(tǒng) Service(通過 Service.msc)是需要起來的。 一個 叫 PE Service Manager,一個是Img ControlService;需要檢查;

          再有一個 重要的命令是 initfnsw,可以通過這個命令來起停 PE server。

          ① initfnsw start     //-啟動PE
          ② initfnsw stop      //-停止PE
               killfnsw -y          //-停止PE
          ③ initfnsw status    //-查看PE狀態(tài)
          ④ initfnsw restart   //-重啟PE

          另外, 檢查 PE的狀態(tài),可以用這個URL 來 check,

          http://localhost:32776/IOR/ping.

          另外,有關 PE 和 CE間連接性的檢查方法:

          在 PE所在 Server上,用如下URL check,

          http://localhost:32776/IOR/FileNet.CE.PEDirectoryServer

          A "good" sample response from the PEDirectoryServer looks something like this:
          IOR:000000000000002049444c3a46696c654e65745f63656d707270632f63656d707270633a312e300000000001000000000000007e000102000000000c31302e31352e372e31303800071d000000000031afabcb000000002084240cba00000001000000000000000100000008526f6f74504f41000000000800000001000000001400000000000002000000010000001800000000050100010000000000010109000000010001010000000026000000020002
           
          此外,quick test are (on PE  server):

          If you’re having trouble with the PE to CE communications, there may be something wrong with the java environment. Try the following tests in a command prompt window on the PE Server (Substituting appropriate host names, ports, user names, group names, and passwords as appropriate for your configuration):

          On your PE Server:

          cd \fnsw\bin

          Try a basic "little pipe" ping:
          \fnsw\java\jre\bin\java -classpath pe.jar;pe3pt.jar filenet.pe.ceorb.test.PEDirectoryClientTest /port=32776 /rpc=ping

          Set the little pipe’s CE connection configuration:
          \fnsw\java\jre\bin\java -classpath pe.jar;pe3pt.jar filenet.pe.ceorb.test.PEDirectoryClientTest /port=32776 /rpc=setConfig /uri=http://hqbpm34:7001/wsi/FNCEWS40DIME/ /user=PEAdmin /password=secret

          Get a list of all realm names:
          \fnsw\java\jre\bin\java -classpath pe.jar;pe3pt.jar filenet.pe.ceorb.test.PEDirectoryClientTest /port=32776 /rpc=getRealmNames

          Get info about a user named PEAdmin:
          \fnsw\java\jre\bin\java -classpath pe.jar;pe3pt.jar filenet.pe.ceorb.test.PEDirectoryClientTest /port=32776 /rpc=getUserInfo /user=PEAdmin

          Get info about a user named PEAdmin in a specific realm:
          \fnsw\java\jre\bin\java -classpath pe.jar;pe3pt.jar filenet.pe.ceorb.test.PEDirectoryClientTest /port=32776 /rpc=getUserInfo /user=PEAdmin /realm= dc=epbdc,dc=eng,dc=filenet,dc=com

          Get info about a group named PEAdministrators:
          \fnsw\java\jre\bin\java -classpath pe.jar;pe3pt.jar filenet.pe.ceorb.test.PEDirectoryClientTest /port=32776 /rpc=getUserInfo /user=PEAdministrators

          Get “group expansion info” for a group named PEAdministrators:
          \fnsw\java\jre\bin\java -classpath pe.jar;pe3pt.jar filenet.pe.ceorb.test.PEDirectoryClientTest /port=32776 /rpc=expandGroup /group=PEAdministrators

          The above runs should produce output of some sort that might shed light on a CE configuration or connection problem…

          取得 PE run 的 LOG:
          Get some detailed information about the PE to CE communications

          If the PE still can not get connected to the CE, we need to enable some of the java tracing to see what’s happening when the PEDirectoryServer communicates with the CE.

          For PE 4.0.2 and newer, including PE 4.5

          To enable the tracing, we need an fnlog4j.properties file in the \fnsw\java\jre\lib directory on the PE Server. The fnlog4j.properties file needs to include a line something like this:

          log4j.logger.filenet.pe.ceorb.server=DEBUG, TXT

          The easiest way to do this is to copy the \fnsw_loc\sd\fnlog4j.properties.sample file as \fnsw\jre\lib\fnlog4j.properties (without the “.sample”). Then, using a simple text editor (e.g., notepad), add the “, TXT” to the above line of text in the fnlog4j.properties file.

          The PEDirectoryServer will see the fnlog4j.properties file and that will trigger additional tracing and logging to occur. After putting the fnlog4j.properties file in the \fnsw\java\jre\lib directory, click the Apply button in the Process Task Manager’s Security tab again.

          After it fails, check the java trace file. The location of the java trace file is defined in the fnlog4j.properties file itself. By default, it's c:\PE.txt.

          3. 檢查 connection to PE from AE.

          在登錄到 AE 之后,可以點擊 AE Site Preference中 Task Pages頁面,看是否能打開。以及PCC, Process Designer是否都能夠打開以及 Transfer Workflow.



          posted @ 2010-08-08 13:20 Jeffrey Feng 閱讀(1118) | 評論 (0)編輯 收藏

          安裝配置(Install configure IBM FileNet) 所遇問題記錄系列 之三 配置 (Configure) Application Engine (AE)

               摘要: 配置 (Configure) Application Engine (AE)  閱讀全文

          posted @ 2010-08-02 23:03 Jeffrey Feng 閱讀(518) | 評論 (0)編輯 收藏

          開源軟件問題記錄系列 之一 在 Tomcat 中設置 Datasource

               摘要: 開源軟件問題記錄系列 之一 在 Tomcat 中設置 Datasource  閱讀全文

          posted @ 2010-08-02 10:51 Jeffrey Feng 閱讀(226) | 評論 (0)編輯 收藏

          安裝配置 IBM FileNet 所遇問題記錄系列 之二 一定要 Enable Application security 在配置完 Content Engine (CE) 之后


          由于使用了 TDS 作為 FileNet 的 LDAP 系統(tǒng),所以一定要在 WAS中將Admin Security enable。 這時,需要注意的是如果沒有在 WAS 的 Global security 中將 Application Security Enable,那么在配置 Content Engine (CE) Domain 的時候,就會出現(xiàn) Annoymous user cannot access to CE 的錯誤。 所以,一定要同時 Enable Application Security.



          posted @ 2010-07-30 13:47 Jeffrey Feng 閱讀(294) | 評論 (0)編輯 收藏

          安裝配置 IBM Filenet 所遇問題記錄系列 之一 在IBM Tivoli Directory Server 配置完之后

               摘要: 安裝配置 IBM Filenet 所遇問題記錄系列  閱讀全文

          posted @ 2010-07-30 13:33 Jeffrey Feng 閱讀(462) | 評論 (0)編輯 收藏

          有關在eclipse上遠程debug的問題。

             Java 提供了遠程debug的功能,這確實是一件很好的事。它能夠幫助我們在一些沒有虛機的OS(比如HP,AIX,等等)下調(diào)試我們的程序。

             1.建立Remote debug的準備工作。
              a.可以將這些在java命令行中的設置放到一個script中去。例子如下所示:
           
              java -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y  -classpath
              其中,“-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y”是必須的。suspend=y---表明是在程序啟動后hang在那個端口處并監(jiān)聽(如果設為n,則不會hang);address=8787---表明是在遠端機器上的端口號。除此之外,在java后也可以添加java的系統(tǒng)環(huán)境變量,如-D等等。   
              b.在eclipse中可以通過設立一個remote debug的方式來建立這種連接。  
             2.遠程調(diào)試時,局部變量的值無法Watch/Inspect問題的解決
              這實際上是由eclipse在build的時候,沒有將javac后的option -g加上去。只有當加上 -g這個參數(shù)時,所有的調(diào)試信息才會被build到class文件中去。
              但ecipse沒有提供這樣在build時設置參數(shù)的user interface。所以,最好的方式就是寫一個Ant腳本。
              例子如下,

               <?xml version="1.0" encoding="UTF-8" standalone="no"?>
              <project basedir="." default="build" name="ssdv">
              <property name="build.location" value="../ssdv_build"/>
              <property name="debuglevel" value="source,lines,vars"/><!--必須的-->
              <property name="target" value="1.5"/>
              <property name="source" value="1.5"/>
              
              <target name="init">
                  <mkdir dir="bin"/>
              </target>
              
              
              <target name="clean">
                  <delete dir="bin"/>
              </target>
             
              <target depends="init" name="build-project">
                  <echo message="${ant.project.name}: ${ant.file}"/>

                  <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}">  <!--必須的-->
                      <src path="."/>
                      <classpath refid="ssdv.classpath"/>
                  </javac>

              </target>
              
          </project>
             
               這樣,將生成的build工程拷貝到要測試的遠程OS。啟動腳本,然后就可以看到local variables了。

          posted @ 2008-12-12 17:34 Jeffrey Feng 閱讀(817) | 評論 (0)編輯 收藏

          Drools 規(guī)則引擎的使用總結(jié)

              前一段時間在開發(fā)了一個做文本分析的項目。在項目技術選型的過程中,嘗試使用了Drools規(guī)則引擎。讓它來作為項目中有關模式分析和關鍵詞匹配的任務。但后來,因為某種原因,還是撇開了Drools。現(xiàn)將這個過程中使用Drools的一些經(jīng)驗和心得記錄下來。
          (一)什么時候應該使用規(guī)則引擎
              這實際是一個技術選型的問題。但這個問題又似乎是一個很關鍵的問題(一旦返工的話,你就知道這個問題是多么重要了)。不知大家有沒有過這樣的經(jīng)驗和體會。往往在項目開始的時候,總會遇到應該選用什么技術?是不是應該使用最新的技術?或者應該選用什么技術呢(PS:現(xiàn)在計算機軟件中的各種技術層出不窮,具有類似功能的技術很多)?
              不管怎么樣,這些問題總會困擾著我。比如,這次的這個項目。項目要求是要在一些log文件中(這些log文件都是很大的應用系統(tǒng)所產(chǎn)生的,但由于legacy的原因,log本身的維護和規(guī)范工作一直沒有得到改善,所以想借助于一些外部應用對這些log做以分析和清洗)抽取出有用的信息。
              于是,第一個想到的就是,這是一個文本挖掘類的項目。但又想,要抽取有用信息,必須得建立一些規(guī)則或pattern(模式)。所以,我第一個想到了規(guī)則引擎。因為這里面要建立好多規(guī)則,而這些規(guī)則可以獨立于代碼級別(放到一個單獨的drl文件里)并可以用規(guī)則引擎去解析和執(zhí)行。另一個重要的原因是,我原來用過,比較熟悉。這樣,也可以節(jié)省開發(fā)時間吧。于是,好不猶豫的就開始做了Demo....
              但事實上,在經(jīng)歷了一個多星期的編碼、測試后,我發(fā)現(xiàn)運用規(guī)則引擎實在是太笨拙了。
              (1)首先必須建立一些數(shù)據(jù)模型。通過這些模型來refer規(guī)則文件中的LHS和Action。
              (2)還要考慮規(guī)則的conflict。如果有一些規(guī)則同時被觸發(fā),就要考慮設定規(guī)則的優(yōu)先級或者是設定activiation-group來保證在一個group中的規(guī)則只有一個規(guī)則可以被觸發(fā)。
              (3)對于‘流’規(guī)則group ruleflow-group的使用。如果要控制在workingmemory中的規(guī)則被觸發(fā)的順序,則可以將這些規(guī)則分組。然后,通過規(guī)則建模的方式來實現(xiàn)。但這也添加了一定的effort。修改或者更新不大方便。
              所以,基于上述體會,我更認為規(guī)則引擎更適用于那些對非流程性規(guī)則匹配的應用。當然,Drools也支持對流程性規(guī)則的建模過程。但,這也許不是最好的方式。
          (二)Drools規(guī)則引擎的使用雜記
              (1)Fact 的變更監(jiān)聽。在Drools里,如果一個Fact通過規(guī)則而改變,則需將這種改變通知給規(guī)則引擎。這里,一般有兩種方式:顯式和隱式。
                   顯式---在drl文件中通過 update、modify來通知;在程序中,通過Fact的引用調(diào)用modifyObject等方法來實現(xiàn)。
                   隱式---通過在java bean實現(xiàn)property Listener Interface來讓引擎自動監(jiān)聽到屬性值的變化。我更習慣于這種方式。因為,一般看來凡是在規(guī)則引擎中添加到fact都是希望引擎來幫你進行管理的。所以,那它自己看到fact的變化是種很省事的辦法。也很簡單,就是用java bean property 監(jiān)聽的方式。
                   通過StatefulSession來注冊。
                   調(diào)用StatefulSession的某個instance 的insert(Object,true)實現(xiàn)。而這個object是一個java bean。其中,要實現(xiàn)
                
                  
          private final PropertyChangeSupport changes  = new PropertyChangeSupport( this );
              public void addPropertyChangeListener(final PropertyChangeListener l) {
                  this.changes.addPropertyChangeListener( l );
              }

              public void removePropertyChangeListener(final PropertyChangeListener l) {
                  this.changes.removePropertyChangeListener( l );
              }
            
                  然后在set方法中調(diào)用
              this.changes.firePropertyChange( "temp",null,this.temp );
               (2)規(guī)則觸發(fā)的優(yōu)先級、組設置
              往往,在設計我們自己的規(guī)則時,要考慮規(guī)則的觸發(fā)條件。這不僅限于LHS的條件部分,還有規(guī)則本身被觸發(fā)的有些設置等等。這里,列出一些比較常用和有效的規(guī)則優(yōu)先級設置方式,以及需要注意的地方。
                   A.通過Salience方式。此值可正可負。越大優(yōu)先級越高,也會被引擎首先執(zhí)行。
                   B.通過ruleflow-group 方式。實際上,使用這種方式也就是在使用建立規(guī)則流的方式。在Eclipse 3.3 中,Drools提供了建立規(guī)則流的插件。要在drl的同級目錄中建立rf和rfm兩個文件(當然,插件會幫助你建立這些)。
                  
          選擇RuleFlow File。
                這里,需要注意的一點是要在啟動規(guī)則引擎的時候,加入啟動rule flow的代碼。

               InputStreamReader source = new InputStreamReader(RuleManager.class
                              .getResourceAsStream(rule_path));
                     PackageBuilder builder = new PackageBuilder();
                      builder.addPackageFromDrl(source);
                      builder.addRuleFlow(new InputStreamReader(RuleManager.class
                              .getResourceAsStream(rule_flow_path)));
                     Package pkg = builder.getPackage();
                      RuleBase ruleBase = RuleBaseFactory.newRuleBase();
                      ruleBase.addPackage(pkg);
                然后,在每次啟動規(guī)則引擎的時候,調(diào)用如下方法:

                      StatefulSession ss;
                      ss.startProcess(flowProgress);
                      ss.fireAllRules();

                      flowProgress 是一個string類型。這個flow的名字。

          這個rule flow圖中,顯示了一個簡單的規(guī)則流。如RSA就是一個rule-flow的名字。在這個rule set中可以設定一組rules。這樣,就可以分開規(guī)則執(zhí)行的順序。在于rf和rfm同名的另一個 drl文件中定義這些組的名字。通過關鍵字 ruleflow-group 來表明。
              C.通過activation-group的方式。通過這種方式,可以exclude一組rule中一旦有一個rule被invoke,而其它rule不會被execute。同時,可以搭配使用salience關鍵字來標明每個rule的優(yōu)先級,這樣就能夠使得你想要的一般性概念的rule先被匹配執(zhí)行。
              D.在使用ruleflow-group 的時候要注意使用lock-on-active true 關鍵字在每個rule。這樣可以避免一旦有rule被觸發(fā),不會造成循環(huán)匹配執(zhí)行。
              E.如果在LHS部分,需要調(diào)用某個方法來返回真、假值作為判斷的一個條件,那么可以用eval函數(shù)。
              如,eval(pattern.matched(5,$line.getCurrLine()))
              其中,pattern是某個加入到workingmemory中的一個實例。matched是這個實例所代表類的一個方法。它返回boolean類型。
             
            (3)Drools規(guī)則引擎的使用感受
             
          總之,Drools還是一個很不錯的開源規(guī)則引擎。現(xiàn)在v4.0以上的版本已經(jīng)比以前的版本在速度上有了很大的提升。可以作為我們一般應用程序系統(tǒng)的中間件產(chǎn)品(那些規(guī)則不是很經(jīng)常改變的系統(tǒng),已經(jīng)非流程類規(guī)則)。但是,這其中還是需要一些額外的effort來學習它的使用文檔以及整體架構,有一定的學習曲線。
            
              最后,我想一個較好的對于技術使用的practice就是:首先知道它能為你做什么,它最好的應用領域,然后再去深入。
             
              (PS:如果誰有使用Drools的問題,可以聯(lián)系我!一起討論!)

               
              

          posted @ 2008-11-04 14:19 Jeffrey Feng 閱讀(13644) | 評論 (13)編輯 收藏

          Db2 catalog(編目)(轉(zhuǎn))

          在DB2數(shù)據(jù)庫中,編目(catalog)這個單詞很難理解,我自己當初在學習 DB2的時候也常常被這個編目搞的很不明白,直到現(xiàn)在我個人也感覺到DB2中編目(catalog)這個術語用的不是很好,具體來說編目有編目節(jié)點,編目 數(shù)據(jù)庫等如果要理解編目我先簡單講一下DB2數(shù)據(jù)庫的體系結(jié)構,在DB2數(shù)據(jù)庫中最大的概念是系統(tǒng)(節(jié)點)也就是主機,下面是實例,實例下面是數(shù)據(jù)庫,然 后是表空間,然后是數(shù)據(jù)庫對象。現(xiàn)在假設你有一個數(shù)據(jù)庫服務器在p570的機器上,你有一個客戶端在windows,linux或任何平臺上,你現(xiàn)在想建 立一個客戶端到服務器端的連接,具體步驟是什么呢?
          第一步:
          你必須要在客戶端的機器上能夠把遠程的服務器能夠識別出來,這個具體如何來做呢?Oracle中可以用SQL*NET配置,SYBASE中用OPEN CLIENT;而在DB2使用的編目(catalog)方式,具體來說就是通過編目把遠程的服務器寫在本地客戶端的一個文件中:
          db2 catalog tcpip node p570 remote 172.10.10.10 server 50000
          在上面的這條命令中p570是一個節(jié)點名(在一個機器上必須是唯一的),remote后面是服務器的IP地址,server是遠程服務器上實例對應的端口號
          DB2通過這種方式在本地的SQLNODIR文件中把遠程服務器的信息記錄下來
          所以編目節(jié)點其實就是把遠程服務器映射到本地,通過SQLNODIR中的記錄能夠找到遠程服務器和實例,類似指向遠程服務器和實例的地址指針
          第二步:
          當把遠程的服務器IP地址,實例編目下來后,第二步應該把該實例下的數(shù)據(jù)庫編目到本地
          db2 catalog db REMOTEDB at node p570
          在這條命令中,REMOTEDB是遠程實例下的數(shù)據(jù)庫,p570是我們在第一步中編目的節(jié)點名
          這條命令執(zhí)行后會在本地SQLDBDIR文件中記錄遠程數(shù)據(jù)庫的信息,這這里編目數(shù)據(jù)庫可以理解為把遠程服務器實例下的數(shù)據(jù)庫映射到本地為一個別名
          =========================
          上面是客戶端和服務器不在同一臺機器上,是通過編目節(jié)點,編目數(shù)據(jù)庫來實現(xiàn)客戶端連接到服務器上數(shù)據(jù)庫的目的,如果是連接在同一臺機器上,那么這時候不要 顯示的編目節(jié)點,但是在服務器上當我們創(chuàng)建一個實例的時候,有一個隱含的把實例在本地編目的過程,假設在p570上創(chuàng)建一個實例名為db2inst1,其 實有一個隱含的
          db2 catalog local node db2inst1 instance db2inst1 system p570 ostype aix的步驟,
          同樣當你在db2inst1下創(chuàng)建一個數(shù)據(jù)庫MYDB的時候,有一個隱含的編目(catalog)數(shù)據(jù)庫的步驟:
          db2 catalog db mydb at node db2inst1的步驟
          至此你可以這樣理解編目(catalog),編目就是在本地或遠程建立客戶端到服務器的數(shù)據(jù)庫連接的目的,他類似Oracle數(shù)據(jù)庫中的通過 SQL*NET或netca配置客戶端到服務器的連接;類似SYBASE中的OPEN CLIENT;類似informix中Iconnect

          http://blog.csdn.net/fxxxgxxx/archive/2007/08/27/1760999.aspx

          posted @ 2008-10-23 16:50 Jeffrey Feng 閱讀(933) | 評論 (0)編輯 收藏

          Eclipse 插件開發(fā)中的 classnotfound 問題(轉(zhuǎn)載)

          目的Eclipse插件開發(fā)中,經(jīng)常要引用第三方包或者是引用其他插件中的類,由于插件開發(fā)環(huán)境引用類路徑的設置和運行平臺引用類路徑的設置不同,經(jīng)常導致開發(fā)過程OK,一旦運行則出現(xiàn)NoClassDefFoundError的問題。本文的目的是全面分析各種情況下類路徑的設置,以避免這個問題的出現(xiàn)。

           

          說明Jar包和類路徑實際上是一個概念,比如類com.bbebfe.Test.class打包為test.jar包,添加類引用就直接添加test.jar包。而如果是添加類文件路徑,則添加包目錄的上級目錄,比如lib/com/bbebfe/Test.class,則添加lib文件夾,而不是com文件夾。在此后的例子中都只說明Jar包的形式。

           

          分析Eclipse插件開發(fā)對于Jar包的引用主要有三種原因:

          1. 插件引用第三方包(普通的jar包或者類文件,不是插件)。

          a)        開發(fā)環(huán)境引用配置,在prject -> properties -> Java build path中設置。

          b)        運行環(huán)境引用配置,在plugin manifest編輯器的Runtime選項卡下的classpath中添加tset.jar包的引用(在MANIFEST.MF中表現(xiàn)為Bundle-ClassPath: lib/test.jar, plugin.xml表現(xiàn)為<runtime>節(jié)下的引用

                                   i.  類文件在lib目錄下,如下的設置導出lib目錄下所有目錄:

          <runtime>

                      <library name="lib/">

                       <export name="*"/>

                      </library>

             </runtime>

                                 ii.  test.jarlib目錄下:

                  <runtime>

                      <library name="lib/test.jar">

                       <export name="*"/>

                      </library>

             </runtime>

                                iii.  實際上上面的設置可以簡化為:

          <runtime>

                      <library name="lib/"/>

             </runtime>

              或者

          <runtime>

                      <library name="lib/test.jar"/>

             </runtime>

                 默認即導出lib目錄下的所有包和jar下的所有包

                 實際上,執(zhí)行b)項設置后,會自動執(zhí)行a)項設置,使開發(fā)環(huán)境和運行環(huán)境同時有效。

          2. 插件B引用插件工程A(非Eclipse插件,而是自己另外一個插件項目中的類)

          a)        首先必須將A中的B需要的類暴露(export)出來

                                   i.              如果有MANIFEST.MF文件,則表現(xiàn)為plugin manifest編輯器中runtime節(jié)的exported packages,通過這里添加需要export的包。在manifest.mf文件中是Export-Package: com.bbebfe

                                 ii.              如果只有plugin.xml,則表現(xiàn)為plugin manifest編輯器中runtime節(jié)的library visibilityplugin.xml文件中表現(xiàn)為

          <runtime>

                 <library>

                        <export name=”com.bbebfe.*”/>

                 ...

          b)        B插件工程的plugin manifest編輯器中的dependencies選項卡中添加對A插件的引用(這要求運行對話框中的plugins列表的workspace plugins中必須包含A插件)。

          c)         如果B工程是一個RCP工程,則必須在product編輯器的configuration選項卡中包含A插件工程。

          3. 插件B引用Eclipse插件A的類。

          a)        Eclipse插件中的類都是Exported,因此這步省略。

          b)        B插件工程的plugin manifest編輯器中的dependencies選項卡中添加對A插件的引用(這要求preferences -> plugin development -> target目標平臺必須包含A插件,且運行對話框的plugins列表中的target platform中必須選中A插件)。

           

          總結(jié):如果B插件引用的A也是一個插件,則A必須出現(xiàn)在B插件的plugin dependencies引用中,而不是其他地方,否則肯定會出現(xiàn)運行時NoClassDefFoundError問題(因此必須在plugin manifest編輯器的dependencies選項卡下進行設置)。而且只需要在這里設置的設置對開發(fā)環(huán)境和運行環(huán)境同時有效)

           

          注意:還有一種情況就是開發(fā)環(huán)境沒有某個包或者插件,而只在運行環(huán)境(target)中存在,此時就必須設置正確的target,然后按照正常程序添加插件引用,但此時已經(jīng)不能在plugin manifestdependencies選項卡中設置(因為在開發(fā)環(huán)境找不到這個plugin),而必須在plugin.xmlMANIFEST.MF文件中手工設置。plugin只要target中存在該插件,則開發(fā)和運行也不會有問題。

          posted @ 2008-10-14 10:19 Jeffrey Feng 閱讀(1352) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 大荔县| 水富县| 天柱县| 松滋市| 喀喇| 房产| 拉萨市| 鄂托克前旗| 鹤山市| 海丰县| 闵行区| 孝义市| 三河市| 昭觉县| 襄垣县| 汶川县| 汪清县| 察雅县| 婺源县| 习水县| 柳林县| 辉县市| 定西市| 泰来县| 开阳县| 延川县| 乐东| 扎赉特旗| 龙岩市| 西峡县| 万宁市| 文山县| 高台县| 曲水县| 天全县| 南京市| 呼伦贝尔市| 巴马| 鲁山县| 盘锦市| 武功县|