Activiti JNDI 数据源配置
Activiti JNDI Datasource Configuration
我正在安装 Activiti 5.17.0 的 Activiti Explorer,并希望使用基于 JNDI 的数据源配置来连接到 Oracle 数据库。我在这里找到的文档: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
,声称生成的代理 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,他的问题和评论帮助解决了问题!
我正在安装 Activiti 5.17.0 的 Activiti Explorer,并希望使用基于 JNDI 的数据源配置来连接到 Oracle 数据库。我在这里找到的文档: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
,声称生成的代理 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,他的问题和评论帮助解决了问题!