Activiti JNDI数据源配置

时间:2015-06-23 16:02:59

标签: spring jndi activiti

我正在安装Activiti 5.17.0的Activiti Explorer,并希望使用基于JNDI的数据源配置来连接到Oracle DB。我在这里找到的文档: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,声称生成的Proxy类不是javax.sql.DataSource的实例:

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

任何提示如何完成此任务?也许是指向最新文档的指针?

2 个答案:

答案 0 :(得分:4)

为了进一步参考,我通过编辑ActivitiEngineConfiguration.java中的Spring JavaConfig并使用以下代码替换其中的dataSource bean来解决了这个问题:

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

重新编译模块并进行部署后,它似乎完美无缺。

非常感谢格雷格哈利以上的问题和评论帮助解决了这个问题!

答案 1 :(得分:0)

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

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

processEngineConfiguration.setDataSource(数据源());

如果您想继续使用Spring XML配置,您仍然可以在activiti-custom-context.xml中定义自定义bean。