2006-04-30

ActionHandler与异常

JBPM中的ActionHandler未实现对异常的处理,也就是说,如果你的ActionHandler出现异常,那么它无奈地只能交给它的上级(Process)处理,这可能导致Process不能继续执行,而这并不是我们期望的,因为一些不重要的异常我们可以忽略。

runa WFE引入了一个概念叫"bot",是"robot"的变体,可以将ActionHandler所需要处理的内容全部移交给bot来处理,这个过程是基于消息的,即使bot出了问题也不会影响到ActionHandler。

2006-04-29

关于IFile

Eclipse中的IFile只是个概念性的东西,它并不与文件系统中的某个文件挂钩,而且IFile只能在workspace里进行定位。
IPath destPath = new Path("/test/processdefinition.xml");
IFile destFile = ResourcesPlugin.getWorkspace().getRoot().getFile(destPath);
如果想把东西输出到IFile所指定的文件上,进行create动作就OK了:
InputStream stream = getClass().getClassLoader().getResourceAsStream(definitionFile);
destFile.create(stream, true, getMonitor());

这个stream和getMonitor()应该注意一下.以前一直不明白jar文件中的东西是怎么通过路径获得的,呵呵。
还有这个getMonitor():
private IProgressMonitor getMonitor()
{
return configurer.getStatusLineManager().getProgressMonitor();
}
不是在哪里都可以获得IProgressMonitor的,目前我知道的就是和commands注册的地方有关联的,比如Action,可以通过它的IActionBarConfigurer来查找到。

2006-04-28

压缩包内的资源数据是通过ClassLoader获得的

以前就一直有这个疑问,今天一不小心看到了:
String resourceName = "org/jbpm/ui/resource/gpd.xml";
InputStream stream = getClass().getClassLoader().getResourceAsStream(resourceName);

2006-04-27

StackOverflow了

在DesignerApplicationWorkbenchWindowAdvisor的构造函数里写了一句就出现了这种情况:
configurer.getWindow().getWorkbench().openWorkbenchWindow(file);
想了一下,原因挺简单的。

嗯...又有了点了解,不过总找不到本像样的书看,老这么试可真不是办法

获得一个文件真是麻烦

IPath path = new Path("org.jbpm.ui/gpd.xml");
IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
IFile file = workspaceRoot.getFile(path);

文件只能通过workspace范围内,那个org.jbpm.ui是project名,看着挺别扭的...

2006-04-26

补个日记吧

上次田野跟我说的事务执行细节:
有个大前提:所有操作都只是函数调用

函数放在线程栈内(注意是一个线程噢),从上往下依次执行,如果某个地方抛出异常,则整个栈的执行被回退。

嗯,大概就是这么说的,以前我也见到过,现在虽然明白但是还是不清楚。有个问题就是:每个函数都应该支持do和undo吧?要不怎么回退呢

对plug-in进行二次开发

其实方法挺简单的,只是刚开始的时候不知道。在package Explorer里右键选择import...,然后在出来的wizard里选择"external plug-ins and fragments",里面会有好多plug-ins可供选择,都是你的Eclipse目前能识别的所有的。选择一个finish就OK了,Eclipse会独立创建一个新project把所需要的东西复制过来。这样就跟一个普通plug-in project一样了,呵呵。

如果想以Eclipse Application方式运行,还需要写点东西的说,不晓得怎么把模板导进来,那就不用写了嘿嘿。

贴代码不说话

Thread.currentThread().getContextClassLoader().getResource();

dont code like above, but :
Thread current = Thread.currentThread();
ClassLoader oldLoader = current.getContextClassloader();
try{
current.setContextClassloader(getClass().getClassloader());
//call library code here
}finally{
current.setContextClassloader(oldLoader);
}

Eclipse Product的创建方法

昨天找了半天都没找到:
新建一个plug-in Project,然后在wizard里面有个选项,叫"would you like to create a eclipse product application?"选择yes就OK了。

2006-04-20

把文档写出来了

也没用多少时间,只是把网上的东西copy下来,然后修改一下适合版面罢了。当然,写出来的肯定是自己懂的,要不别人问起来那不丑大了,呵呵。

