[size=large][size=x-large][size=x-large]转:colorknight的专栏 原文地址:
http://blog.csdn.net/colorknight/archive/2008/12/11/3495408.aspx
最近因为工作需要想研究一下jbpm,看过相关文档后知道jbpm3.3有了安装包比前面的版本有了提升。可安装的时候才发现事情远没有想得那么简单,尤其是在使用安装包不支持的数据库时。于是,呕心沥血:)在网上查找相关资料,自己尝试,总结出下面的安装过程。
1.用jbpm-installer-3.3.0.GA.jar安装,安装过程中指定好JBOSS目录。因为缺省情况下安装包不支持ORACLE,所以从安装界面随便选定一种数据库安装就可以。安装完后,在安装路径下会产生一个jbpm-3.3.0.GA的目录(以下以${JBPM3.3}表示)。在${JBOSSPATH}/server/default/deploy/路径下会产生一个jbpm的目录(以下以${JBOSS-JBPM}表示)。第一步完成。
2.配置Oracle数据源。
2.1配置ORACLE连接驱动。在${JBOSS-JBPM}路径下存在一个“*-ds.xml”的文件,“*”与安装过程选的数据库名一致,可能还有一个向关的数据库驱动jar包,我们在这里将它删除。然后将oracle的驱动ojdbc14.jar拷一份过来,然后我们再写一个oracle-ds.xml。什么,不会写!没关系,你可以从${JBOSSPATH}/docs/examples/jca目录下拷一份出来,然后修改成你需要的地址和数据库名。
2.2向ORACLE导入JBPM数据。随便找个ORACLE客户端,如TOAD等,将${JBPM3.3}/database/jbpm.jpdl.oracle.sql文件中的sql脚本执行一遍。数据库建完。
2.3配置hibernate。打开${JBOSS-JBPM}/jbpm-service.sar/hibernate.cfg.xml文件,将<property name="hibernate.dialect">的值改为org.hibernate.dialect.Oracle9Dialect。
OK!安装完成!看看效果吧!
输入地址http://localhost:8080/jbpm-console看到下面这个页面
[img][/img]
好好吧,让我们试着登陆一下!抱歉,现在你没有办法登上,认证授权还不支持。下面,我们继续努力!
3.安装jbpm-console认证授权。
3.1在oracle生成相关认证数据表。没有合适的数据,自己按照页面上的用户情况生成了如下数据库脚本:
create table JBPM_ID_GROUP (ID_ number(19,0) not null, CLASS_ char(1) not null, NAME_ varchar(255), TYPE_ varchar(255), PARENT_ number(19,0), primary key (ID_));
create table JBPM_ID_MEMBERSHIP (ID_ number(19,0) not null, CLASS_ char(1) not null, NAME_ varchar(255), ROLE_ varchar(255), USER_ number(19,0), GROUP_ number(19,0), primary key (ID_));
create table JBPM_ID_PERMISSIONS (ENTITY_ number(19,0) not null, CLASS_ varchar(255), NAME_ varchar(255), ACTION_ varchar(255));
create table JBPM_ID_USER (ID_ number(19,0) not null, CLASS_ char(1) not null, NAME_ varchar(255), EMAIL_ varchar(255), PASSWORD_ varchar(255), primary key (ID_));
alter table JBPM_ID_GROUP add constraint FK_ID_GRP_PARENT foreign key (PARENT_) references JBPM_ID_GROUP;
alter table JBPM_ID_MEMBERSHIP add constraint FK_ID_MEMSHIP_GRP foreign key (GROUP_) references JBPM_ID_GROUP;
alter table JBPM_ID_MEMBERSHIP add constraint FK_ID_MEMSHIP_USR foreign key (USER_) references JBPM_ID_USER;
insert into JBPM_ID_USER (ID_, CLASS_, NAME_, EMAIL_, PASSWORD_) values ('1', 'U', 'user', 'sample.user@sample.domain', 'user');
insert into JBPM_ID_USER (ID_,CLASS_, NAME_, EMAIL_, PASSWORD_) values ('2', 'U', 'manager', 'sample.manager@sample.domain', 'manager');
insert into JBPM_ID_USER (ID_,CLASS_, NAME_, EMAIL_, PASSWORD_) values ('3', 'U', 'shipper', 'sample.shipper@sample.domain', 'shipper');
insert into JBPM_ID_USER (ID_,CLASS_, NAME_, EMAIL_, PASSWORD_) values ('4', 'U', 'admin', 'sample.admin@sample.domain', 'admin');
insert into JBPM_ID_GROUP VALUES(1,'G','admin','security-role',NULL);
insert into JBPM_ID_GROUP VALUES(2,'G','manager','security-role',NULL);
insert into JBPM_ID_GROUP VALUES(3,'G','user','organisation',NULL);
insert into JBPM_ID_MEMBERSHIP VALUES(1,'M',NULL,'user',1,3);
insert into JBPM_ID_MEMBERSHIP VALUES(2,'M',NULL,'admin',2,1);
insert into JBPM_ID_MEMBERSHIP VALUES(3,'M',NULL,'manager',2,2);
insert into JBPM_ID_MEMBERSHIP VALUES(4,'M',NULL,'user',2,3);
insert into JBPM_ID_MEMBERSHIP VALUES(5,'M',NULL,'user',3,3);
insert into JBPM_ID_MEMBERSHIP VALUES(6,'M',NULL,'admin',4,1);
insert into JBPM_ID_MEMBERSHIP VALUES(7,'M',NULL,'user',4,3);
把这些脚本在oracle中执行一遍。
3.2配置login-config.xml。打开${JBOSSPATH}/server/default/conf/login-config.xml文件,在文件中加入
<application-policy name = "jbpm-console">
<authentication>
<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule"
flag="required">
<module-option name="dsJndiName">java:/JbpmDS</module-option>
<module-option name="principalsQuery">
SELECT PASSWORD_ FROM JBPM_ID_USER WHERE NAME_=?
</module-option>
<module-option name="rolesQuery">
SELECT g.NAME_ ,'Roles'
FROM JBPM_ID_USER u,
JBPM_ID_MEMBERSHIP m,
JBPM_ID_GROUP g
WHERE g.TYPE_='security-role'
AND m.GROUP_ = g.ID_
AND m.USER_ = u.ID_
AND u.NAME_=?
</module-option>
</login-module>
</authentication>
</application-policy>
其中jbpm-console必须与${JBOSS-JBPM}/jbpm-enterprise-bundle.ear/jsf-console.war/WEB-INF/jboss-web.xml中的<security-domain>所设置的名字一致。
3.3设置web.xml。打开${JBOSS-JBPM}/jbpm-enterprise-bundle.ear/jsf-console.war/WEB-INF/web.xml文件。文件中有如下一段:
<!--
This role list should be changed to include all the relevant roles for your
environment.
-->
<security-role>
<role-name>admin</role-name>
</security-role>
<security-role>
<role-name>user</role-name>
</security-role>
<!--
Security constraints - optionally customize the role name to require
a login before access is allowed to the application.
Also, be sure to edit jboss-web.xml to configure the security domain if you are
deploying inside JBoss AS.
-->
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure Area</web-resource-name>
<url-pattern>/sa/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
在<auth-constraint>标签内增加一个值为admin的<role-name>标签,这样admin用户就可以登陆jbpm-console了。
大功告成!开始你的jbpm体验之旅吧!