guangnian0412's BLOG

Java in my life

常用链接

统计

积分与排名

我关注的Blog

最新评论

2006年4月11日 #

Eclipse RCP与Spring的整合

     摘要: 最近上一个项目想在Eclipse RCP中使用Spring,在网上Google了一下发现这方面的资料比较少,知道Spring自己有个Spring-OSGI的项目,可以在 Spring中配置OSGI服务。可是,我只是想在RCP中引入Spring来管理Java Bean,不想去研究那个东西。于是,看看有没有什么简单的方法来解决这个问题。  阅读全文

posted @ 2006-12-30 21:11 guangnian 阅读(5505) | 评论 (5)编辑 收藏

cvsNT 2.5.03.2382添加用户后出现"no such user"错误的解决方法

     摘要: cvsNT 2.5.03.2382添加用户后出现"no such user"错误的解决方法  阅读全文

posted @ 2006-09-19 23:50 guangnian 阅读(4816) | 评论 (13)编辑 收藏

jira-enterprise-3.6.4-standalone + confluence-2.2.8 + MySQL5.0 安装破解全过程

     摘要: jira-enterprise-3.6.4-standalone + confluence-2.2.8 + MySQL5.0 安装破解全过程  阅读全文

posted @ 2006-09-19 22:30 guangnian 阅读(8106) | 评论 (10)编辑 收藏

笛米特法则详解(the Law of Demeter or Principle of Least Knowledge)

     摘要: The Law of Demeter和 Principle of Least Knowledge将的都是一回事,是说一个软件实体要尽可能的只与和它最近的实体进行通讯。通常被表述为:talk only to your immediate friends ( 只和离你最近的朋友进行交互)。   阅读全文

posted @ 2006-06-19 19:44 guangnian 阅读(4387) | 评论 (5)编辑 收藏

JBoss Rules 学习(七): Drools规则语言详解(下)

     摘要: Rule 结构是最重要的结构。 Rule 使用了形如“ IF ” something “ THEN ” action (当然,我们的关键字是“ when ”和“ then ”)的形式。

一个规则在一个 package 中必须要有唯一的名字。如果一个名字中含有空格,那就需要将名字放在双引号中(最好总是使用双引号)。

Attribute 是可选的(最好是每行只有一个 Attribute )。

规则的 LHS 跟在“ when ”关键字的后面(最好是另起一行),同样 RHS 要跟在“ then ”关键字后面(最好也另起一行)。规则以关键字“ end ”结束。规则不能嵌套。   阅读全文

posted @ 2006-06-09 19:38 guangnian 阅读(15570) | 评论 (17)编辑 收藏

JBoss Rules 学习(六): Drools规则语言详解(上)

     摘要: Drools 3 采用了原生的规则语言,那是一种非 XML 文本格式。在符号方面,这种格式是非常轻量的,并且通过“ expanders ”支持符合你问题域的 Domain Specific Language ( DSL )。这一章把焦点放在了 Drools 原生的规则格式。如果你想从技术上了解规则语言的机制,可以参考“ drl.g ”源文件,这是用 Antlr3 语法来描述规则语言。如果你使用 Rule Workbench ,内容助手将会为你完成大量的规则结构,例如输入“ ru ”,然后按 ctrl + space ,会为你建立规则结构。  阅读全文

posted @ 2006-06-09 01:16 guangnian 阅读(14172) | 评论 (7)编辑 收藏

JBoss Rules 学习(五): JBoss Rules 3.0.1 类库介绍

下载地址:

http://labs.jboss.com/portal/index.html?ctrl:id=page.default.downloads&project=jbossrules

下载文件说明:

JBoss Rules 3.0.1 Binaries (includes javadocs)  13MB )― 仅仅包含 JBoss Rules 的四个核心类库:

l         drools-core.jar 核心引擎,运行时组件。包含了 RETE 引擎和 LEAPS 引擎;

l         drools-compiler.jar 规则文件的编译组件,构建可执行的 RuleBase

l         drools-jsr94.jar 提供了 JSR-94 的兼容实现,本质上是 drools- compiler 组件的包裹层。注意:由于 JSR94 规约的限制,不是所有的特点都可以通过此接口暴露。

l         drools-decisiontables.jar 决策表的“编译”组件(使用了 drools- compiler 组件)。支持 excel CSV 输入格式。

JBoss Rules 3.0.1 Binaries with dependencies (includes javadocs) 23 MB )- 包含了 JBoss Rules 的核心类库和它们的 dependencies

l         antlr-2.7.6.jar

l         antlr-3.0ea8.jar

l         colt-1.2.0.jar

l         commons-collections-3.1.jar

l         commons-io-1.1.jar

l         commons-jci-core-1.0-406301.jar

l         commons-jci-eclipse-3.2.0.666.jar

l         commons-jci-janino-2.4.3.jar

l         commons-lang-2.1.jar

l         commons-logging-api-1.0.4.jar

l         concurrent-1.3.4.jar

