Activiti JNDI 数据源配置

Activiti JNDI Datasource Configuration

我正在安装 Activiti 5.17.0 的 Activiti Explorer,并希望使用基于 JNDI 的数据源配置来连接到 Oracle 数据库。我在这里找到的文档:http://www.activiti.org/userguide/#jndiDatasourceConfig 对进行此更改非常明确,但不幸的是文档似乎已过时。

特别是,我在提到的地方没有发现 activiti-standalone-context.xmlactiviti-context.xml。我假设它已更改为 activiti-custom-context.xml,但是此 Spring 配置的全部内容都被注释掉了(这让我想知道实际的 Spring 配置可能来自哪里)。

无论如何我都尝试使用这种方法在此文件中配置数据源:

<jee:jndi-lookup id="dataSource"
           jndi-name="jdbc/activiti-ds"
           expected-type="javax.sql.DataSource" />

还有这种方法:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
           <property name="proxyInterface" value="javax.sql.DataSource"/>
           <property name="jndiName"><value>jdbc/activiti-ds</value></property>
</bean>

但我的两次尝试都以相同的方式结束 ClassCastException,声称生成的代理 class 不是 javax.sql.DataSource:

的实例
java.lang.ClassCastException: org.springframework.jndi.JndiObjectFactoryBean$$EnhancerBySpringCGLIB$ba43af cannot be cast to javax.sql.DataSource
    at org.activiti.explorer.conf.ActivitiEngineConfiguration$$EnhancerBySpringCGLIB$db7207e.dataSource(<generated>)
    at org.activiti.explorer.conf.ActivitiEngineConfiguration.processEngineConfiguration(ActivitiEngineConfiguration.java:91)

有什么提示可以完成这个任务吗?也许是指向最新文档的指针?

Activiti 用户指南包含有关如何在此处配置 JDBC 数据源的更新说明:http://www.activiti.org/userguide/#jndiDatasourceConfig

您需要在 Web 应用程序的 ActivitiEngineConfiguration class 中配置数据源 bean,并更新以下代码行以引用您的新数据源:

processEngineConfiguration.setDataSource(dataSource());

如果你想继续使用Spring XML配置,你仍然可以在activiti-custom-context.xml.

中定义你的自定义bean

为了进一步参考,我通过在 ActivitiEngineConfiguration.java 中编辑 Spring JavaConfig 并用以下代码替换那里的数据源 bean 创建解决了这个问题:

@Bean
public DataSource dataSource() {
    final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
    dsLookup.setResourceRef(true);
    DataSource dataSource = dsLookup.getDataSource("jdbc/activiti-ds");
    return dataSource;
}

重新编译模块并部署后,它似乎可以正常工作。

非常感谢上面的 Greg Harley,他的问题和评论帮助解决了问题!