最近要開始使用activiti結合原有的系統來開發一個專業領域內的業務管理軟件,以下記錄了第一次搭建該開發平台過程中所遇到的各種問題,備忘。
一、按照如下方式新建一個web工程
之所以要用maven,主要是為了解決各種依賴項的問題,用maven來管理依賴項還是很方便的。
用Eclipse創建Maven結構的web項目的時候選擇了Artifact Id為maven-artchetype-webapp,由於這個catalog比較老,用的servlet還是2.3的,而一般現在都是用3.0,在Project Facets里面修改Dynamic web module為3.0的時候就會出現Cannot change version of project facet Dynamic web module to 3.0,如圖:

解決這個問題的步驟如下:
1. 把Servlet改成3.0,打開項目的web.xml
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
web-app
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns
=
"http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation
=
"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id
=
"schedule-console"
version
=
"3.0"
>
2. 修改項目的設置,在Navigator下打開項目.settings目錄下的org.eclipse.jdt.core.prefs
把1.5改成1.8
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.8
3. 打開org.eclipse.wst.common.project.facet.core.xml
把java改為1.8, 把jst.web改為3.0;
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
faceted-project
>
<
fixed
facet
=
"wst.jsdt.web"
/>
<
installed
facet
=
"jst.web"
version
=
"3.0"
/>
<
installed
facet
=
"wst.jsdt.web"
version
=
"1.0"
/>
<
installed
facet
=
"java"
version
=
"1.8"
/>
</
faceted-project
>
二、解決報錯The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
可以使用如下步驟來解決。
1、右擊web工程-》屬性或Build Path-》Java Build Path->Libraries-> Add Libray...->Server Runtime -》Tomcat Server
2、切換到Java Build Path界面中的Orader and Export,選擇Tomcat。
三、修改項目的pom.xml文件,添加activiti相關依賴項
相關依賴項如下:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti-version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>${activiti-version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.168</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
其中
activiti
-version的定義如下:
<properties>
<activiti-version>5.18.0</activiti-version>
</properties>
其實這些內容我都是從Activiti工程的pom文件中拷貝過來的。
四、添加activiti需要的配置文件
在activiti的userguide(
http://activiti.org/userguide/index.html#_configuration )中有說。
如果我們使用如下語句來創建一個流程引擎實例
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine() |
那么實際上他是到該項目的classpath路徑下去找一個名為 activiti.cfg.xml的配置文件,然后根據該配置文件的設置,通過spring的方式來創建一個processEngine。而且是去找其中的那個名字是default的processEngine。
所以我們可以在該項目的src/main/resources 目錄下創建一個名為 activiti.cfg.xml的文件,然后將如下內容復制進去。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
</bean>
</beans>
五、創建sql server數據庫
通過sql server management studio 創建一個數據庫,比如名字叫做 activiti
六、在maven中添加sql server jdbc依賴項
在maven倉庫中是沒有sql server 的jdbc jar包的,可以按照如下步驟操作
Download the JDBC driver for Microsoft SQL Server
- Visit the MSDN site for SQL Server and download the latest version of the JDBC driver for your operating system.
- Unzip the package
- Open a command prompt and switch into the expanded directory where the
jar
file is located. - Execute the following command. Be sure to modify the
jar
file name and version as necessary:
1
|
mvn
install
:
install
-
file
-Dfile=sqljdbc4.jar -Dpackaging=jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0
|
- You should see something similar to this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[INFO] Scanning
for
projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-
install
-plugin:2.3.1:
install
-
file
(default-cli) @ standalone-pom ---
[INFO] Installing
/Users/claude/installers/JDBC/sqljdbc_4
.0
/enu/sqljdbc4
.jar to
/Users/claude/
.m2
/repository/com/microsoft/sqlserver/sqljdbc4/4
.0
/sqljdbc4-4
.0.jar
[INFO] Installing
/var/folders/c6/q1bdtq557kv54783p1g6cbsw0000gp/T/mvninstall1874482299687761721
.pom to
/Users/claude/
.m2
/repository/com/microsoft/sqlserver/sqljdbc4/4
.0
/sqljdbc4-4
.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total
time
: 1.208s
[INFO] Finished at: Tue Mar 13 14:07:31 EDT 2012
[INFO] Final Memory: 3M
/81M
[INFO] ------------------------------------------------------------------------
|
Modify your POM
Include the new dependency by modifying your project’s pom.xml
. Add the following dependency:
1
2
3
4
5
|
<
dependency
>
<
groupId
>com.microsoft.sqlserver</
groupId
>
<
artifactId
>sqljdbc4</
artifactId
>
<
version
>4.0</
version
>
</
dependency
>
|
Save the pom.xml
file and build the project to make sure no errors exist.
七、讓activiti連接sql server數據庫
修改第四節中的activiti.cfg.xml文件,將
processEngineConfiguration
的內容改成下文這樣:
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
<property name="databaseSchemaUpdate" value="true"/>
<property name="jdbcUrl" value="jdbc:sqlserver://localhost:1433;databaseName=activiti2 " />
<property name="jdbcDriver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="sa123" />
</bean>
八、在代碼中使用activiti的api
ProcessEngine
processEngine
= ProcessEngines.
getDefaultProcessEngine
();
if(processEngine != null)
{
out.println("<h1> Hello !" + processEngine.getName() + "</h1>");
IdentityService identityService = processEngine.getIdentityService();
List<String> keys = identityService.getUserInfoKeys("Kermit");
for(String key: keys)
{
out.println(String.format("<h1> key = %s, value = %s </h1>", key, identityService.getUserInfo("Kermit", key)));
}
}
以上在調用
ProcessEngines.
getDefaultProcessEngine
();
的時候,實際上背后就會去調用搜索classPath目錄下的activiti.cfg.xml文件,然后通過其中的配置來創建processEngine對象。
九、在eclipse中調試activiti項目
在eclipse中調試web項目,其實他是把相關的資料生成到如下路徑:
<eclipse workspace dir>\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MavenWeb
如果發現某項配置修改之后,調試的時候沒有生效,那可以試着clean一下, Project ->clean...,然后重新生成即可。