paulwong

#

BONITA资源

http://www.ibm.com/developerworks/cn/java/j-bpm1/

用于业务流程管理的 Bonita,第 2 部分 : 配置表单和变量
http://www.ibm.com/developerworks/cn/java/j-bpm2/

社区
http://mybpm.sinaapp.com/forum.php

qq群:125403032
我们是bonita bpm 的北京研发中心 上面是我们的群。

BONITABPM
http://bonitabpm.iteye.com/

posted @ 2012-04-20 11:35 paulwong 阅读(209) | 评论 (0)编辑 收藏

数据库的锁机制

在进行SELECT操作时,通常接下来会进行UPADTE的操作,如果希望COMMIT前,所SELECT的数据不会被其他线程SELECT出来,则两个线程都加FOR UPDATE/FOR UPDATE NOWAIT关键字,这样数据库就会锁定这些记录,加了FOR UPDATE的会进行等待,直到上一线程结束,加了FOR UPDATE NOWAIT的线程则直接抛出异常,这种机制称为数据库的锁机制。

HIBERNATE中的实现:

LockMode.NONE :有缓存用缓存,没缓存则从数据库读 
LockMode.READ :直接从数据库读,不使用缓存数据 
LockMode.WRITE :在insert update数据的时候,HIBERNATE内部使用的。 
以上3种均为HIBERNATE级别的锁,也就是缓存级别的锁。 

下面2种为数据库级别的锁: 
LockMode.UPGRADE:相当于SQL语句select for update,被select的数据都被数据库锁住了,不能被其他事务修改。 
LockMode. UPGRADE_NOWAIT :是ORACLE数据库特有的select for update nowait

posted @ 2012-04-19 17:56 paulwong 阅读(356) | 评论 (0)编辑 收藏

BONITA

无意中发现一个开源的工作流引擎,包括BPM全套
http://www.bonitasoft.org

posted @ 2012-04-19 00:06 paulwong 阅读(366) | 评论 (0)编辑 收藏

一套不错的JQUERY UI框架:EASY UI

一套不错的JQUERY UI框架:EASY UI
http://www.jeasyui.com/

补一个常用的方法:
function closeSelectedTab(){
    
var tab = $('#tt').tabs('getSelected');
    alert(tab.panel('options').href);
    $('#tt').tabs('close',tab.panel('options').title);
    
//reloadTab(title,url);
}

posted @ 2012-04-17 22:57 paulwong 阅读(1553) | 评论 (0)编辑 收藏

神奇的图片

posted @ 2012-04-16 23:15 paulwong 阅读(167) | 评论 (0)编辑 收藏

什么是高内聚、低耦合?

起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性。

耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,

模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。

耦合性分类(低――高): 无直接耦合;数据耦合;标记耦合;控制耦合;公共耦合;内容耦合;
1 无直接耦合:
2 数据耦合: 指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递;
3 标记耦合: 指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;
4 控制耦合: 指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能;
5 公共耦合: 指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。
6 内容耦合: 这是最高程度的耦合,也是最差的耦合。当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。

内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。

内聚性匪类(低――高): 偶然内聚;逻辑内聚;时间内聚;通信内聚;顺序内聚;功能内聚;
1 偶然内聚: 指一个模块内的各处理元素之间没有任何联系。
2 逻辑内聚: 指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
3 时间内聚: 把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
4 通信内聚: 指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。
5 顺序内聚: 指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。
6 功能内聚: 这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱的。

耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。

有个例子很容易明白:一个程序有50个函数,这个程序执行得非常好;然而一旦你修改其中一个函数,其他49个函数都需要做修改,这就是高耦合的后果。
一旦你理解了它,你编写概要设计的时候设计类或者模块自然会考虑到“高内聚,低耦合”。

posted @ 2012-04-16 22:37 paulwong 阅读(360) | 评论 (0)编辑 收藏

员工为什么离开

