无法在Spring Webapp中注入Activiti框架服务

我试图使用Activiti和Spring

MVC框架在Web应用程序中创建工作流,因此我必须通过applicationContext.xml文件注入Activiti

Services,然后自动装配这些服务。

这是JUnit测试后的consol中的问题

GRAVE:在允许TestExecutionListener

[org.springframework.test.context.support.DependencyInjectionTestExecutionListener@14c8743]准备测试实例[tds_erp.testSpring@144719c]

org.springframework.beans.factory.BeanCreationException时捕获了异常:创建名称为’tds_erp的bean时出错.testSpring’:自动连接的依赖项注入失败;嵌套的异常是org.springframework.beans.factory.BeanCreationException:无法自动连线字段:org.activiti.engine.RepositoryService

tds_erp.testSpring.repositoryService;

嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[org.activiti.engine.RepositoryService]的合格Bean作为依赖项:预计至少有1个Bean可以作为此依赖项的自动装配候选。依赖注释:

原因:org.springframework.beans.factory.BeanCreationException:无法自动连线字段:org.activiti.engine.RepositoryService

tds_erp.testSpring.repositoryService;

嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[org.activiti.engine.RepositoryService]的合格Bean作为依赖项:预计至少有1个Bean可以作为此依赖项的自动装配候选。依赖项注释:{@

org.springframework.beans.factory.annotation.Autowired(required = true)}

由以下原因引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[org.activiti.engine.RepositoryService]的合格Bean作为依赖项:预计至少有1个Bean可以作为此依赖项的自动装配候选。依赖项注释:{@

org.springframework.beans.factory.annotation.Autowired(required = true)}

applicatioContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd

">

<bean id="dataSource"

class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">

<property name="targetDataSource">

<bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource">

<property name="driverClassName" value="com.mysql.jdbc.Driver" />

<property name="url" value="jdbc:mysql://localhost:3306/activiti" />

<property name="username" value="root" />

<property name="password" value="admin" />

</bean>

</property>

</bean>

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">

<property name="databaseType" value="h2" />

<property name="dataSource" ref="dataSource" />

<property name="transactionManager" ref="transactionManager" />

<property name="databaseSchemaUpdate" value="true" />

<property name="deploymentResources"

value="classpath*:chapter4/bookorder.spring.bpmn20.xml" />

<property name="jobExecutorActivate" value="false" />

</bean>

<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">

<property name="processEngineConfiguration" ref="processEngineConfiguration" />

</bean>

<bean id="repositoryService" factory-bean="processEngine"

factory-method="getRepositoryService" />

<bean id="runtimeService" factory-bean="processEngine"

factory-method="getRuntimeService" />

<bean id="taskService" factory-bean="processEngine"

factory-method="getTaskService" />

<bean id="historyService" factory-bean="processEngine"

factory-method="getHistoryService" />

<bean id="managementService" factory-bean="processEngine"

factory-method="getManagementService" />

</beans>

JUnit测试文件:

import static org.junit.Assert.assertEquals;

import java.util.HashMap;

import java.util.Map;

import org.activiti.bpmn.model.Task;

import org.activiti.engine.FormService;

import org.activiti.engine.HistoryService;

import org.activiti.engine.IdentityService;

import org.activiti.engine.ManagementService;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngineConfiguration;

import org.activiti.engine.RepositoryService;

import org.activiti.engine.RuntimeService;

import org.activiti.engine.TaskService;

import org.activiti.spring.ProcessEngineFactoryBean;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath*:applicatioContext.xml")

public class testSpring {

@Autowired(required=true)

RepositoryService repositoryService;

@Autowired(required=true)

RuntimeService runtimeService;

@Autowired(required=true)

TaskService taskService;

@Test

public void simpleSpringTest() {

Map<String, Object> variableMap =

new HashMap<String, Object>();

variableMap.put("object", "Activiti in Action");

variableMap.put("description", "123456");

runtimeService.startProcessInstanceByKey(

"employeeRequest", variableMap);

Task task = (Task) taskService

.createTaskQuery().taskAssignee("kermit")

.singleResult();

assertEquals("Complete order", task.getName());

taskService.complete(task.getId());

assertEquals(0, runtimeService.

createProcessInstanceQuery().count());

}

}

请帮帮我 !

回答:

看来您想在测试用例中使用applicatioContext.xmllike repositoryService等定义的bean

。但是您要声明的the @ContextConfiguration只是activiti的默认配置文件activiti.cfg.xml

。您可以在测试中尝试以下操作:

@ContextConfiguration("classpath:applicatioContext.xml")

只是一个建议:创建一个单独applicatioContext.xml的测试上下文类似于webapplicationContext中的上下文可能是一个好主意。这将有助于保留其他数据等,与常规开发数据库实例相比,您可以在其中更好地管理数据的前后条件。您甚至可能想为测试本身生成一个数据库实例,并在测试后将其拆除。

编辑:您可以给多个conf文件,例如- @ContextConfiguration(locations = {

"classpath:applicatioContext.xml" ,

"classpath*:activiti.cfg.xml"})。检查这篇文章。

除非您更改了默认位置,否则通常定义为“ <bean id="processEngineConfiguration"

class="org.activiti.spring.SpringProcessEngineConfiguration">”的内容应在activiti.cfg.xml内部加载。

以上是 无法在Spring Webapp中注入Activiti框架服务 的全部内容, 来源链接: utcz.com/qa/408984.html

回到顶部