Vincent Thinking

All about Vincent's work and life

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  34 随笔 :: 0 文章 :: 183 评论 :: 0 Trackbacks

#

JBPM的流程定义中对于页面绑定并没有什么好的办法.

"大枪"是修改了JBPM的源代码,来支持比如"<Task name="aa" url="/xx/yy.jsp">"的表示方法,这样的处理效果可能不是很好,需要修改相应的源代码,升级的时候也要同样修改.

我采取了另外一种折中的方法,建立一个关联表,或者作个配置文件,url和相应的task name对对应关系.

运行时得到相应的Task对象,得到相应的name,从对应表中取出绑定的页面进行加载.

posted @ 2006-01-10 20:51 Vincent Thinking 阅读(1092) | 评论 (1)编辑 收藏

什么是AHAH?
AHAH:(Asychronous HTML and HTTP)
简单来说,AHAH是一种利用JavaScript动态更新web页面的技术.他通过XMLHTTPRequest来获得动态的html,填充到 web页面中。

和AJAX的关系?
AHAH被认为是一种比AJAX(Asynchronous JavaScript and XML)更简单的web开发方式,严格意义上来说AHAH是AJAX的一个子集,因为(X)HTML本身及时一个特殊形式的XML,但是最为子集的AHAH却有特殊的和有用的特性:
1.无需定义XML schemas可以使设计时间大幅减少

2.使用已有的HTML页面从而避免必须提供特殊的Web服务

3.所有的数据通过浏览器可识别的HTML传输,从而可以很容易的调试和测试

4.HTML直接包含在页面的DOM对象中,无需解析

5.HTML设计者可以使用CSS来格式化显示,无需程序员使用XSLT转换

6.所有的处理都在服务器端完成,客户端不需要编写任何程序

实事上,任何内容的最终都是要转化成浏览器可识别结果,展现在浏览器上。很难想象出转化成自定义的XML格式比HTML有什么优点

参考ahah.js 和 jah.js

Send AHAH Request

 1 function ahah(url,target) {
 2    // native XMLHttpRequest object
 3    document.getElementById(target).innerHTML = 'sending';
 4    if (window.XMLHttpRequest) {
 5        req = new XMLHttpRequest();
 6        req.onreadystatechange = function() {ahahDone(target);};
 7        req.open("GET", url, true);
 8        req.send(null);
 9    // IE/Windows ActiveX version
10    } else if (window.ActiveXObject) {
11        req = new ActiveXObject("Microsoft.XMLHTTP");
12        if (req) {
13            req.onreadystatechange = function() {ahahDone(target);};
14            req.open("GET", url, true);
15            req.send();
16        }
17    }
18 

Receive AHAH Request
 1 function ahahDone(target) {
 2    // only if req is "loaded"
 3    if (req.readyState == 4) {
 4        // only if "OK"
 5        if (req.status == 200 || req.status == 304) {
 6            results = req.responseText;
 7            document.getElementById(target).innerHTML = results;
 8        } else {
 9            document.getElementById(target).innerHTML="ahah error:\n" +
10                req.statusText;
11        }
12    }
13 }

Executing Javascript

由于浏览器在插入HTML的时候并不会执行<script>标签中的代码,所以你可以利用下面的方法来解决 document.getElementById(target):

 1 var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
 2 var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
 3 var bMoz = (navigator.appName == 'Netscape');
 4 function execJS(node) {
 5   var st = node.getElementsByTagName('SCRIPT');
 6   var strExec;
 7   for(var i=0;i<st.length; i++) {     
 8     if (bSaf) {
 9       strExec = st[i].innerHTML;
10     }
11     else if (bOpera) {
12       strExec = st[i].text;
13     }
14     else if (bMoz) {
15       strExec = st[i].textContent;
16     }
17     else {
18       strExec = st[i].text;
19     }
20     try {
21       eval(strExec);
22     } catch(e) {
23       alert(e);
24     }
25   }
26 }
27 

注意:
1.由于IE返回的tag标志都是大写,所以你必须搜索SCRIPT而不是script.在firefox中也保留大写的形式.
2.不要用//的注释方式,用/**/的方式来代替,在每一个声明句后面加';'

(未完..)
posted @ 2006-01-09 09:31 Vincent Thinking 阅读(71720) | 评论 (2)编辑 收藏

昨天和一个朋友去参加了上海BEA User Group.这次活动的Topic主要有Dlee的Ajax in action , Moxie 的软件的良性文化 ,Bea 顾问的 SOA相关介绍 还有最后的重头戏 Robbin的领域模型。 Yanger的主持还是比较精彩的,BEA的组织也比较到位,活动中还穿插了魔术表演。整天的氛围还是不错的,各位的演讲也是很精彩的,但是由于活动时间过长了,感觉最后Robbin的讲演还是有些没有尽兴。 每个Topic都是可以深入讲下去的,但是一个下午的时间要讲4个Topic,时间太仓促了,每个Topic也只是泛泛的介绍了一下概念,感觉还不如去看JavaEye的帖子。有些失望。 应该采用BUJG的方式,一次关注一个Topic,深入的讲下去,不过想想这也算是BEA的商业活动,要达到一定的商业目的。:) 讨论技术看来还是自发的组织比较好。
posted @ 2006-01-08 11:14 Vincent Thinking 阅读(264) | 评论 (1)编辑 收藏

留个纪念。 2005对我个人来说发生了很多难以忘记的事情。希望2006能有个好的开端。也祝各位新年快乐!
posted @ 2005-12-31 18:06 Vincent Thinking 阅读(193) | 评论 (0)编辑 收藏

对于每个系统来说,权限都是一个很重要的组成部分,贯穿于整个系统功能,甚至包括数据。RBAC是一个很好的模型,对于复杂的处理更多的还是和业务紧密联系在一起,所以对于组件形式的RBAC产品还很难做到的。 对一个用户来说,权限主要包括2个部分,data和action,其组合形式对我们来说就是一个view,每个权限对应一个相应的view。在这里我用三维的坐标来思考,data和action是相应的x,y轴,不同的data,action组成一个业务视图,从三维的角度来看是一个2维的的平面,我们的系统功能也就是由不同的平面来做成的。 权限可以看作z轴,view在不同的权限上会有不同的表现形式,展现不同的数据,不同的操作。这样权限,数据,操作看起来就会清晰很多。 我所设想的应该是这样的一种方式:view由不同的view component和action component组成,这里view只是一个模板,没有任何业务数据。 提供一个类似PrivilegeViewFactory的类,传入view模板,和相应的角色(用户,组。。),生成相应的PrivilegeView,然后由业务逻辑去填充数据,这样可以容易做到权限和view的分离,层次也比较清晰。 每个view component要实现相应的权限接口,要根据不同的角色生成不同的view component。比如DataGrid,不同的角色看的列是不同的,甚至数据内容也是不同的,更细粒度的看,业务不同字段的的数据也是不同。这部分是和ui绑定的,也是最复杂,工作量最大的部分。
posted @ 2005-12-21 12:39 Vincent Thinking 阅读(447) | 评论 (3)编辑 收藏

jbpm作为jboss的一个子项目,和jboss绑定的比较多,官方文档也没有说如何移植,下面就移植作个简要的说明。

1. 下载jbpm http://www.jboss.com/products/jbpm/downloads

2. 解压,导入eclispe的项目中 配置MYSQL 1. 在eclipse的jpbm项目中加入mysql的lib 2. mysql创建一个数据库"jbpm"

3. 在eclipse的jbpm项目中找到'jbpm-3.0\src\resources'目录,创建一个自目录'mysql'

4. 把同目录hsqldb文件夹中的2个文件(create.db.hibernate.properties, identity.db.xml)拷贝到mysql目录中

5. 按下面所示编辑 'create.db.hibernate.properties'

hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class
=com.mysql.jdbc.Driver
hibernate.connection.url
=jdbc:mysql://localhost:3306/jbpm
hibernate.connection.username
=root
hibernate.connection.password
=root
hibernate.c3p0.min_size
=1
hibernate.c3p0.max_size
=3
hibernate.show_sql
=true


6. 在eclipse的jbpm项目中找到ant脚本'build.deploy.xml',进行编辑 找到 target name="create.db", 删除 db.start, db.stop 在这个目标块中将所有的'hsqldb' 替换为 'mysql'

7. 运行ant create.db -buildfile build.deploy.xml创建jbpm表结构

8. 找到target name="build.webapp"按下面进行编辑
  <target name="build.webapp" description="builds jbpm.war">
    
<ant antfile="build.xml" target="build.webapp" /> 
    
<mkdir dir="build/jbpm.war.dir" /> 
    
<copy todir="build/jbpm.war.dir">
      
<fileset dir="src/resources/jbpm.war" /> 
    
</copy> 
    
<copy todir="build/jbpm.war.dir/WEB-INF/lib">
      
<fileset dir="build" includes="jbpm-webapp-${jbpm.version}.jar" /> 
      
<fileset dir="lib/jsf" includes="*.jar" /> 
      
<fileset dir="lib/commons" includes="commons-digester-*.jar, commons-beanutils-*.jar" /> 
    
</copy> 
    
<jar destfile="build/jbpm.war">
      
<fileset dir="build/jbpm.war.dir" />
    
</jar> 
  
</target>


9. 找到目录src/resources,编辑jbpm.properties文件
jbpm.scheduler.service.factory=org.jbpm.scheduler.impl.SchedulerServiceImpl
jbpm.task.instance.class
=org.jbpm.taskmgmt.exe.TaskInstance