l         core-3.2.0.666.jar

l         janino-2.4.3.jar

l         jsr94-1.1.jar

l         jung-1.7.2.jar

l         junit-3.8.1.jar

l         poi-2.5.1-final-20040804.jar

l         stringtemplate-2.3b6.jar

l         xercesImpl-2.6.2.jar

l         xml-apis-1.0.b2.jar

l         xpp3-1.1.3.4.0.jar

l         xstream-1.1.3.jar

如果你运行在 Java 1.5 环境下,有一些类库,例如 XML libraries ,可以不需要。需要注意的类库有:

JCI ”-这是 Apache Java Compiler Interface , 提供了运行时编译能力。可以通过 PackageBuilderConfiguration 实例来设定采用 eclipse janino 编译器,默认是 eclipse

POI ”-提供了解析 Excel 文件的能力;

antlr ”-提供了解析规则语言的能力。

JBoss Rules IDE 3.0.1 13 MB )- 这是 JBoss Rules Eclipse 插件,只支持 Eclipse 3.2 或以上版本。它提供了运行 JBoss Rules 的所有 dependencies 。你可以创建一个 Rule Project ,它能够为你编写规则文件提供自动完成的功能,并且它为你提供了 Agenda view WorkingMemory view Global Data view ,使你可以通过 eclipse 视图很清楚的看到 Agenda WorkingMemory Global Data 的情况。

你还可以通过 update site 来自动安装这个插件 ,URL 是:

http://anonsvn.labs.jboss.com/labs/jbossrules/updates/drools-ide-update/

 

posted @ 2006-06-04 23:55 guangnian 阅读(7785) | 评论 (3)编辑 收藏

JBoss Rules 学习(四): Drools规则引擎 (下)

     摘要: WorkingMemory 是运行时规则引擎的主要类。它保持了所有被 asserted 进 WorkingMemory 的数据的引用,直到取消( retracted )。 WorkingMemory 是有状态对象。它们的生命周期可长可短。如果从一个短生命周期的角度来同一个引擎进行交互,意味着你可以使用 RuleBase 对象来为每个 session 产生一个新的 WorkingMemory ,然后在结束 session 后 discard 这个 WorkingMemory (产生一个 WorkingMemory 是一个廉价的操作)。另一种形式,就是在一个相当长的时间中(例如一个 conversation ),保持一个 WorkingMemory ,并且对于新的 facts 保持持续的更新。当你希望 dispose 一个 WorkingMemory 的时候,最好的实践就是调用 dispose() 方法,此时 RuleBase 中对它的引用将会被移除(尽管这是一个弱引用)。不管怎样最后它将会被当成垃圾收集掉。术语   阅读全文

posted @ 2006-06-04 14:55 guangnian 阅读(10822) | 评论 (6)编辑 收藏

JBoss Rules 学习(三): Drools规则引擎 (上)

     摘要: Drools 分为两个主要部分:构建( Authoring )和运行时( Runtime )。

构建的过程涉及到 .drl 或 .xml 规则文件的创建,它们被读入一个解析器,使用 ANTLR 3 语法进行解析。解析器对语法进行正确性的检查,然后产生一种中间结构“ descr ”, descr 用 AST 来描述规则。 AST 然后被传到 PackageBuilder ,由 PackagBuilder 来产生 Packaged 对象。 PackageBuilder 还承担着一些代码产生和编译的工作,这些对于产生 Package 对象都时必需的。 Package 对象是一个可以配置的,可序列化的,由一个或多个规则组成的对象。  阅读全文

posted @ 2006-06-04 12:50 guangnian 阅读(22185) | 评论 (14)编辑 收藏

JBoss Rules 学习(二): RETE算法

     摘要: 在JBoss Rules 学习(一):什么是Rule中,我们介绍了JBoss Rules中对Rule的表示,其中提到了JBoss Rule中主要采用的RETE算法来进行规则匹配。下面将详细的介绍一下RETE算法在JBoss Rule中的实现,最后随便提一下JBoss Rules中也可以使用的另一种规则匹配算法Leaps。  阅读全文

posted @ 2006-06-01 17:06 guangnian 阅读(13342) | 评论 (4)编辑 收藏

JBoss Rules 学习(一): 什么是Rule

     摘要: 学习JBoss Rules有几天了,因为这方面的中文资料较少,所以这几天都在看官网上的manual。这是一份不错的教程,我把我看的一些重要的东西翻译整理了一下,希望可以对想学习JBoss Rules的同学们提供一点帮助。
在开始这份教程之前,我先简要介绍一下JBoss Rules:
JBoss Rules 的前身是Codehaus的一个开源项目叫Drools。最近被纳入JBoss门下,更名为JBoss Rules,成为了JBoss应用服务器的规则引擎。
Drools是为Java量身定制的基于Charles Forgy的RETE算法的规则引擎的实现。具有了OO接口的RETE,使得商业规则有了更自然的表达。

