JNDI Datasource Configuration 数据源配置

默认,Activiti 的数据库配置会放在 web 应用的 WEB-INF/classes 目录下的 db.properties 文件中。 这样做比较繁琐, 因为要用户在每次发布时,都修改 Activiti 源码中的 db.properties 并重新编译 war 文件, 或者解压缩 war 文件,修改其中的 db.properties。

使用 JNDI(Java Naming and Directory Interface - Java 命名和目录接口)来获取数据库连接, 连接是由 Servlet 容器管理的,可以
在 war 部署外边管理配置。 与 db.properties 相比, 它也允许对连接进行更多的配置。

Usage 使用

要想把 Activiti Explorer 和 Activiti Rest 应用从db.properties 转换为使用 JNDI 数据库配
置,需要打开原始的 Spring 配置文件 (activiti-webapp-explorer2/src/main/webapp/WEBINF/activiti-standalone-context.xml 和activiti-webapp-rest2/src/main/resources/
activiti-context.xml), 删除”dbProperties”和”dataSource”两个bean,然后添加如下
bean:

  1. <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  2. <property name="jndiName" value="java:comp/env/jdbc/activitiDB"/>
  3. </bean>

接下来,我们需要添加包含了默认的 H2 配置的 context.xml 文件。 如果已经有了 JNDI 配置,
会覆盖这些配置。 对 Activiti Explorer 来说,对应的配置文件 activiti-webapp-explorer2/src/main/webapp/META-INF/context.xml 如下所示:

  1. <Context antiJARLocking="true" path="/activiti-explorer2">
  2. <Resource auth="Container"
  3. name="jdbc/activitiDB"
  4. type="javax.sql.DataSource"
  5. scope="Shareable"
  6. description="JDBC DataSource"
  7. url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"
  8. driverClassName="org.h2.Driver"
  9. username="sa"
  10. password=""
  11. defaultAutoCommit="false"
  12. initialSize="5"
  13. maxWait="5000"
  14. maxActive="120"
  15. maxIdle="5"/>
  16. </Context>

对于 Activiti REST web 应用,添加的 activiti-webapp-rest2/src/main/webapp/META-INF/context.xml 如下所示:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Context antiJARLocking="true" path="/activiti-rest2">
  3. <Resource auth="Container"
  4. name="jdbc/activitiDB"
  5. type="javax.sql.DataSource"
  6. scope="Shareable"
  7. description="JDBC DataSource"
  8. url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=-1"
  9. driverClassName="org.h2.Driver"
  10. username="sa"
  11. password=""
  12. defaultAutoCommit="false"
  13. initialSize="5"
  14. maxWait="5000"
  15. maxActive="120"
  16. maxIdle="5"/>
  17. </Context>

可选的一步,现在可以删除 Activiti Explorer 和 Activiti REST 两个应用中 不再使用的 db.properties 文件了。

Configuration 配置

JNDI 数据库配置会因为你使用的 Servlet 容器 不同而不同。 下面的配置可以在 Tomcat 中使用,但是对其他容器,请引用你使用的容器的文档。

如果使用 Tomcat,JNDI资源配置在
$CATALINA_BASE/conf/[enginename]/[hostname]/[warname].xml (对于 Activiti Explorer 来说,通常是在 $CATALINA_BASE/conf/
Catalina/localhost/activiti-explorer.war)。 当应用第一次发布时,会把这个文件从 war 中复制出来。 所以如果这个文件已经存在了,你需要替换它。要想修改 JNDI 资源让应用连接 mysql 而不是 H2,可以像下面这样修改:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Context antiJARLocking="true" path="/activiti-explorer2">
  3. <Resource auth="Container"
  4. name="jdbc/activitiDB"
  5. type="javax.sql.DataSource"
  6. description="JDBC DataSource"
  7. url="jdbc:mysql://localhost:3306/activiti"
  8. driverClassName="com.mysql.jdbc.Driver"
  9. username="sa"
  10. password=""
  11. defaultAutoCommit="false"
  12. initialSize="5"
  13. maxWait="5000"
  14. maxActive="120"
  15. maxIdle="5"/>
  16. </Context>