导读:如今,很多优秀员工不顾企业的挽留,翩然而去;潜力员工不顾企业的期待,悄然远去;甚至重点培养的员工,也不顾企业的重托,撒手而去,留给领导者无尽的懊恼和叹息。让领导者百思不得其解的是,似乎总是该走的没有走,不该走的却走了;平凡的没有走,优秀的却走了。于是,也总能听到领导者一遍又一遍无奈的歌谣:我拿什么来留住你?我的员工!

  咱们先从一个故事开始说起:

  楚国有个好吃懒做的人,他整天想着怎样不出力气,或者少出点儿力就可以拣到大便宜的窍门。他想,养蜜蜂的人能得到蜂蜜,养鱼鹰的人能得到鱼,我为什么不养些猴子呢?猴子会采果子呵!

  于是,他买了一群猴子,把它们关在一所空房子里,又买了很多装果子用的篓子,教猴子扛篓子。他手拿皮鞭,严加训练。然后又买了许多果子教猴子装篓子,哪个猴子毛手毛脚地吃上一口果子,或者把果子碰伤了,他便举起皮鞭,乱抽一顿。没多久,便把猴子整治得服服帖帖,说一不二了。这时,他才把猴子放到山里,去给他采果子。

  不错,猴子们挺驯服,每天早出晚归,背驮肩扛地给他采来各种各样的鲜果。他只要把这些鲜果拿到集市上卖出去就行了。从此他的日子过得宽宽松松,逍遥自在。

  这个不劳而获的人很苛刻,他每天早上把猴子赶上山去采果子,不管采下多少果子,每只猴子只发给一个。猴子们劳累一天,一个果子怎么能吃饱肚子呢?

  猴子们对主人的苛刻虐待很反感,但谁也不敢吭声,因为它们很知道皮鞭的味道。

  这天,猴子们照常上山去采果子,虽然肚子空空的,但受过训练,采下果子来,只往篓子里装,不敢往嘴里放。他们饿极了,主人又不在面前,有一个大胆点儿的,便吃起果子来,其它的猴子看见了,都一直咽口水。后来,实在耐不住了,也学着它的样子吃起来了。

  一个野生老猴子看见它们这般模样,不禁大笑起来:“猴儿们,这都是野生野长的果子,放心大胆地吃吧,看你们被人整治得没点儿猴性了,吃吧,吃吧。”

  猴子们互相看看,也七嘴八舌地吱哇起来:“这果子不是主人的,谁都可以采,谁都可以吃。”“主人懒得上山来,他又看不见,咱们放开肚子吃呗。”

  它们边吃边议论:“敢情在这山上采果子的权利,不单是只有主人才有呀!”“我原来还以为是主人养活咱们呢,现在才弄明白是咱们养活他呀!”“山是大自然的山,谁都可以上山来,果是野生的果,谁都可以摘,他懒得劳动,鞭打咱们给他干活,咱们何必受他那样折磨呢?”“可不是吗?我们是自找苦吃!”

  猴子们长时间挨饿,吃饱后一个个东倒西歪地睡着了。一觉醒来,太阳已快落山了,篓子里还没有装满呢。

  一个小猴子说:“今天回去,保准得吃皮鞭,哼!就是吃皮鞭,我也不给他干活了,我要和他讲理!”另一个小猴子说:“主人从来不讲理,咱们要不给他干活,他会把咱们再卖掉!”大伙抓耳挠腮,扑闪着眼睛,一时不晓得该怎样是好。

  还是老一点的猴子精灵,它说:“干吗要回去呢?这大山没有头,森林没有边,到哪里没有我们吃的果子?生活的路子就在我们脚下,我们应该当机立断,立刻离开这里!”那个野生的老猴儿又插话了:“这就对了,走,一块走哇!”

  大伙儿一个个扔掉手里的篓子,欢跳着,嘻笑着,钻进那无边无际的山林里去了。

  那个主人到了晚上,左等右等不见猴子们回来,到山上一看,除了横躺竖倒的篓子以外,一个猴儿也不见了。

  他气坏了,但仍旧好吃懒做。后来,他终于饿死在自己的床上了。

  点睛:

  现在不少领导者普遍反映人难管,最根本的原因是“领导者与员工的关系”没有摆正关系造成的。究竟员工在领导者心里,是一种达成目的的工具,还是具有个人特色的个体?过去的员工毫无条件地信任公司,将他的一生奉献给公司,唯一微薄的希望,就是当公司赚钱时,能够分一些给员工。可是这家公司遇到困难时,毫不犹豫就抛弃这些员工,有些更恶劣的居然不是先告知,早上员工上班时才通知“今天是最后一天”!现在的员工总算让还活在机器时代的公司吃到苦头,员工不再是呼之即来挥之即去的零件,使用一大堆的命令和规章,即使能约束员工上班时间,一到下班时间,员工很自然的收好文件离开,员工没有必要对企业忠诚,因为企业先不尊重员工,员工只好自己先尊重自己,只顾自己不顾公司了。

  我们许多领导者在分配给下属工作时,把下属当一台机器一样看待。只告诉下属要做什么,其余的什么都不说,导致下属不知工作份量的轻重,结果不知自己到底做得怎么样,根本谈不上有任何成就感。因此对工作也失去了干劲。

  员工不是成本,而是公司的资本,是公司的核心资源。员工是活生生的人,不是机器,应该受到尊重。不能用按钮随意控制。毫无疑问,人是会受外界刺激影响的,但绝对是不可以控制的。只有自己才能改变自己。

  现如今,很多优秀员工不顾企业的挽留,翩然而去;潜力员工不顾企业的期待,悄然远去;甚至重点培养的员工,也不顾企业的重托,撒手而去,留给领导者无尽的懊恼和叹息。让领导者百思不得其解的是,似乎总是该走的没有走,不该走的却走了;平凡的没有走,优秀的却走了。于是,也总能听到领导者一遍又一遍无奈的歌谣:我拿什么来留住你?我的员工!

  领导者必须从“员工靠老板”的思想转变为“老板靠员工”。没有员工,就没有老板,从内心深处想通这个问题。否则就容易产生碰撞和矛盾。其实员工只要求在一个和谐、轻松、公正、公平、进取、团结的团队里工作,他就开心,就精神舒畅。但很多企业的企业文化缺乏人性化,企业领导的管理风格强硬化、观念僵硬化、都和现代企业要求的以人为本作为管理的核心,事事尊重人的需求,处处调动人的积极性,实现人的自我价值为中心的管理原则相背离。

