斷點

          每天進步一點點!
          posts - 174, comments - 56, trackbacks - 0, articles - 21

          2010-5-4 9:55:00 org.apache.catalina.session.StandardManager doLoad
          嚴重: IOException while loading persisted sessions: java.io.EOFException
          java.io.EOFException
                  at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2228)
                  at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2694)
                  at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:761)
                  at java.io.ObjectInputStream.<init>(ObjectInputStream.java:277)
                  at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
                  at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:362)
                  at org.apache.catalina.session.StandardManager.load(StandardManager.java:321)
                  at org.apache.catalina.session.StandardManager.start(StandardManager.java:637)
                  at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:438)
                  at org.apache.catalina.core.StandardContext.start(StandardContext.java:4258)
                  at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
                  at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
                  at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
                  at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
                  at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
                  at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
                  at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
                  at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
                  at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
                  at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
                  at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
                  at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
                  at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
                  at org.apache.catalina.core.StandardService.start(StandardService.java:516)
                  at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
                  at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
                  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                  at java.lang.reflect.Method.invoke(Method.java:585)
                  at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
                  at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

          解決:
          刪除Tomcat里面的work\Catalina\localhost下的內容即可解決。

          posted @ 2010-05-04 10:09 斷點 閱讀(309) | 評論 (0)編輯 收藏

          今天測試工程的時候,我用本地“承保工程”調用另外一個同事的“規則工程”,也報了上面的錯誤。


          網上相關解決如下:
          java.lang.UnsupportedClassVersionError: Bad version number in .class file異常,檢查了一下我的myEclipse,發現不知道啥時候不小心將編譯器改成JDK6.0了,那個工程是從同事的機上拷貝過來的,用的編譯器是JDK5.0,試了一下,果然是這個問題引起。
              那次在Linux上部署工程時也出現過因為版本不同引起的問題,那時我們用的IDE的編譯器是JDK5.0,而那臺Linux裝的是JDK6.0,部署后發現很多功能都出錯,看來有些東西還是得注意一下啊。
              附,在myEclipse中改變編譯器的方法:Project->Properties->Java Compiler->Configure Workspace Setting,在彈出的頁面中可以進行設置。

          posted @ 2010-04-25 17:52 斷點 閱讀(315) | 評論 (0)編輯 收藏

          在操作Drools的測試例子時,Eclipse后臺報以下錯誤:
          org.drools.RuntimeDroolsException: Unable to load dialect 'org.drools.rule.builder.dialect.java.JavaDialectConfiguration:java'
           at org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:160)
           at org.drools.compiler.PackageBuilderConfiguration.buildDialectConfigurationMap(PackageBuilderConfiguration.java:146)
           at org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:121)
           at org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:98)
           at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:124)
           at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:86)
           at com.sample.DecisionTableTest.readDecisionTable(DecisionTableTest.java:58)
           at com.sample.DecisionTableTest.main(DecisionTableTest.java:35)
          Caused by: java.lang.RuntimeException: The Eclipse JDT Core jar is not in the classpath
           at org.drools.rule.builder.dialect.java.JavaDialectConfiguration.setCompiler(JavaDialectConfiguration.java:91)
           at org.drools.rule.builder.dialect.java.JavaDialectConfiguration.init(JavaDialectConfiguration.java:52)
           at org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:156)
           ... 7 more


          主要是缺少一個jar包:org.eclipse.jdt.core_3.3.1.v_780_R33x.jar而引起的。

          posted @ 2010-03-16 00:30 斷點 閱讀(2139) | 評論 (0)編輯 收藏

          package org.jbpm.helloworld;

          import junit.framework.TestCase;
          import org.jbpm.graph.def.ProcessDefinition;
          import org.jbpm.graph.exe.ProcessInstance;
          import org.jbpm.graph.exe.Token;

          public class HelloWorldTest extends TestCase {
                
            public void testHelloWorldProcess() {
                  ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("helloWorld.xml");
                  /* 從這里可以看出,是對流程定義的XML進行解析*/
             
              ProcessInstance processInstance =  new ProcessInstance(processDefinition);
              Token token = processInstance.getRootToken();
               assertSame(processDefinition.getStartState(), token.getNode()); 
               token.signal();
               assertSame(processDefinition.getNode("s"), token.getNode());
               token.signal();
               assertSame(processDefinition.getNode("end"), token.getNode());
            }



           流程定義文件:helloWorld.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="Helloworld">
                  <start-state>
                          <transition to='s' />
                   </start-state>
                    <state name='s'>
                           <transition to='end' />
                  </state>
                   <end-state name='end' />
          </process-definition>

          posted @ 2010-03-11 00:06 斷點 閱讀(312) | 評論 (0)編輯 收藏

          package rules;

          import java.io.InputStream;
          import java.io.StringReader;
          import java.util.ArrayList;
          import java.util.List;

          import org.drools.RuleBase;
          import org.drools.RuleBaseFactory;
          import org.drools.WorkingMemory;
          import org.drools.compiler.PackageBuilder;
          import org.drools.decisiontable.InputType;
          import org.drools.decisiontable.SpreadsheetCompiler;
          import org.drools.rule.Package;


          public class TestPremium {
           public static final String path = "rules\\premium\\0326\\02\\030006\\rate.xls";
           
           public static void main(String[] args) throws Exception {
            try {
             RuleBase ruleBase = readDecisionTable();
             WorkingMemory workingMemory = ruleBase.newStatefulSession();
             int flag = path.indexOf("FormulaOrder");   
             ElementResultVO r = new ElementResultVO();
             PremiumHelper helper = new PremiumHelper();
             workingMemory.setGlobal("r", r);
             workingMemory.setGlobal("helper", helper);
             
             AppBaseVO base  = new AppBaseVO();
             AppVhlVO vhl = new AppVhlVO();
             AppPrmCoefVO prmCoef = new AppPrmCoefVO();
                
             base.setCAmtCur("01");
             base.setNAmt(4000000d);
             
             workingMemory.insert(base);
             workingMemory.insert(vhl);
             workingMemory.insert(prmCoef);
             
             workingMemory.fireAllRules();
             
             System.out.println("==========compile success!===========");
             
            } catch (Exception e) {
             System.out.println("==========compile failure!===========");
             e.printStackTrace();
            }
           }
           
           private static RuleBase readDecisionTable() throws Exception {
                   final SpreadsheetCompiler converter = new SpreadsheetCompiler();
                   InputStream is = TestPremium.class.getClassLoader().getResourceAsStream(path);
                    final String drl = converter.compile( is, InputType.XLS );
                    PackageBuilder builder = new PackageBuilder();
                    builder.addPackageFromDrl( new StringReader( drl ) );
                    Package pkg = builder.getPackage();
                    RuleBase ruleBase = RuleBaseFactory.newRuleBase();
                    ruleBase.addPackage( pkg );
                    return ruleBase;
           }

          }

          ++++++++++++++++++++++++++++++++++++++
          執行后的一部分:
          #From row number: 369
          rule "_369"
            salience 65167
            activation-group "x"
           when
                vhl:AppVhlVO(CUsageCde == "374015", CVhlTyp == "365012", 
                eval(helper.getVhlYear(vhl.getCFstRegYm())>=4 && helper.getVhlYear(vhl.getCFstRegYm())<1000))
           then
                r.putCoef("rate",0.67);
                r.putField("Table.col","Cvrg.NRate");
          end

          posted @ 2010-03-10 23:00 斷點 閱讀(913) | 評論 (1)編輯 收藏

          package com.premium.rules;

          import java.io.File;
          import java.io.FileNotFoundException;
          import java.io.FileReader;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.Reader;
          import java.io.StringReader;
          import java.util.ArrayList;
          import java.util.HashMap;
          import java.util.Map;

          import org.apache.log4j.Logger;
          import org.drools.compiler.DroolsParserException;
          import org.drools.compiler.PackageBuilder;
          import org.drools.decisiontable.InputType;
          import org.drools.decisiontable.SpreadsheetCompiler;
          import org.drools.rule.Package;

          public class DrlPackageManager {

           // 用于緩存Drools的Package,key為Excel的完整路徑,value為此文件編譯過后的Package
           static Map<String, Package> pkgMap = new HashMap<String, Package>();
           private static Logger logger = Logger.getLogger(DrlPackageManager.class);


          /**
            * 通過Excel的文件名緩存Drools的Package
            *
            * @param fileName
            * @return
            * @throws Exception
            */
           public static Package getPackageByXsl(String fileName) throws Exception {
            Package pkg = (Package) pkgMap.get(fileName);
            if (pkg != null)
             return pkg;

            final SpreadsheetCompiler converter = new SpreadsheetCompiler();
            InputStream is = null;
            try {
             is = DrlPackageManager.class.getResourceAsStream(fileName);
            } catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
             is.close();
             throw new Exception("====讀取規則的資源文件" + fileName + "出錯,請檢查文件"+ fileName + "=====", e);
            }
            String drl = null;
            try {
             drl = converter.compile(is, InputType.XLS);
             logger.debug("Drools Excel規則文件:" + fileName + "編譯成.drl文件的結果:"+ drl);
            } catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
             is.close();
             throw new Exception("xls文件編譯成drl文件出錯", e);
            }

            PackageBuilder builder = new PackageBuilder();
            StringReader srd = new StringReader(drl);
            builder.addPackageFromDrl(srd);
            pkg = builder.getPackage();
            pkgMap.put(fileName, pkg);
            is.close();
            return pkg;
           }

          }

          posted @ 2010-03-10 22:29 斷點 閱讀(1271) | 評論 (0)編輯 收藏

          1、Drools是什么?
          Drools 是一個基于Charles Forgy's的Rete算法的,專為Java語言所設計的規則引擎。Rete算法應用于面向對象的接口將使基于商業對象的商業規則的表達更為自然。Drools是用Java寫的,但能同時運行在Java和.Net上。

          一路到底的框架:
          大多數開發者都有自己喜愛的框架。無特定順序,它們包括表現層框架(Struts, JSF, Cocoon和Spring),持久化框架(JDO, Hibernate, Cayenne and Entity Beans)以及結構框架(EJB, 又是Spring, Pico和Excalibur), 還有其它很多。每種框架都各有所長,給開發者提供子許多“即開即用”的功能。使用框架來部署應用意味著你避免了許多讓人厭煩的細節,讓你集中注意力到關鍵之處。
          到目前為直,在框架所能做的事中仍然有一個缺口,那就是商業邏輯沒有框架。像EJB和Spring這樣的工具雖好,但它們卻幾乎沒有提及怎么組織你的那些if …then語句。把Drools加到你的開發工具箱中意味著現在你可以“一路到底”的使用框架來構建你的應用程序。


          2.Drools4.0版本:
          JBoss Drools是一款開源的業務規則引擎,目前已經發布了4.0版本。在4.0版本中主要的特色和改進如下:
          1.更高的性能:較之于之前的版本,Drools 4.0更為高效并且占用更少的內存空間。內部的性能測試表明,性能的提升已經從幾分鐘縮減為若干秒鐘。
          2.提升的表達能力:當前的發布版引入了更為強大且的業務行為腳本語言(MVFlex表達式語言)。
          3.友好的業務分析工具:一個具備向導功能的規則編輯器的增加,使得非程序員用戶可以設計復雜的業務規則,并在沒有編寫任何代碼的情況下自動綁定企業數據。提供帶有菜單提示和下拉列表的向導來幫助用戶完成設計過程。
          4.規則流的能力:可視化的建模技術可以使用戶聲明式地為相應規則的執行路徑建立訪問模型。它同樣還允許在單個工作內存中存在多個并發工作流,并根據控制典型的業務處理過程的需求,從根本上組織規則的執行。 5.多應用支撐:對于有狀態和無狀態處理過程增強的支持以及全面的線程安全性,輔助Drools更輕易的嵌入在Java平臺,JavaEE以及面向服務的商業應用之中。
          6.直接可和Hibernate集成:用戶可以直接在Hibernate驅動的RDBMS查詢中對數據(facts)進行判斷。現有的Hibernate組件可以直接用在規則引擎里,減少編碼的工作量。
          7.為非程序員設計的BRMS:從技術角度來看,新的BRMS基于Web開發,使用AJAX呈現,便于協作,是一個編寫、版本化控制和管理規則的系統。業務分析師目前可以交互式的授權或修改自動轉換的規則。管理員目前具備完全的生命周期控制能力,包含何種規則在QA階段,分段(staging),以及實施(production)階段等等。

          3.Drools的總體架構:
          我們使用Drools就是為了讓它處理數據與規則的關系,因此Drools要獲得數據和獲得規則,然后進行執行。因此Drools分為編制和運行時兩個部分。
          編制是指產生rule的過程,Drools用DRL,或者XML來描述規則。編制的過程包括為規則建立DRL 或XML 文件,傳入一個由Antlr 3 文法器定義的解析器中。解析器對文件中規則文法的正確性進行檢查并為descr 建立一個中間結構,在AST 中的descr 代表規則的描述。AST 然后將descr 傳入Package Builder中,由其進行打包。Package Builder 同時負責包括打包中用到的所有代碼產生器和編譯器。Package 對象是自包含并可配置的,它是一個包含規則的序列化的對象。

          RuleBase 是運行時組件,包含一個或多個Package。Package 在任何時候都可以向RuleBase中添加或刪除。一個RuleBase 可以同時初始化多個Working Memory,在其間維護著一個弱引用,除非重新進行配置。Working Memory 包含許多子組件,如Working Memory Event Support(事件支持),Truth Maintenance System(真值維護系統), Agenda 和 Agenda Event Support(事件支持)。向Working Memory 中設置對象的工作可能要在建立了一個或多個激活的規則后才結束。Agenda 負有規劃激活規則運行的責任。


          4.Drools主要有以下類實現:
          編制:
          XmlParser,DrlParser 分別用來解析XML描述的規則文件和DRL描述的規則文件。
          PackageBuilder 創建package實例。
          例如:
          PackageBuilder builder = new PackageBuilder();
          builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "package1.drl" ) ) );
          builder.addPackageFromXml( new
          InputStreamReader( getClass().getResourceAsStream( "package2.xml" ) ) );
          Package pkg = builder.getPackage();

          運行時的類:
          RuleBase 使用RuleBaseFactory 實例化,默認情況下返回一個ReteOO 的RuleBase。Package通過使用addPackage 方法按順序加入。你可以指定任何名稱空間的Packages 或者同一名稱的多個包加入RuleBase。
          RuleBase ruleBase = RuleBaseFactory.newRuleBase();
          ruleBase.addPackage( pkg );

          事實數據相關類:
          WorkingMemory 保存運行時事實數據的地方。
          由ruleBase產生:WorkingMemory wm= ruleBase.newStatefulSession();

          加載事實數據:
          wm.insert(object );
          insert方法返回一個FactHandle對象指向workingMemory中對象的引用。如果要對Object進行修改刪除等操作都要通過FactHander對象來完成。

          在準備好Rule,和Fact后 就可以調用 WorkingMemory對象的 fireAllRules()方法執行規則引擎。

          Agenda上面提到過它負有規劃激活規則運行的責任。
          它運行過程分兩個階段:
          1) WorkingMemory Actions : assert 新的 facts ,修改存在的 facts 和 retract facts 都是 WorkingMemory Actions 。通過在應用程序中調用 fireAllRules() 方法,會使引擎 轉換到 Agenda Evaluatioin 階段。
          2) Agenda Evaluation :嘗試選擇一條規則進行激發( fire )。如果規則沒有找到就 退出,否則它就嘗試激發這條規則,然后轉換到 WorkingMemory Actions 階段,直到 Agenda中為空。 

          posted @ 2010-03-10 21:43 斷點 閱讀(527) | 評論 (0)編輯 收藏

                  Eval 是Javascript 中一個非常有用而奇特的預定義函數,它的概念和作用也像C 語言中的指針一樣較難理解,因而在實際應用中常常不能運用得當。函數Eval的功能是把一個字符串參數轉換成Javascript的代碼,這個被轉換的代碼可以是一個變量名,也可以是一個算術表達式,甚至是一個函數表達式。如i = eval("name1")是把名為name1 的變量賦值給變量i;i=eval("3+2")是把表達式3+2 的值5 賦給變量i ; i = eval("funname(n)")是把函數funname(n)返回值傳給變量i。這時,你也許要問了,這不是多此一舉嗎?直接寫成i=name1;i=3+2;i=funname(n)不就行了嗎?是的,如果我們僅僅把字符串值當作參數,是一點作用都不起。但如果我們把字符串變量作為參數,Eval 的作用就大了。如i=eval(str)(其中,str 是字符串變量),str 作為一個變量,其值可以動態地發生變更,從而使i = eval(str)產生不同的結果。這時str是不是像C語言的指針?它“指”向name1(即str 的值是"name1" 字串),i得到的是變量name1 的值。它“指”向一個函數名,就調用該函數并返回值給i(但該函數必須事先定義好,Javascript 引擎要找得到才行)。此外,它比“指針”更有用的是,還可解析執行動態生成的運算表達式。
                  
                  下面通過一個Web仿真計算器實例來描述它的這個作用。這是一個基于Web的計算器仿真程序。用戶可以像操作一個現實世界中的計算器一樣,通過單擊按鈕輸入數據和運算符號,當輸入等號后在文本框中得到最終結果。它的原理很簡單,就是記錄用戶輸入的運算式字串,然后用Eval 函數把該字串轉成運算式交給Javascript 執行即可。先手動建立一個簡單的HTML 文件,只要<html>、head>和<body>元素即可。接著在<body></body>間插入以下html 代碼,設置好該程序界面。
          <input type="text" name=textdisp value="" ><br>
          <input type="button" name=leftk value="(" onclick="yunsuan(value)">
          <input type="button" name=rightk value=")" onclick="yunsuan(value)">
          <input type="button" name=op1 value="1" onclick="yunsuan(value)">
          <input type="button" name=op2 value="2" onclick="yunsuan(value)">
          <input type="button" name=op3 value="3" onclick="yunsuan(value)">
          <input type="button" name=op4 value="4" onclick="yunsuan(value)">
          <br><p>
          <input type="button" name=op5 value="5" onclick="yunsuan(value)">
          <input type="button" name=op6 value="6" onclick="yunsuan(value)">
          <input type="button" name=op7 value="7" onclick="yunsuan(value)">
          <input type="button" name=op8 value="8" onclick="yunsuan(value)">
          <input type="button" name=op9 value="9" onclick="yunsuan(value)">
          <input type="button" name=op0 value="0" onclick="yunsuan(value)">
          <br><p>
          <input type="button" name=oppoint value="." onclick="yunsuan(value)">
          <input type="button" name=opadd value="+" onclick="yunsuan(value)">
          <input type="button" name=opsub value="-" onclick="yunsuan(value)">
          <input type="button" name=opmul value="*" onclick="yunsuan(value)">
          <input type="button" name=opdiv value="/" onclick="yunsuan(value)">
          <input type="button" name=opeql value="=" onclick="yunsuan(value)">
          <br><p>
          <input type="button" name=cle value="restar" onclick="res()">
          現在用IE6 打開它,就會得到如圖所示的效果。再接再厲,現在在<head></head>中輸入以下Javascript
          代碼:
          <TITLE>test</TITLE>
          <script language="javascript">
          var expstring="";
          var numstring="";
          function yunsuan(btn){
          if(btn=="=")
          textdisp.value=eval(expstring);
          else
          {if(((btn>="0")&&(btn<="9"))||(btn=="."))
          {numstring=numstring+btn;
          textdisp.value=numstring;
          }
          else
          numstring="";
          expstring=expstring+btn;
          }
          }
          function res(){
          expstring="";
          textdisp.value="";
          numstring="";
          }
          </script>
          這樣,我們利用Eval 函數,僅僅十幾行代碼就做好了這個計算器。

          轉載:http://school.cfan.com.cn/pro/pother/2006-08-28/1156732532d14455.shtml

          posted @ 2010-03-09 23:24 斷點 閱讀(713) | 評論 (0)編輯 收藏

          目前來看,JS框架以及一些開發包和庫類有如下幾個:Dojo 、Scriptaculous 、Prototype 、yui-ext 、Mochikit、mootools 、moo.fx 、jQuery。

          Dojo (JS library and UI component ):
          Dojo是目前最為強大的j s框架,它在自己的Wiki上給自己下了一個定義,dojo是一個用JavaScript編寫的開源的DHTML工具箱。dojo很想做一個“大一統”的 工具箱,不僅僅是瀏覽器層面的,野心還是很大的。Dojo包括ajax, browser, event, widget等跨瀏覽器API,包括了JS本身的語言擴展,以及各個方面的工具類庫,和比較完善的UI組件庫,也被廣泛 應用在很多項目中,他的UI組件的特點是通過給html標簽增加tag的方式進行擴展,而不是通過寫JS來生成,dojo的API模仿Java類庫的組織 方式。 用dojo寫Web OS可謂非常方便。dojo現在已經4.0了,dojo強大的地方在于界面和特效的封裝,可以讓開發者快速構建一些兼容標準的界面。
          優點:庫相當完善,發展時間也比較長,功能強大,據說利用dojo的io.bind()可以實現comet,看見其功能強大非一般,得到IBM和SUN的支持。
          缺點:文件體積比較大,200多KB,初次下載相當慢,此外,dojo的類庫使用顯得不是那么易用,j s語法增強方面不如prototype。

          Prototype (JS OO library):
          是一個非常優雅的JS庫,定義了JS的面向對象擴展,DOM操作API,事件等等,以prototype為核心,形成了一個外圍的各種各樣 的JS擴展庫,是相當有前途的JS底層框架,值得推薦,感覺也是現實中應用最廣的庫類(RoR集成的AJAX JS庫),之上還有 Scriptaculous 實現一些JS組件功能和效果。
          優點:基本底層,易學易用,甚至是其他一些js特效開發包的底層,體積算是最小的了。
          缺點:如果說缺點,可能就是功能是他的弱項

          Scriptaculous (JS UI component based on prototype):
          Scriptaculous是基于prototype.js框架的JS效果。包含了6個js文件,不同的文件對應不同的js效果,所以說,如果底層用 prototype的話,做js效果用Scriptaculous那是再合適不過的了,連大名鼎鼎的digg都在用他。
          優點:基于prototype是最大的優點,由于使用prototype的廣泛性,無疑對用戶書錦上添花,并且在《ajax in action》中就拿Scriptaculous來講述js效果。
          缺點:剛剛興起,需要時間的磨練。

          yui-ext (JS UI component):
          基于Yahoo UI的擴展包yui-ext是具有CS風格的Web用戶界面組件 能實現復雜的Layout布局,界面效果可以和backbase媲美,而且使用純javascript代碼開發。真正的可編輯的表格Edit Grid,支持XML和Json數據類型,直接可以遷入grid。許多組件實現了對數據源的支持,例如動態的布局,可編輯的表格控件,動態加載的Tree 控件、動態拖拽效果等等。1.0 beta版開始同Jquery合作,推出基于jQuery的Ext 1.0,提供了更多有趣的功能。
          優點:結構化,類似于java的結構,清晰明了,底層用到了Jquery的一些函數,使整合使用有了選擇,最重要的一點是界面太讓讓人震撼了。
          缺點:太過復雜,整個界面的構造過于復雜。

          Mochikit :
          MochiKit自稱為一個輕量級的js框架。MochiKit 主要受到 Python 和 Python 標準庫提供的很多便利之處的啟發,另外還緩解了瀏覽器版本之間的不一致性。其中的 MochiKit.DOM 尤其方便,能夠以比原始 JavaScript 更友好的方式處理 DOM 對象。MochiKit.DOM 大部分都是針對 XHTML 文檔定制的,如果與 MochiKit 和 Ajax 結合在一起,使用 XHTML 包裝的微格式尤其方便。Mochikit可以直接對字符串或者數字格式化輸出,比較實用和方便。它還有自己的 js 代碼解釋器。
          優點:MochiKit.DOM這部分很實用,簡介也是很突出的。
          缺點:輕量級的缺點。

          mootools :
          MooTools是一個簡潔,模塊化,面向對象的JavaScript框架。它能夠幫助你更快,更簡單地編寫可擴展和兼容性強的JavaScript代碼。Mootools跟prototypejs相類似,語法幾乎一樣。但它提供的功能要比prototypejs多,而且更強大。比如增加了動畫特效、拖放操作等等。
          優點:可以定制自己所需要的功能,可以說是prototypejs的增強版。
          缺點:不大不小,具體應用具體分析。

          moo.fx :
          moo.fx是一個超級輕量級的javascript特效庫(7k),能夠與prototype.js或mootools框架一起使用。它非???、易于使用、跨瀏覽器、符合標準,提供控制和修改任何HTML元素的CSS屬性,包括顏色。它內置檢查器能夠防止用戶通過多次或瘋狂點擊來破壞效果。moo.fx整體采用模塊化設計,所以可以在它的基礎上開發你需要的任何特效。
          優點:小塊頭有大能耐。
          缺點:這么小了,已經不錯了。

          jQuery:
          jQuery是一款同prototype一樣優秀js開發庫類,特別是對css和XPath的支持,使我們寫js變得更加方便!如果你不是個js高手又想寫出優秀的js效果,jQuery可以幫你達到目的!并且簡介的語法和高的效率一直是jQuery追求的目標。
          優點:注重簡介和高效,js效果有yui-ext的選擇,因為yui-ext 重用了很多jQuery的函數。
          缺點:據說太嫩,歷史不悠久。

          posted @ 2010-03-07 00:00 斷點 閱讀(1177) | 評論 (0)編輯 收藏

          IMP-00017: 由于 ORACLE 的 600 錯誤,以下的語句失敗
           "CREATE PACKAGE BODY quest_soo_util wrapped"
          IMP-00003: 遇到 ORACLE 錯誤 600
          ORA-00600: 內部錯誤代碼,參數: [16201], [], [], [], [], [], [], []
          IMP-00017: 由于 ORACLE 的 600 錯誤,以下的語句失敗
           "CREATE PACKAGE BODY QUEST_SOO_PKG wrapped"

          以上是imp導入Oracle是出現的錯誤。

          轉載,其他情況出現的ORACLE 的 600 錯誤:

          這個錯誤是 drop 用戶時產生的,用戶無法 drop。既然如此,登錄該用戶刪除其中的procedure,結果也出現了該錯誤。有個帖子介紹說這是 Oracle 的一個 bug(No. 2422726),并給出了解決辦法。這里記錄一下:
           1. 錯誤現象:
          SQL> show user
          USER 為"SYS"
          SQL> select * from v$version;
           
          BANNER
          ------------------------------------------------------------
          Oracle8i Release 8.1.6.0.0 - Production
          PL/SQL Release 8.1.6.0.0 - Production
          CORE    8.1.6.0.0       Production
          TNS for 32-bit Windows: Version 8.1.6.0.0 - Production
          NLSRTL Version 3.4.1.0.0 - Production
           
          SQL> drop user hos_kf_hl cascade;
          drop user hos_kf_hl cascade
          *
          ERROR 位于第 1 行:
          ORA-00600: 內部錯誤代碼,自變量: [16201], [], [], [], [], [], [], []
           
          SQL> conn hos_kf_hl/test@qmyb
          已連接。
          SQL> drop procedure kill_session;
          drop procedure kill_session
          *
          ERROR 位于第 1 行:
          ORA-00600: 內部錯誤代碼,自變量: [16201], [], [], [], [], [], [], []

           
          2. 查詢視圖 procedure$,確認該錯誤:
          SQL> select obj#,owner#,type# from sys.obj$ where name ='KILL_SESSION' and owner#=96;
           
                OBJ#     OWNER#      TYPE#
          ---------- ---------- ----------
               55491         96          7
           
          SQL> select * from procedure$ where obj# = 55491;
           
                OBJ# AUDIT$                                 STORAGESIZE    OPTIONS
          ---------- -------------------------------------- ----------- ----------

           
          3. 解決
          SQL> insert into procedure$ values (55491, '----------------', null, 2);
           
          1 row inserted
           
          SQL> commit;
           
          Commit complete
           
          SQL> drop procedure kill_session;
           
          過程已丟棄。
           
          SQL> conn sys/password@s177 as sysdba
          已連接。
          SQL> drop user hos_kf_hl cascade;
           
          用戶已丟棄

          posted @ 2010-03-06 23:03 斷點 閱讀(1169) | 評論 (0)編輯 收藏

          僅列出標題
          共18頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 Last 
          主站蜘蛛池模板: 乐亭县| 平顺县| 长沙县| 民勤县| 旺苍县| 宝清县| 共和县| 孙吴县| 玉林市| 建水县| 山阴县| 宿松县| 德令哈市| 东丽区| 大石桥市| 伊春市| 北京市| 东乡| 二手房| 锡林浩特市| 松原市| 平凉市| 绍兴市| 拜城县| 沂南县| 鲜城| 松溪县| 乌什县| 萍乡市| 来宾市| 夏河县| 呼伦贝尔市| 临沭县| 桃源县| 通渭县| 玉门市| 岐山县| 凯里市| 金阳县| 巴南区| 达州市|