`
zhangym195
  • 浏览: 121534 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类
最新评论

jBPM jPDL 用户开发手册 - 第8章

阅读更多

8章 jBPM 数据库

8.1. 切换后端数据库

切换后端 JBoss jBPM是切实可行的。我们将使用PostgreSQL和MySQL作为示例走完这个流程。这个流程对于所有的其他支持的数据库都是相同的。对于这些大量支持的数据库、大量的驱动程序、hibernate配置文件和ANT构建文件在当前的jBPM发布的DB子项目中生成数据库创建脚本。如果你不能找到你要使用的数据库的这些文件的话,你应该首先确认是否hibernate支持你的数据库。如果真的不支持的话,你可以看下在DB项目中的当前数据库中的一个文件并模仿这个来使用你自己的数据库。
对于这个文档,我们将使用jBoss jBPM新手工具箱。我们假设这个新手工具箱是被释放到你电脑的叫${JBPM_SDK_HOME}目录的位置。你能够找到jBPM的DB子项目在${JBPM_SDK_HOME}/jbpm-db处。
在安装了数据库后,你需要运行数据库创建脚本。这些脚本将在数据库中创建jBPM表。为了让缺省的web应用使用这个新数据库来运行。我们需要更新新手工具箱中的一些服务器的配置文件。对于这些配置的变化,我们将不会涉及的太多。如果你想知道更多的关于不同的服务器的配置设定的话,我们建议你去看一下JBoss的文档。

8.1.1. 隔离级别

无论你使用什么数据库,确信配置的JDBC连接的隔离级别至少是READ_COMMITTED,那个在7.6.1 JDBC连接隔离级别有所解释。

8.1.2. 安装PostgreSQL数据库管理器

为了安装PostgrepSQL或其他你可能正在使用的数据库,我们查阅这些产品的安装手册。在windows上安装PostgreSQL数据库是相当的完美的。安装程序创建一个专一windows用户并定义数据库管理员(administrator)。我们将使用PostgreSQL自带一个叫pgAdmin III的管理工具来创建jBPM数据库。这个工具创建了jbpmDB数据库后的屏幕快照显示在下面的图中。

图8-1 创建jbpmDB数据库后PostgreSQL pgAdmin III 工具快照

完成数据库的安装后,我们可以使用数据库浏览器工具(像DBVisualizer)来查看数据库的内容。在你用DBVisualizer定义数据库连接前,你应该增加一个PostgreSQL的JDBC驱动管理器。选择'Tools->Driver Manager...'来打开驱动管理器窗口。看下面的一个如何增加PostgreSQL JDBC驱动的示例图。

 

图 8-2 增加JDBC驱动到驱动管理器
这些就用DBVisualizer设置定义数据库连接到我们的新创建的数据库的所有事。在这个文档中我们将用进一步的使用这个工具来确保创建脚本并流程部署预期有那样工作。使用DBVisualizer工具来创建连接的示例请参考在下面的图。正像你看到的一样,还没有表在你的数据库中。我们将在下一部分来创建这些表。

Create the connection to the jBPM database

图 8-3 为jBPM数据库创建连接
另一个值得提一下的是上图中的数据库URL:'jdbc:postgresql://localhost:5432/JbpmDB'。如果你使用别的名称来创建jbpmDB数据库的话,或者PostgreSQL没有运行在本机或在另一个端口上,你就不得不相应地调整你的数据库URL。

8.1.3. 安装MySQL数据库管理器

要安装MySQL数据库,请查阅MySQL提供的文档。安装是相当的容易和笔直的,在windows上只需要几分钟的时间。你需要使用MySQL提供的数据库管理控制台。

The MySQL Administrator

图 8-4 MySQL Administrator

8.1.4. 使用PostGreSQL或MySQL创建JBoss jBPM 数据库

为了使你的数据库得到正确的被生成的数据库脚本。你应该使用jBPM新手工具箱中提供的脚本。在新手工具箱的${JBPM_SSTARTERSKIT_HOME}/jbpm-db/build/${DATABASE_TYPE}/scripts下你可以找到所有主流数据库的创建脚本。使用你的数据库管理控制台,定位到数据库然后打开并执行一个创建我们所提到的脚本。下面是PostGreSQL和MySQL在他们各自的控制台上的屏幕快照。
 
图 8-5

8.1.4.1. 使用PostGreSQL创建JBoss jBPM 数据库

正像已经提到的那样,你将在DDB子项目中找到许多被支持的数据库的脚本。PostgreSQL数据库的脚本可以在'${JBPM_SDK_HOME}/jbpm-db/build/mysql/scripts目录下找到。这个创建脚本叫'postgresql.create.sql'。使用DBVisualizer,你可以加载这个脚本并切换到'SQL Commander'标签页然后选择'File->Load...'。在下面的对话框中,定位到创建脚本文件。做这个的结果显示在下图中。

Load the database creation script

图 8-6 加载数据库创建脚本

Running the database creation script

图 8-7 运行数据库创建脚本

8.1.4.2. 使用MySQL创建JBoss jBPM 数据库

一旦你已经提前安装了MySQL并创建了jbpm数据库,用你喜欢的任何数据库名称。在本例中使用的是”jbomdb”。一个数据库的屏幕快照如下:

The MySQL Administrator after creating the jbpm database under MySQL

图 8-8 MySQL下创建jbpm数据库时的MySQL Administrator
你可以使用命令行工具来加载数据库脚本。打开一个DOS窗口或终端窗口并键入下面的命令行:

mysql -u root -p

你将得到MySQL要求root用户密码的提示,无论你使用哪个帐户修改这个数据库。在登录之后,键入下面的命令使用新建的jbpmdb:

use jbpmdb

Loading the database create scripts for MySQL

图8-9 为MySQL加载数据库创建脚本
现在你可以通过执行下面的命令为jBPM加载数据库脚本:

source mysql.drop.create.sql

一旦脚本执行,你应该在MySQL的命令窗口中得下面的输出:

Loading the database create scripts for MySQL

图8-10 为MySQL数据库加载数据库创建脚本

8.1.5. 最后一步

在这步后,在当前的表中仍然没有任何数据。要想让jBPM web应用工作,你至少应该在jbpm_id_user表中创建一些记录。当缺省的新手工具箱的发布包在HSQLDB上运行时,为了能够在这个表中得到正确的相同入口,我们建议运行下面的脚本:

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');

8.1.6. 更新JBoss jBPM服务器配置

在我们能够真正使用新创建的数据库来运行JBoss jBPM的web 应用前,我们还得去更新些JBoss jBPM的配置。服务器上的位置是’ ${JBPM_SDK_HOME}/jbpm-server’。第一件事我们将要做的是更新创建指出JbpmDB数据库的新数据源的配置。第二步是,我们将确保那个缺省的web应用使用的是正在讨论的数据源而不再是那个HSQLDB的数据源。

<?xml version="1.0" encoding="UTF-8"?>

 
<datasources>

  <local-tx-datasource>

    <jndi-name>JbpmDS</jndi-name>

    <connection-url>jdbc:postgresql://localhost:5432/JbpmDB</connection-url>

    <driver-class>org.postgresql.Driver</driver-class>

    <user-name>user</user-name>

    <password>password</password>

    <metadata>

      <type-mapping>PostgreSQL 8.1</type-mapping>

    </metadata>

  </local-tx-datasource>

 
</datasources>
对于MySQL来说,数据源定义看起来像下面这样:

<?xml version="1.0" encoding="UTF-8"?>

 
<datasources>

  <local-tx-datasource>

    <jndi-name>JbpmDS</jndi-name>

    <connection-url>jdbc:mysql://localhost:3306/jbpmdb</connection-url>

    <driver-class>com.mysql.jdbc.Driver</driver-class>

    <user-name>root</user-name>

    <password>root</password>

    <metadata>

      <type-mapping>MySQL</type-mapping>

    </metadata>

  </local-tx-datasource>

</datasources>
为了创建一个新的数据源,你应该使用显示在上面的程序列表的内容创建一个叫jbpm-ds.xml文件。当然它可能不得不改变这个文件中的一些值来适应你的特殊的情形。然后在${JBPM_SDK_HOME}/jbpm-server/server/jbpm/deploy文件夹中保存这个文件。恭喜,你刚才为你的JBoss jBPM服务器创建了一个新的数据源。好,差不多的时候,为了使它们真正地工作你不得不复制正确的JDBC驱动程序到${JBPM_SDK_HOME}/jbpm-server/server/jbpm/lib目录下。当我们安装它在DBVisualizer中为了能够浏览我们新创建的数据库时,我们已经在使用了这个JDBC程序。这个文件叫做'postgresql-8.1-*.jdbc3.jar',在你的PostgreSQL安装文件夹的jdbc子文件夹下能够找到它。
如果你使用不是PostgreSQL或MySQL而且正在考虑如何为你的特殊的数据库来创建数据源定义,你可以找到这个样例数据源定义在JBoss应用服务器发布中的docs/examples/jca 文件夹下。如果你有你的数据库驱动程序,你使用jBPM就不会有什么问题。
让缺省的web应用使用正确的数据源不再困难。第一步是在'${JBPM_SDK_HOME}/jbpm-server/server/jbpm/deploy/jbpm.sar/META-INF'文件夹下定位'jboss-service.xml'文件。
使用下面所列的内容来修改这个文件的内容。细心的读者将会注意到唯一的不同是'DefaultDS'和'JbpmDS'这两个词的交换。

<?xml version="1.0" encoding="UTF-8"?>

 
<server>

  <mbean code="org.jbpm.db.jmx.JbpmService"

         name="jboss.jbpm:name=DefaultJbpm,service=JbpmService"

         description="Default jBPM Service">

    <attribute name="JndiName">java:/jbpm/JbpmConfiguration</attribute>

    <depends>jboss.jca:service=DataSourceBinding,name=JbpmDS</depends>

  </mbean>

</server>
为了让每件事情都能运行我们最后需要做的是文件夹'${JBPM_SDK_HOME}/jbpm-server/server/jbpm/deploy/jbpm.sar'中的'jbpm.sar.cfg.jar'文件的处理。然后替换包含jdbc连接属性的部分。这部分应该是看起来像下面列表中显示的那样:在这个文件中有两处变化:hibernate.connection.datasource属性应该指到我们创建的JbpmDS数据源正像在本节的第一步那样,而且hibernate.dialect属性应该匹配PostgreSQL或MySQL的方言。

下面是所需的这两个变化的一个样例,注释掉你不需要的使用的数据库的方言版本。你可以从http://www.hibernate.org/hib_docs/v3/reference/en/html/session-configuration.html#configuration-optional-dialects处找到所支持的数据库方言类型列表。

<?xml version='1.0' encoding='utf-8'?>

 

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 
<hibernate-configuration>

  <session-factory>

 

    <!-- jdbc connection properties -->

    <!-- comment out the dialect not needed! -->

    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>

    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

    <property name="hibernate.connection.datasource">java:/JbpmDS</property>

       

    <!-- other hibernate properties

    <property name="hibernate.show_sql">true</property>

    <property name="hibernate.format_sql">true</property>

    -->

   

    <!-- ############################################ -->

    <!-- # mapping files with external dependencies # -->

    <!-- ############################################ -->

 

    ...

 

  </session-factory>

</hibernate-configuration>
现在我们准备启动服务器,看下这个web应用是否工作了。你还不能开始任何的流程,因为还没有流程被部署。为了做这个我们查阅关于流程定义部署的文档。

8.2.数据库升级

在jbpm.db子项目中,你能够找到:

·         创建jBPM 3.0.2模式(为Hypersonic数据库)的SQL脚本

·         创建jBPM 3.1模式(为Hypersonic数据库)的SQL脚本

·         从jBPM 3.0.2升级到jBPM 3.1的SQL脚本(为Hypersonic数据库)

·         创建模式更新的ant脚本

模式SQL能够在hsqldb/upgrade.scripts目录下找到。
为了为你的数据库运行模式更新工具,看下列这些指导:

·         先决条件:确信你已经安装了jbpm.db项目除了jbpm项目之外。在新手工具箱中,这个是自动的方案。如果jbpm安装在一个不同的位置,相应地在你的build.properties中更新jbpm.3.location 目录位置。

·         先决条件:你应该让你的数据库有一个合适的JDBC驱动程序jar包。

·         在jbpm.db项目的根下更新在build.properties中的属性:

o    upgrade.hibernate.properties包含数据库的hibernate样式的连接属性的属性文件
o    upgrade.libdir包含数据库jdbc驱动程序jar文件的目录
o    upgrade.old.schema.script:创建旧数据库模式的模式生成在脚本(如果它已经存在,你就不需要这个属性)

·         为了创建旧模式然后计算差异,运行'ant upgrade.db.script'这个ant脚本

·         对于只计算这个更新脚本而没有第一次加载旧数据库模式,运行'ant upgrade.hibernate.schema.update' 这个ant脚本。

·         在成功完成后,你将在这个build/database.upgrade.sql目录下找到升级脚本

为了从jBPM 3.0.2升级到jBPM 3.1,生成的升级SQL脚本(为HSQLDB)举例如下:

# New JBPM_MESSAGE table

create table JBPM_MESSAGE (

  ID_ bigint generated by default as identity (start with 1),

  CLASS_ char(1) not null,

  DESTINATION_ varchar(255),

  EXCEPTION_ varchar(255),

  ISSUSPENDED_ bit,

  TOKEN_ bigint,

  TEXT_ varchar(255),

  ACTION_ bigint,

  NODE_ bigint,

  TRANSITIONNAME_ varchar(255),

  TASKINSTANCE_ bigint,

  primary key (ID_)

);
 
# Added columns

alter table JBPM_ACTION add column ACTIONEXPRESSION_ varchar(255);

alter table JBPM_ACTION add column ISASYNC_ bit;

alter table JBPM_COMMENT add column VERSION_ integer;

alter table JBPM_ID_GROUP add column PARENT_ bigint;

alter table JBPM_NODE add column ISASYNC_ bit;

alter table JBPM_NODE add column DECISIONEXPRESSION_ varchar(255);

alter table JBPM_NODE add column ENDTASKS_ bit;

alter table JBPM_PROCESSINSTANCE add column VERSION_ integer;

alter table JBPM_PROCESSINSTANCE add column ISSUSPENDED_ bit;

alter table JBPM_RUNTIMEACTION add column VERSION_ integer;

alter table JBPM_SWIMLANE add column ACTORIDEXPRESSION_ varchar(255);

alter table JBPM_SWIMLANE add column POOLEDACTORSEXPRESSION_ varchar(255);

alter table JBPM_TASK add column ISSIGNALLING_ bit;

alter table JBPM_TASK add column ACTORIDEXPRESSION_ varchar(255);

alter table JBPM_TASK add column POOLEDACTORSEXPRESSION_ varchar(255);

alter table JBPM_TASKINSTANCE add column CLASS_ char(1);

alter table JBPM_TASKINSTANCE add column ISSUSPENDED_ bit;

alter table JBPM_TASKINSTANCE add column ISOPEN_ bit;

alter table JBPM_TIMER add column ISSUSPENDED_ bit;

alter table JBPM_TOKEN add column VERSION_ integer;

alter table JBPM_TOKEN add column ISSUSPENDED_ bit;

alter table JBPM_TOKEN add column SUBPROCESSINSTANCE_ bigint;

alter table JBPM_VARIABLEINSTANCE add column TASKINSTANCE_ bigint;

 
# Added constraints

alter table JBPM_ID_GROUP add constraint FK_ID_GRP_PARENT foreign key (PARENT_) references JBPM_ID_GROUP;

alter table JBPM_MESSAGE add constraint FK_MSG_TOKEN foreign key (TOKEN_) references JBPM_TOKEN;

alter table JBPM_MESSAGE add constraint FK_CMD_NODE foreign key (NODE_) references JBPM_NODE;

alter table JBPM_MESSAGE add constraint FK_CMD_ACTION foreign key (ACTION_) references JBPM_ACTION;

alter table JBPM_MESSAGE add constraint FK_CMD_TASKINST foreign key (TASKINSTANCE_) references JBPM_TASKINSTANCE;

alter table JBPM_TOKEN add constraint FK_TOKEN_SUBPI foreign key (SUBPROCESSINSTANCE_) references JBPM_PROCESSINSTANCE;

alter table JBPM_VARIABLEINSTANCE add constraint FK_VAR_TSKINST foreign key (TASKINSTANCE_) references JBPM_TASKINSTANCE;

8.3. 在JBoss上开始hsqldb管理器

对于jBPM来说这个不是关键的,但是对于开发期间的一些情况,它可以方便的打开hyphersonic数据库管理器并让你在jBoss中访问hyphersonic数据库中的数据。

通过浏览器并定位到jBPM服务器的JMX控制台来开始。你应该在你的浏览器上使用这个URL: http://localhost:8080/jmx-console。当然如果你在另一个机器或其他的端口而不是默认的来运行的话这个看起来稍有点不同。一个结果页面的屏幕快照显示如下图:

The JBoss jBPM JMX Console

图 8-11 JBoss jBPM JMX控制台

如果你在JBoss 入口上点击'database=jbpmDB,service=Hypersonic'链接,你将看到HSQLDB 数据库管理的JMX Mbean视图。向下滚动一点这个页面,在操作部分,你将看到'startDatabaseManager()'操作。这个屏幕快照的插图如下:

The HSQLDB MBean

图8-12 HSQLDB Mbean
点击这个invoke按钮将开始HSQLDB数据库管理器应用。这是一个相当粗糙的数据库客户端工具,但是它为我们执行这个生成的脚本工作的很好。你可以按ALT-TAB来浏览这个应用当它被其他的窗口覆盖时。下面的这个图显示了上面这个应用已加载脚本并准备执行。按下'Execute SQL'按钮将执行脚本并高效地更新你的数据库。

The HSQLDB Database Manager

图 8-13 HSQLDB Database管理器
P.S. : 这个图片有13个之多,不太好传,我先将全文的MHT格式作为附件附上来,大家可以下载看。
:~
  • 第8章_jBPM_数据库.zip (728.4 KB)
  • 描述: 图片较多,不好传,先将mht格式全文上传,如需要请下载查看!
  • 下载次数: 90
  • 大小: 193.9 KB
  • 大小: 45.2 KB
分享到:
评论
2 楼 huanyouyu 2009-05-04  
            
1 楼 rmn190 2009-03-19  
很是感谢楼主的翻译!

有一个问题: "为了让每件事情都能运行我们最后需要做的是文件夹'${JBPM_SDK_HOME}/jbpm-server/server/jbpm/deploy/jbpm.sar'中的'jbpm.sar.cfg.jar'文件的处理。" 这个怎么处理? 英文文档中是说解压后修改"hibernate.cfg.xml"文件,但没说修改后再放怎么处理: 是压缩成一个jar文件替换原来的? 还是直接把解压后jbpm.sar.cfg.jar里内容放到一个别的地方?

楼主的翻译更简单, 连解压好个jar文件也没说,修改hibernate.cfg.xml文件也没提.

相关推荐

Global site tag (gtag.js) - Google Analytics