posted @ 2012-04-16 22:34 paulwong 阅读(269) | 评论 (0)编辑 收藏

项目管理资源

http://www.cnblogs.com/ldcsaa/category/353927.html

posted @ 2012-04-16 00:57 paulwong 阅读(252) | 评论 (0)编辑 收藏

解释TOMCAT框架

1. Tomcat的整体框架结构

Tomcat的基本框架, 分为4个层次。
Top Level Elements:
Server
Service
Connector
HTTP
AJP
Container
Engine
Host
Context
Component
manager
logger
loader
pipeline
valve
...
站在框架的顶层的是Server和Service

Server: 其实就是BackGroud程序, 在Tomcat里面的Server的用处是启动和监听服务端事件(诸如重启、关闭等命令。

在tomcat的标准配置文件:server.xml里面, 我们可以看到“<Server port="8005" shutdown="SHUTDOWN" debug="0">”这里的"SHUTDOWN"就是server在监听服务端事件的时候所使用的命令字)

Service: 在tomcat里面, service是指一类问题的解决方案。 通常我们会默认使用tomcat提供的:Tomcat-Standalone 模式的service。 在这种方式下的service既给我们提供解析jsp和servlet的服务, 同时也提供给我们解析静态文本的服务。

Connector: Tomcat都是在容器里面处理问题的, 而容器又到哪里去取得输入信息呢?

Connector就是专干这个的。 他会把从socket传递过来的数据, 封装成Request, 传递给容器来处理。

通常我们会用到两种Connector,一种叫http connectoer, 用来传递http需求的。 另一种叫AJP, 在我们整合apache与tomcat工作的时候, apache与tomcat之间就是通过这个协议来互动的。 (说到apache与tomcat的整合工作, 通常我们的目的是为了让apache 获取静态资源, 而让tomcat来解析动态的jsp或者servlet。)

Container: 当http connector把需求传递给顶级的container: Engin的时候, 我们的视线就应该移动到Container这个层面来了。

在Container这个层, 我们包含了3种容器: Engin, Host, Context.

Engin: 收到service传递过来的需求, 处理后, 将结果返回给service( service 是通过 connector 这个媒介来和Engin互动的 ).

Host: Engin收到service传递过来的需求后,不会自己处理, 而是交给合适的Host来处理。

Host在这里就是虚拟主机的意思, 通常我们都只会使用一个主机,既“localhost”本地机来处理。

Context: Host接到了从Host传过来的需求后, 也不会自己处理, 而是交给合适的Context来处理。
比如:
<http://127.0.0.1:8080/foo/index.jsp>
<http://127.0.1:8080/bar/index.jsp>
前者交给foo这个Context来处理, 后者交给bar这个Context来处理。

很明显吧! context的意思其实就是一个web app的意思。

我们通常都会在server.xml里面做这样的配置
<Context path="/foo" docBase="D:/project/foo/web" />
这个context容器,就是用来干我们该干的事儿的地方的。

毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, 是不那么容易掌握TOMCAT的框架的。 所以得实践、实践、再实践。 建议下载一份TOMCAT的源码, 调试通过, 然后单步跟踪其启动过程。 如果有不明白的地方, 再来查阅本文, 看是否能得到帮助。 我相信这样效果以及学习速度都会好很多!

posted @ 2012-04-15 23:47 paulwong 阅读(452) | 评论 (0)编辑 收藏

alfresco集群负载均衡配置

机器两台:
A机器:172.16.48.26:用于Alfresco服务器(集群节点1)
用于数据库服务器、文件服务器(共享)、

B机器:172.16.48.27:用于Alfresco服务器(集群节点2)
负载均衡服务器


第一步:创建共用数据库
在A机器:172.16.48.26 上安装MySQL,建立名为alfresco的数据库;
#create database alfresco
#grant all privileges on alfresco.* to root@'%' identified by 'alfresco'

第二步:创建共享目录
在A机器:172.16.48.26上建立可写的共享目录 /alfresco;
在/下创建目录 alfresco
#mkdir /alfresco

第三步:设置共享目录
在A机器:172.16.48.26 上安装Samba,修改/etc/samba/smb.conf,增加以下内容
security = user
[alfresco]
comment = alfresco data & log
path = /alfresco
public = yes
writable = yes
write list = @root

第四步:建立Samba用户
在A机器:172.16.48.26建立Samba用户root
#smbpasswd -a root

第五步:建立共享
在B机器:172.16.48.27上创建/alfresco目录并挂载A机器的 共享目录//172.16.48.26/alfresco
# mount -t smbfs -o username=root,password=alfresco //172.16.48.26/alfresco /alfresco

第六步:安装tomcat并修改配置
A机器:172.16.48.26 上安装tomcat,并修改conf/server.xml
maxThreads="20000"
emptySessionPath="true"
protocol="org.apache.coyote.http11.Http11NioProtocol"
enableLookups="false"
redirectPort="8443"
connectionTimeout="20000"
disableUploadTimeout="true" />


在B机器:172.16.48.27 上安装tomcat,并修改conf/server.xml,内容同上,然后将jvmRoute改为tomcat2;

第七步:部署alfersco
将alfresco.war分别拷贝到A机器:172.16.48.26和B机器:172.16.48.27的webapps目录下,并解压缩到alfresco目录
#jar -xf alfresco.war

第八步:修改alfresco配置
分别对两台机器的alfresco的配置做修改

1、修改WEB-INF/classes/alfresco/repository.properties文件
dir.root=./alfresco_data
db.name=alfresco
db.url=jdbc:mysql://172.16.48.26:3306/${db.name}
db.username=root
db.password=alfresco

2、拷贝extension目录(在repository项目的config中)下的内容分别到172.16.48.26和172.16.48.27的WEB-INF/classes/alfresco/extension目录下,
包括:
custom-hibernate-dialect.properties
custom-repository-context.xml
custom-repository.properties
ehcache-custom.xml
replicating-content-services-context.xml
以及自己定义的content的配置

3、修改custom-hibernate-dialect.properties文件
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

4、修改custom-repository.properties文件
dir.root=./alfresco_data
index.recovery.mode=AUTO
index.tracking.cronExpression=0/5 * * * * ?
index.tracking.reindexLagMs=10000
db.driver=org.gjt.mm.mysql.Driver
db.name=alfresco
db.url=jdbc:mysql://172.16.48.26:3306/${db.name}
db.username=root
db.password=alfresco

5、修改ehcache-custom.xml文件
properties="port=40001, socketTimeoutMillis=300000"/>

6、修改replicating-content-services-context.xml文件


./alfresco_data/contentstore




/alfresco/contentstore



第九步:启动tomcat

修改172.16.48.26的bin/catalina.sh文件,启动tomcat
export JAVA_OPTS='-Xms512m -Xmx2048m -XX:MaxPermSize=512m -server'
#./bin/startup.sh

修改172.16.48.27的bin/catalina.sh文件,内容同上,启动tomcat;

第十步:安装文件服务器

在172.16.48.26上安装apache httpd server到目录/usr/local/apache目录下,
拷贝从apache网站找到的 mod_jk.so到modules目录下

修改conf/httpd.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkMount /* loadBalancer
JkMount /jkstatus status
Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-default.conf

添加文件conf/workers.properties
worker.list=tomcat1, tomcat2, loadBalancer, status
worker.tomcat1.port=8009
worker.tomcat1.host=172.16.48.26
worker.tomcat1.type=ajp13
worker.tomcat2.port=8009
worker.tomcat2.host=172.16.48.27
worker.tomcat2.type=ajp13
worker.loadBalancer.type=lb
worker.loadBalancer.balance_workers=tomcat1, tomcat2
worker.loadbalancer.sticky_session=true
worker.loadbalancer.sticky_session_force=false
worker.status.type=status

修改conf/extra/httpd-default.conf文件
Timeout 300
KeepAlive On
MaxKeepAliveRequests 0
KeepAliveTimeout 300

修改conf/extra/httpd-mpm.conf文件

StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 4096
MaxClients 2048
MaxRequestsPerChild 0


ThreadsPerChild 1024
MaxRequestsPerChild 0


启动apache httpd server

第十一步:测试

在A机器创建用户test
使用test用户创建文件 file1.txt
在B机器使用test用户搜索 file1;

在B机器使用test用户创建文件 file2.txt
在A机器使用test用户搜索 file2;



原文链接:http://blog.csdn.net/wangxiaojing123/article/details/6682706

posted @ 2012-04-15 20:41 paulwong 阅读(752) | 评论 (0)编辑 收藏

仅列出标题
共115页: First 上一页 83 84 85 86 87 88 89 90 91 下一页 Last