最近准备使用jbpm, 从Jboss网站上下载回来jbpm-installer-3.3.1.GA.jar和jboss 4.2.3,机器上原先装有mysql 5. 本来以为安装没有问题,没想到竟然费了一番周折才搞掟,现把整个过程写下来,供有需要的朋友参考。
1. 把jboss 4.2.3 展开到某一个文件夹中,我们假定它为{jboss.home};
2. 安装jbpm-nstaller-3.3.1. 通过命令 java -jar jbpm-installer-3.3.1.GA.jar可以启动安装向导。在安装过程中指定jboss所在的文件夹,数据库选择为mysql. 一路Next后完成后会生成{jboss.home}\server\default\deploy\jbpm,称其为{jboss-jbpm.home},jbpm还会生成另一份专门存放自己的文件夹,称其为{jbpm.home}.
3. 麻烦开始了。当启动jboss4.2.3时,总是报错,即使换成jboss 5 也是一样。
后来查阅jboss官方说明书,内容极其笼统简略,没有任何参考价值。也不怪jboss, 人家的文档是要卖钱的。
又Google、baidu了半天,直到遇到ColorKnight的一个贴子才解决问题, 在这里严重感谢ColorKnight,原贴地址: http://blog.csdn.net/colorknight/archive/2008/12/11/3495408.aspx。
4. 通过仔细阅读,发现了问题所在,原来不能直接使用{jboss-jbpm.home}\jbpm-mysql-ds.xml中的配置。它的缺省配置使用xa-datasource,这导致了上述exception的发生。将它改为local-tx-datasource.下面是我的配置:
6. 不用着急,ColorKnight给出了很重要的参考。之所以重要,是因为他的方向正确;之所以说是参考,是因为他用的是Oracle,我的是mysql,略有不同。好吧,快生成数据吧。
8. 配置jboss-console的web.xml 使admin能登录进来。 打开${Jboss-Jbpm.hom}/jsf-console.war/WEB-INF/web.xml 文件,增加下例代码中黄色Highlight的部分。
9.最后重新启动jboss,再次登录http://localhost:8080/jbpm-console,以admin/admin登录进去,look一下界面吧:
1. 把jboss 4.2.3 展开到某一个文件夹中,我们假定它为{jboss.home};
2. 安装jbpm-nstaller-3.3.1. 通过命令 java -jar jbpm-installer-3.3.1.GA.jar可以启动安装向导。在安装过程中指定jboss所在的文件夹,数据库选择为mysql. 一路Next后完成后会生成{jboss.home}\server\default\deploy\jbpm,称其为{jboss-jbpm.home},jbpm还会生成另一份专门存放自己的文件夹,称其为{jbpm.home}.
3. 麻烦开始了。当启动jboss4.2.3时,总是报错,即使换成jboss 5 也是一样。
11
:
04
:
16
,
201
INFO [DatasourceConnectionProvider] Using datasource: java:JbpmDS
11 : 04 : 16 , 201 WARN [JBossManagedConnectionPool] Throwable while trying to match ManagedConnection, destroying connection: org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener@6ca1a6[state = NORMAL mc = org.jboss.resource.adapter.jdbc.xa.XAManagedConnection@1ae8bac handles = 0 lastUse = 1234195414812 permit = false trackByTx = false mcp = org.jboss.resource.connectionmanager.JBossManagedConnectionPool$OnePool@ed55ec context = org.jboss.resource.connectionmanager.InternalManagedConnectionPool@1a40fff xaResource = org.jboss.resource.connectionmanager.xa.JcaXAResourceWrapper@53d34c txSync = null ]
java.lang.NoClassDefFoundError: org / jboss / resource / adapter / jdbc / ValidConnectionChecker
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java: 621 )
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java: 124 )
at java.net.URLClassLoader.defineClass(URLClassLoader.java: 260 )
at java.net.URLClassLoader.access$ 000 (URLClassLoader.java: 56 )
at java.net.URLClassLoader$ 1 .run(URLClassLoader.java: 195 )
11 : 04 : 16 , 201 WARN [JBossManagedConnectionPool] Throwable while trying to match ManagedConnection, destroying connection: org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener@6ca1a6[state = NORMAL mc = org.jboss.resource.adapter.jdbc.xa.XAManagedConnection@1ae8bac handles = 0 lastUse = 1234195414812 permit = false trackByTx = false mcp = org.jboss.resource.connectionmanager.JBossManagedConnectionPool$OnePool@ed55ec context = org.jboss.resource.connectionmanager.InternalManagedConnectionPool@1a40fff xaResource = org.jboss.resource.connectionmanager.xa.JcaXAResourceWrapper@53d34c txSync = null ]
java.lang.NoClassDefFoundError: org / jboss / resource / adapter / jdbc / ValidConnectionChecker
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java: 621 )
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java: 124 )
at java.net.URLClassLoader.defineClass(URLClassLoader.java: 260 )
at java.net.URLClassLoader.access$ 000 (URLClassLoader.java: 56 )
at java.net.URLClassLoader$ 1 .run(URLClassLoader.java: 195 )
后来查阅jboss官方说明书,内容极其笼统简略,没有任何参考价值。也不怪jboss, 人家的文档是要卖钱的。
又Google、baidu了半天,直到遇到ColorKnight的一个贴子才解决问题, 在这里严重感谢ColorKnight,原贴地址: http://blog.csdn.net/colorknight/archive/2008/12/11/3495408.aspx。
4. 通过仔细阅读,发现了问题所在,原来不能直接使用{jboss-jbpm.home}\jbpm-mysql-ds.xml中的配置。它的缺省配置使用xa-datasource,这导致了上述exception的发生。将它改为local-tx-datasource.下面是我的配置:
<?
xml version="1.0" encoding="UTF-8"
?>
< datasources >
< local-tx-datasource >
< jndi-name > JbpmDS </ jndi-name >
< connection-url > jdbc:mysql://localhost:3306/jbpm </ connection-url >
< driver-class > com.mysql.jdbc.Driver </ driver-class >
< user-name > jbpm </ user-name >
< password > jbpm </ password >
< exception-sorter-class-name > org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter </ exception-sorter-class-name >
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
< metadata >
< type-mapping > mySQL </ type-mapping >
</ metadata >
</ local-tx-datasource >
</ datasources >
5. 这步完成后就可以启动Jboss了,不再有任何错误。在Firefox中可以打开http://localhost:8080/jbpm-console页面。但是login会失败的,因为数据库中没有任何数据,安全配置也没有做。
< datasources >
< local-tx-datasource >
< jndi-name > JbpmDS </ jndi-name >
< connection-url > jdbc:mysql://localhost:3306/jbpm </ connection-url >
< driver-class > com.mysql.jdbc.Driver </ driver-class >
< user-name > jbpm </ user-name >
< password > jbpm </ password >
< exception-sorter-class-name > org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter </ exception-sorter-class-name >
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
< metadata >
< type-mapping > mySQL </ type-mapping >
</ metadata >
</ local-tx-datasource >
</ datasources >
6. 不用着急,ColorKnight给出了很重要的参考。之所以重要,是因为他的方向正确;之所以说是参考,是因为他用的是Oracle,我的是mysql,略有不同。好吧,快生成数据吧。
insert
into
JBPM_ID_USER (ID_, CLASS_, NAME_, EMAIL_, PASSWORD_)
values
(
'
1
'
,
'
U
'
,
'
user
'
,
'
[email protected]
'
,
'
user
'
);
insert into JBPM_ID_USER (ID_,CLASS_, NAME_, EMAIL_, PASSWORD_) values ( ' 2 ' , ' U ' , ' manager ' , ' [email protected] ' , ' manager ' );
insert into JBPM_ID_USER (ID_,CLASS_, NAME_, EMAIL_, PASSWORD_) values ( ' 3 ' , ' U ' , ' shipper ' , ' [email protected] ' , ' shipper ' );
insert into JBPM_ID_USER (ID_,CLASS_, NAME_, EMAIL_, PASSWORD_) values ( ' 4 ' , ' U ' , ' admin ' , ' [email protected] ' , ' 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 );
7. 配置jboss的认证管理。
打开{jboss.home}/server/default/conf/login-config.xml文件,在文件中加入
insert into JBPM_ID_USER (ID_,CLASS_, NAME_, EMAIL_, PASSWORD_) values ( ' 2 ' , ' U ' , ' manager ' , ' [email protected] ' , ' manager ' );
insert into JBPM_ID_USER (ID_,CLASS_, NAME_, EMAIL_, PASSWORD_) values ( ' 3 ' , ' U ' , ' shipper ' , ' [email protected] ' , ' shipper ' );
insert into JBPM_ID_USER (ID_,CLASS_, NAME_, EMAIL_, PASSWORD_) values ( ' 4 ' , ' U ' , ' admin ' , ' [email protected] ' , ' 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 );
<
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.home}/jsf-console.war/WEB-INF/jboss-web.xml中的 < security-domain > 所设置的名字一致。
< 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.home}/jsf-console.war/WEB-INF/jboss-web.xml中的 < security-domain > 所设置的名字一致。
8. 配置jboss-console的web.xml 使admin能登录进来。 打开${Jboss-Jbpm.hom}/jsf-console.war/WEB-INF/web.xml 文件,增加下例代码中黄色Highlight的部分。
<
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 >
< 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 >
9.最后重新启动jboss,再次登录http://localhost:8080/jbpm-console,以admin/admin登录进去,look一下界面吧: