我正在安装Activiti 5.17.0的Activiti Explorer,并希望使用基于JNDI的数据源配置来连接到Oracle DB。我在这里找到的文档:http://www.activiti.org/userguide/#jndiDatasourceConfig对于进行此更改非常明确,但遗憾的是文档似乎已过时。
特别是,我在上述地方找不到activiti-standalone-context.xml
和activiti-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)
任何提示如何完成此任务?也许是指向最新文档的指针?
答案 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。