既然JBoss Rules是一个商业规则引擎,那我们就要先知道到底什么是Rules,即规则。在JBoss Rules中,规则是如何被表示的  阅读全文

posted @ 2006-06-01 16:52 guangnian 阅读(22309) | 评论 (23)编辑 收藏

[Commons Logging]使用一个抽象的Logging接口(From Jarkata Commons Cookbook 7.10)

   (Jarkata 的 Commons Logging 包现在已经被用在几乎所有的开源项目之中,它可以使你开发的系统工作在不同的日志框架下,包括Sun的logging框架和Apache Log4j。现在Commons Logging + Apache Log4j 的身影是随处可见,Commons Logging 的易用与Log4j的强大功能形成了绝配。)

问题:
      你正在写一个可重用的代码库,而你不知道你的代码在哪里并且是如何工作的。你需要一个抽象的日志接口来写入日志信息,因为你不能确定Log4j或者是JDK 1.4 logging的存在性。

解决:
        通过Jakarta Commons Logging 的Log 接口来记录信息,然后依靠Commons Logging自身来决定在运行时使用哪种具体的日志框架。下面的代码使用了Log接口来记录trace,debug,info,warning,error和fatal信息:
 1 import org.apache.commons.logging.LogFactory;
 2 import org.apache.commons.logging.Log
 3 
 4 Log log = LogFactory.getLog( "com.discursive.jccook.SomeApp" ); 
 5 
 6 if( log.isTraceEnabled( ) ) {
 7     log.trace( "This is a trace message" );
 8 }
 9 
10 if( log.isDebugEnabled( ) ) {
11     log.debug( "This is a debug message" );
12 }
13 
14 log.info( "This is an informational message" );
15 
16 log.warn( "This is a warning" );
17 
18 log.error( "This is an error" );
19 
20 log.fatal( "This is fatal" );
      LogFactory.getInstance() 返回一个Log接口的具体实现,这个实现与底层具体的日志框架相对应。例如,如果你的系统是使用Apache Log4j ,一个Log4JLogger将被返回,对应于Log4J category
com.discursive.jccook.SomeApp 。

讨论:
        一个可重用代码库的开发者不能预知其代码库将在何时何地被用到,而现在有很多的日志框架可以使用,所以当开发可重用代码库的时候,使用Commons Logging 是非常明智的,例如Jakarta Commons 组件。当调用LogFactory.getInstance()方法的时候,Commons Logging 将通过系统属性和classpath中的类库来决定和管理适当的日志框架。对于一个小型可重用组件的开发者来说,进行日志记录只需要调用Log接口。而配置底层日志框架的负担,就转移到使用其组件库的开发者身上。

参考:
        7.11节详细的说明了Commons Logging在运行时确定适当日志框架的算法。

    

posted @ 2006-04-24 18:32 guangnian 阅读(760) | 评论 (0)编辑 收藏

[HttpClient] 创建一个HTTP POST 请求 (from Jakarta Commons cookbook 11.7 )

问题:
        你需要使用HTTP POST 方法来向一个servlet传递参数。

讨论:
        创建一个 PostMethod 对象,然后调用 setParameter() 或 addParameter() 方法设置参数。 PostMethod 对象将会传送一个 Content-Type 头为 application/x-www-form-urlencoded 的请求,并且参数将在请求body中被传送。在下列的例子中演示了用 PostMethod 对象传递参数的用法:
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

HttpClient client 
= new HttpClient( );

// Create POST method
String url = "http://www.discursive.com/cgi-bin/jccook/param_list.cgi";
PostMethod method 
= new PostMethod( url );

// Set parameters on POST    
method.setParameter( "test1""Hello World" );
method.addParameter( 
"test2""This is a Form Submission" );
method.addParameter( 
"Blah""Whoop" );
method.addParameter( 
new NameValuePair( "Blah""Whoop2" ) );

// Execute and print response
client.executeMethod( method );
String response 
= method.getResponseBodyAsString( );
System.out.println( response );

method.releaseConnection( );
      
param_list.cgi CGI脚本会对所以接收到的参数进行回显,从下面的输出中,你可以看到传递给CGI脚本的三个参数:
These are the parameters I received:

test1:
  Hello World
test2:
  This is a Form Submission
Blah:
  Whoop
  Whoop2
       有几种方法来在一个PostMethod对象中设置参数。最直接的方法就是调用setParameter()方法,并传递两个字符串给它:参数的名称和参数值。setParameter()方法将会替代任何已经存在的同名参数。但是,如果一个同名的参数已经存在一个PostMethod对象中,addParameter()将会加入另一个同名参数值;addParameter()方法同样接受两个String:参数名和参数值。另一种方法,这两个方法同样接受一个包装了参数名和参数值的NameValuePair对象。在前面的例子中,通过addParameter()方法,用参数名Blah传递了两个值,第一次用两个String作为参数,第二次用一个NameValuePair对象作为参数。

posted @ 2006-04-11 22:41 guangnian 阅读(6595) | 评论 (4)编辑 收藏