今天印象最深的是澄清了一个概念:execution,这个和petriNet里的Token是一样的意思,而我之前以为token应该是和transition挂钩的。=_=#!
execution是可以传递的,通过Node或Transition,其实Transition惟一的作用就是传递Execution到Node。Action可以产生新的Execution。这和petriNet中place可以fork出新token是一样的。

jBPM实现太多东西了,一时间还看不全面,比如asynchronous, concurrent, persistence,jms,transaction。后来因为找不到web-based 流程设计ui,跑去jboss的forum问了一下,本是不期望答案的,结果没过三分钟就有人来回答,虽然答案不尽人意,却也挺高兴的,我很久没在论坛上说过话了,也很少看,更何况是e文的,因为以前问的问题很少有人回答,就再不去论坛了,在CSDN上的号很久都没去过了。现在看来,真是个错误的决策!

以后要多多逛论坛啦 ^_^

2006-04-19

满累的这几天

其实就一件事:学习工作流引擎。看的全是英文资料了,进度不是很快。而且白天的工作效率不太高。眼睛有点不舒服,估计是看显示器太长时间了。

有点急了

本来前天给我分配的任务是找个workflow引擎研究一下,后来PM昨天跟我说不要看太深,只要有好的用户体验就一切OK,后台倒不是很重要,但是当时我已经看了些JBPM的东西,不想就这样放弃了,然后就继续往下看,顺便也加个心眼儿,看看有没附加的UI的边缘产品,今天为止只找到一个,就是JBOSS里带的Eclipse插件,看了下源代码,设计的倒是满清晰,就是分离的不如我期待的那么开。

我就在想了:如果加一个web-based process generator,工作量会不会满大?

思考了半天,觉得主要有这几个问题:

  • jBPM相关概念,不知道谁熟悉?
  • JS及AJAX等用来产生UI的技术,这部分需要完全自己实现,没有可借鉴的。
  • DOM操作以产生processDefinition文件,没接触过。
  • 动态加载processDefinition能否实现。


后天就要交份报告出来,虽然没具体说要包含什么内容,但我觉得这几条总还是应该有的:

  • 工作流概念、背景、作用
  • jBPM的特点
  • 如何使用jBPM,最少要有个DEMO,比如TestCase什么的
  • 怎么把它集成到OA中来

2006-04-18

jBPM中涉及到的petriNet

petri网 用于描述异步、并发的系统模型,是所有流程定义语言的始祖。

主要有这么几个概念:
Node
Transition变迁
Token
类似状态机,有初始和终节点,Node可以通过Transition达到状态变化。Token用来追踪流动情况。具体还是看wiki吧。

2006-04-17

在js中使用jsp脚本

本来是想表达这个意思:
var username = <%=(String)session.getAttribute("btoa_userName")%>
结果不成,执行不了,问了下同事,很简单,把jsp脚本引用起来就OK了:
var username = '<%=(String)session.getAttribute("btoa_userName")%>'

2006-04-14

一个有趣的东西

SWIXML - Generate javax.swing at runtime based on XML descriptors

这个可以通过xml描述文件来产生swing应用程序,就跟html一样,挺有意思,记得ms也吹过什么下一代编程,就是这个模式,呵呵

这个article是一个helloworld

2006-04-10

Behavioral Extensions to CSS

Behavioral Extensions to CSS

今天想在CSS文件里定义tag的事件,找了半天,终于找到这个,原来叫HTML component(HTC),这里所描述的比我想的更进一步,还可以自定义tag的属性并作相应扩展。
在CSS里面,只要引用一个HTC文件就可以了:
behavior:url("/sample.htc");
我关注的是:firefox支持这个吗?查了一下没查到,不知道我查的方法对不:
firefox support html component ?
这样在google里没出什么结果。我觉得应该支持吧,是很自然的一个css extension

JSON versus XML

Mashup Data Formats: JSON versus XML @ JAVA DEVELOPER'S JOURNAL

XML有安全限制,就是说,XMLHttpRequest只能请求同本网页在同一domain下的XMLresponse,但json好象就没这个限制。两种方法各有千秋,作者主张把json嵌入到xml里,提出了一种新的观点:XJAX,即x-platform javascrip and xml,也就是说,不提供基础服务,而是在其上建设更个性化的服务,感觉这很像豆瓣网。web2.0。
而且作者也建设了一个网站:batBack,能为你的blog提供一些cool的服务

2006-04-03

把blogspot用做开发blog

blogspot不太适合做开发用blog,因为我要贴些html代码都不行,它会自动进行解释,它的那个多格式文本也不太厉害。

中文网页显示乱码的问题

怎样制造乱码?
用EditPlus新建一个html文件,随便打几个中文进去。必须保存且存为utf-8格式,然后预览就会发现是乱码。

解决办法
在原来的文件里添加一个数据元:


OK了,根据我的判断,浏览器在加载html文件的时候是按默认方式(ANSI编码方式)处理,而utf-8方式下的中文编码和ANSI下的不是相同的,所以会产生乱码。浏览器应该会首先读取数据元,当它发现网页声明它的编码方式时就会动态的转换处理方式(在这里是以utf-8方式继续读文件)

这里有个前提是,数据元的声明必须是以英文形式存在的,因为utf-8下和ANSI下英文编码是一致的,也就是说,不论以哪种方式读英文都会获得准确信息

PS: 我觉得“英文”改成“ascii”好些,但是不知道准确不?呵呵

中文网页显示乱码的问题

怎样制造乱码?
用EditPlus新建一个html文件,随便打几个中文进去。必须保存且存为utf-8格式,然后预览就会发现是乱码。

解决办法
在原来的文件里添加一个数据元:


OK了,根据我的判断,浏览器在加载html文件的时候是按默认方式(ANSI编码方式)处理,而utf-8方式下的中文编码和ANSI下的不是相同的,所以会产生乱码。浏览器应该会首先读取数据元,当它发现网页声明它的编码方式时就会动态的转换处理方式(在这里是以utf-8方式继续读文件)

这里有个前提是,数据元的声明必须是以英文形式存在的,因为utf-8下和ANSI下英文编码是一致的,也就是说,不论以哪种方式读英文都会获得准确信息

PS: 我觉得“英文”改成“ascii”好些,但是不知道准确不?呵呵

中文网页显示乱码的问题

怎样制造乱码?
用EditPlus新建一个html文件,随便打几个中文进去。必须保存且存为utf-8格式,然后预览就会发现是乱码。

解决办法
在原来的文件里添加一个数据元:


OK了,根据我的判断,浏览器在加载html文件的时候是按默认方式(ANSI编码方式)处理,而utf-8方式下的中文编码和ANSI下的不是相同的,所以会产生乱码。浏览器应该会首先读取数据元,当它发现网页声明它的编码方式时就会动态的转换处理方式(在这里是以utf-8方式继续读文件)

这里有个前提是,数据元的声明必须是以英文形式存在的,因为utf-8下和ANSI下英文编码是一致的,也就是说,不论以哪种方式读英文都会获得准确信息

PS: 我觉得“英文”改成“ascii”好些,但是不知道准确不?呵呵

中文网页显示乱码的问题

怎样制造乱码?
用EditPlus新建一个html文件,随便打几个中文进去。必须保存且存为utf-8格式,然后预览就会发现是乱码。

解决办法
在原来的文件里添加一个数据元:


OK了,根据我的判断,浏览器在加载html文件的时候是按默认方式(ANSI编码方式)处理,而utf-8方式下的中文编码和ANSI下的不是相同的,所以会产生乱码。浏览器应该会首先读取数据元,当它发现网页声明它的编码方式时就会动态的转换处理方式(在这里是以utf-8方式继续读文件)

这里有个前提是,数据元的声明必须是以英文形式存在的,因为utf-8下和ANSI下英文编码是一致的,也就是说,不论以哪种方式读英文都会获得准确信息

PS: 我觉得“英文”改成“ascii”好些,但是不知道准确不?呵呵

Class-Based vs. Prototype-Based Languages

Core JavaScript 1.5 Guide:Class-Based vs. Prototype-Based Languages - MDC

感觉javascript的特性很神奇,原来还有个名词表述这些 : prototype-based。 这是不是所谓的动态语言的特性呢?