# uncomment the next line if JbpmSessionFactory.getInstance()
# should lookup the singleton instance from JNDI instead of creating 
# a default one.
#
#jbpm.session.factory.jndi.name
=java:/jbpm/JbpmSessionFactory

# uncomment the next line to use the file system instead of the database for 
# storing files related to a process definition
#
# jbpm.files.dir
=c:/jbpm.data

# resource path to a properties file that will overwrite all the hibernate 
# properties. For database specific builds in db project there is a different
# hibernate.properties file on the classpath for each database. You could change
# the default database for any testing runs by uncommenting the next line and
# adding a hibernate.properties file in the basedir.
#
jbpm.hibernate.cfg.xml
=jbpm.hibernate.cfg.xml
#jbpm.hibernate.properties
=jbpm.hibernate.properties

编辑jbpm.hibernate.properties文件
#hibernate.dialect=org.hibernate.dialect.HSQLDialect
#hibernate.connection.datasource
=java:/DefaultDS

10. 找到src/config.files目录,编辑hibernate.cfg.xml文件
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm3</property>
    
<property name="hibernate.connection.username">root</property>
    
<property name="hibernate.connection.password">root</property>
        
    
<!-- c3p0 connection pooling properties-->
    
<property name="hibernate.c3p0.min_size">1</property>
    
<property name="hibernate.c3p0.max_size">3</property>

    
<property name="hibernate.query.substitutions">true 1, false 0</property>
    
<property name="hibernate.connection.pool_size">15</property>

11. 运行ANT脚本ant build.webapp -buildfile build.deploy.xml 生成jbpm.war,拷贝到tomcat web目录中,启动tomcat,输入'http://localhost:8080/jbpm' 就可以看到他的example
posted @ 2005-12-19 17:26 Vincent Thinking 阅读(5792) | 评论 (14)编辑 收藏

和我当初的设想的一样,ajax桌面开始爆发了。当初看到netvibes的时候还是测试版本,现在功能已经很强大了。

类似的平台已经有一下9个:
1. Eskobo
2. Favoor
3. Google
4. Goowy(基于flash, 非Ajax)
5. Microsoft Live
6. Netvibes
7. Pageflakes
8. Protopage
9. Zoozio
基于ajax的rich application必然是个大的趋势,而web os是这里面很重要的部分,是rich application的all in one。我不敢说这就是web 3.0,当人们对2.0还很模糊的时候更不应该做这样的揣测。不过有一天,真有可能会像《24小时》所描绘的那样。这也验证了sun的一句经典的话:"网络就是计算机". 顺便BS一下 "我的博通", 简直就是netvibes的翻版。拜托,抄也抄的有点道德。
posted @ 2005-12-19 12:28 Vincent Thinking 阅读(402) | 评论 (0)编辑 收藏

Flickr和Del.icio.us都已经被它收归旗下.对于新兴的web2.0模式的探索者来说无疑是一个强有力的兴奋剂.收购可能对于这样的网站来说是最好的方式.在现有的条件下,无法找到可行的盈利方式,收购是最好的模式.人气+资金,相信以后会做的更好. 几个月前就关注的milliondollarhomepage今天已经达到847000了,我从来没有鄙视这样的行为,一直都认为好的创意是非常重要的,技术大家都会,但是你不是第一个能想到的. 所以类似芙蓉姐姐的东西我从来不去关心,自然会自生自灭的,用不着我们去浪费时间去讽刺和挖苦. 时间会说明一切. 换个角度来看,做个假设,如果第一个百万首页是发生在国内,我想结果绝对不像1baiwan现在那样的那么轻松. 国外对待新事物的发展还是保持很中立的态度的,至少没有用舆论来抹杀它. 快圣诞了.希望能得到意外的惊喜. 嘿嘿
posted @ 2005-12-11 17:25 Vincent Thinking 阅读(352) | 评论 (2)编辑 收藏

上海的天气真是太变态了。前天还是10-20度,今天气温突然下降了10多度,最低已经降到了0下,看到路上已经结冰了。换衣服都来不及,赶快找出棉袄,带上手套。冷。。。 第一次感到冬天来了。
posted @ 2005-12-05 21:54 Vincent Thinking 阅读(196) | 评论 (0)编辑 收藏

以前一直没用过docbook,数据和显示分离的好处是显而易见的。这个有点类似MVC.^_^ 很多开源的文档都是用docbook来处理的,数据和显示分离,未来的趋势,再也不用在word中搞排版了,就好像html中的div+css,爽啊。


一些关于docbook的文档:
Writing Documentation Using DocBook
DocBookAuthoringTools
DocBook学习
posted @ 2005-11-29 22:54 Vincent Thinking 阅读(435) | 评论 (0)编辑 收藏

仅列出标题
共4页: 上一页 1 2 3 4 下一页