首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

OSWorkflow MySQL 數據庫配置實戰:Tomcat + JNDI 數據源詳細指南

     編輯:MySQL 資料庫相關知識

背景與問題

在部署 OSWorkflow 2.7.0 示例應用時,配置 MySQL 數據庫連接常遇到 web.xml 解析錯誤(java.lang.NullPointerException)。本文梳理完整配置流程,助你避開常見陷阱。

環境版本

  • OSWorkflow 2.7.0
  • Tomcat 5.x/6.x
  • MySQL 5.x + Connector/J 3.1.x (org.gjt.mm.mysql.Driver)
  • Commons DBCP 連接池

核心配置文件

1. Tomcat server.xml 定義 JNDI 數據源

<Context path="/osworkflow_example" docBase="osworkflow-2.7.0-example"
         debug="99" reloadable="true" crossContext="true">
  <Logger className="org.apache.catalina.logger.FileLogger"
          prefix="OSWorkflow." suffix=".log" timestamp="true"/>
  <Resource name="jdbc/DefaultDS" auth="Container" type="javax.sql.DataSource"/>
  <ResourceParams name="jdbc/DefaultDS">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter><name>maxActive</name><value>100</value></parameter>
    <parameter><name>maxIdle</name><value>30</value></parameter>
    <parameter><name>maxWait</name><value>10000</value></parameter>
    <parameter><name>username</name><value>root</value></parameter>
    <parameter><name>password</name><value></value></parameter>
    <parameter><name>driverClassName</name><value>org.gjt.mm.mysql.Driver</value></parameter>
    <parameter><name>url</name><value>jdbc:mysql://localhost:3306/osworkflow?autoReconnect=true</value></parameter>
  </ResourceParams>
</Context>

關鍵點:

  • autoReconnect=true 防止 MySQL 8 小時空閒斷開導致連接失效;
  • 確保 log4j.jar 放入 WEB-INF/lib;
  • 刪除示例中錯誤的 MemoryUserDatabaseFactory 重複定義。

2. osworkflow.xml 持久化配置

<osworkflow>
  <persistence class="com.opensymphony.workflow.spi.jdbc.MySQLWorkflowStore">
    <property key="datasource" value="jdbc/DefaultDS"/>
    <property key="entry.sequence" value="SELECT COALESCE(MAX(id),0)+1 FROM os_wfentry"/>
    <property key="entry.table" value="OS_WFENTRY"/>
    <property key="entry.id" value="ID"/>
    <property key="entry.name" value="NAME"/>
    <property key="entry.state" value="STATE"/>
    <property key="step.sequence" value="SELECT COALESCE(MAX(id),0)+1 FROM os_currentstep"/>
    <property key="step.sequence.increment" value="INSERT INTO OS_STEPIDS (ID) VALUES (NULL)"/>
    <property key="step.sequence.retrieve" value="SELECT MAX(ID) FROM OS_STEPIDS"/>
    <property key="history.table" value="OS_HISTORYSTEP"/>
  </persistence>
</osworkflow>

修正說明:原文 step.sequence 複雜聯查易出錯,簡化為單表 MAX(id)+1;確保序列表 OS_STEPIDS 存在且 ID 為自增主鍵。

3. propertyset.xml 屬性集配置

<propertysets>
  <propertyset class="com.opensymphony.module.propertyset.database.JDBCPropertySet" name="jdbc">
    <property key="datasource" value="jdbc/DefaultDS"/>
  </propertyset>
</propertysets>

4. web.xml 資源引用聲明

<resource-ref>
  <description>OSWorkflow Example App</description>
  <res-ref-name>jdbc/DefaultDS</res-ref-name>
  <res-ref-type>javax.sql.DataSource</res-ref-type>
  <res-auth>Container</res-auth>
</resource-ref>

部署檢查清單

  1. 將 jboss-j2ee.jar 複製至 tomcat_home/common/endorsed;
  2. MySQL JDBC 驅動 (mysql-connector-java-3.1.x.jar) 放入 tomcat_home/common/lib;
  3. 啟動 Tomcat 前檢查 web.xml XML 格式無誤(常見錯誤:標籤未閉合、特殊字符未轉義);
  4. MySQL 建庫 CREATE DATABASE osworkflow CHARSET utf8; 並執行官方建表腳本。

常見錯誤排查

總結

OSWorkflow 數據源配置核心在於:Tomcat JNDI 數據源正確暴露、OSWorkflow 持久化層正確引用、MySQL 連接參數(特別是 autoReconnect)合理設置。按本文檢查清單逐項驗證,可快速解決部署難題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤現象可能原因解決方案
Parse error in web.xml / NullPointerExceptionXML 格式錯誤、標籤嵌套錯亂用 XML 驗證工具檢查,注意 & 需寫為 &amp;
Cannot create JDBC driver驅動類名錯誤或 Jar 包缺失確認 driverClassName、Jar 包路徑
Communications link failureMySQL 未啟用、端口錯誤、防火牆攔截測試 telnet localhost 3306,檢查 bind-address
Access denied for user 'root'密碼錯誤或無遠程權限GRANT ALL ON osworkflow.* TO 'root'@'%' IDENTIFIED BY 'pwd'; FLUSH PRIVILEGES;