2012-09-26 66 views
1

我从来没有遇到过这个问题。我有一个通过war文件运行的web应用程序。我已经配置Spring来处理它,它完美的工作。使用Spring MVC部署Web应用程序

问题是我试图通过Spring配置Activiti。基本上,WEB-INF/processes文件夹中有一组.bpmn20.xml文件。 Activiti团队已经提到他们不知道如何在Web应用程序中对其进行配置。作为独立应用程序,我可以在进程文件夹位于类路径中时自动部署资源.bpmn20.xml文件。我在配置Web应用程序结构时遇到问题。

请参阅以下内容:

我创建的Spring MVC应用程序,并通过运行DbSchemaCreate.main()创建的Activiti的数据库。我的进程似乎没有部署在战争文件上。当Tomcat启动时,ProcessEngine通过Spring启动并运行。我可以访问RuntimeService。该代码可以下面可以看到:

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web- app_2_5.xsd" 
    version="2.5"> 

    <display-name>WebApp</display-name> 

    <context-param> 
     <!-- Specifies the list of Spring Configuration files in comma separated format.--> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/activiti.xml 
     </param-value> 
    </context-param> 

    <listener> 
     <!-- Loads your Configuration Files--> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>example</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>example</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list>  

activiti.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" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="databaseSchemaUpdate" value="true"/> 
    <property name="jobExecutorActivate" value="false"/> 
    <property name="transactionManager" ref="transactionManager"></property> 
    <!-- <propety name="beans"> 
     <map> 
      <entry key="printer" value-ref="printer"/> 
     </map> 
     </property>--> 
    <property name="deploymentResources" value="classpath*:/processes.*.bpmn20.xml"/> 
    </bean> 

    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> 
    <property name="processEngineConfiguration" ref="processEngineConfiguration"/> 
    </bean> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> 
    <property name="driverClass" value="com.mysql.jdbc.Driver"/> 
    <property name="url" value="jdbc:mysql://localhost:3306/activiti_example"/> 
    <property name="username" value="root"/> 
    <property name="password" value="password"/> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource"/> 
    </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"/> 

自动resosource部署不被部署。我也通过代码试图部署,但它抛出一个异常:

repositoryService.createDeployment().addClasspathResource("ProcessExample.bpmn20.xml").deploy(); 
runtimeService.startProcessInstanceByKey("processExample", mapOfProcessVariables); 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.activiti.engine.ActivitiException: resource 'ProcessExample.bpmn20.xml' not found 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
root cause 

    org.activiti.engine.ActivitiException: resource 'ProcessExample.bpmn20.xml' not found 
    org.activiti.engine.impl.repository.DeploymentBuilderImpl.addClasspathResource (DeploymentBuilderImpl.java:59) 
    com.webchannel.web.EmailController.sendE(EController.java:46) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

怎么能这个资源位于web应用程序里面?

我试过把它放在WEB-INF/processes/ProcessExample.bpmn20.xml中。

我也曾尝试:

<property name="deploymentResources" value="/WEB-INF/processes.*.bpmn20.xml"/> 

编辑

这个网站可以帮助,但我坚持。

Is WEB-INF in the CLASSPATH?

回答

1

也许尝试,其中定义过程的文件夹(你bpmn20.xml文件)添加到构建路径

错误告诉你,Activiti-Engine找不到你的文件,这就是为什么你需要告诉它在哪里找到它。

0

试试这个:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
 
\t \t http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
 
     version="3.1"> 
 

 
\t <!-- for specifies the Web application display name --> 
 
\t <display-name>APMC</display-name> 
 
\t 
 
    <!-- For Authentication processing mechanisms --> 
 
    <filter> 
 
     <filter-name>springSecurityFilterChain</filter-name> 
 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
 
    </filter> 
 
    <filter-mapping> 
 
     <filter-name>springSecurityFilterChain</filter-name> 
 
     <url-pattern>/*</url-pattern> 
 
    </filter-mapping> 
 
    
 
    \t <!-- For mapping request resource and combine its results with the matching JSP --> 
 
\t <servlet> 
 
    <servlet-name>mvc-dispatcher</servlet-name> 
 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
 
    <init-param> 
 
     <param-name>contextConfigLocation</param-name> 
 
     <param-value>/WEB-INF/spring-security.xml 
 
     </param-value> 
 
    </init-param> 
 
    <load-on-startup>1</load-on-startup> 
 
    </servlet> 
 
    <servlet-mapping> 
 
    <servlet-name>mvc-dispatcher</servlet-name> 
 
    <url-pattern>/</url-pattern> 
 
    </servlet-mapping> 
 
    
 
<servlet> 
 
    \t <servlet-name>rest</servlet-name> 
 
    \t <servlet-class> 
 
    \t \t org.springframework.web.servlet.DispatcherServlet 
 
    \t </servlet-class> 
 
    \t <load-on-startup>2</load-on-startup> 
 
</servlet> 
 

 
<servlet-mapping> 
 
    \t <servlet-name>rest</servlet-name> 
 
    \t <url-pattern>/rest/*</url-pattern> 
 
</servlet-mapping> 
 
    
 
<!-- ContextLoaderListener provides access to the ServletContext --> 
 
<context-param> 
 
    <param-name>contextConfigLocation</param-name> 
 
    <param-value>/WEB-INF/spring-config.xml, 
 
     \t \t \t /WEB-INF/spring-security.xml 
 
    </param-value> 
 
</context-param> 
 
    <listener> 
 
\t <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
 
    </listener> 
 
    
 
</web-app>
上面的文件是web.xml中

<?xml version="1.0" encoding="UTF-8"?> 
 
<beans xmlns="http://www.springframework.org/schema/beans" 
 
\t xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
\t xmlns:task="http://www.springframework.org/schema/task" 
 
\t xmlns:context="http://www.springframework.org/schema/context" 
 
\t xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc" \t 
 
\t xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
 
\t \t \t \t \t  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
 
\t \t \t \t \t  http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd 
 
\t \t \t \t \t  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd 
 
\t \t \t \t \t  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 
 
    
 
    \t <context:component-scan base-package="com.apmc.dao" /> 
 
    \t 
 
\t <context:component-scan base-package="com.apmc.services" /> 
 
\t <task:annotation-driven executor="taskExecutor" scheduler="taskScheduler" /> 
 
    <task:executor id="taskExecutor" pool-size="1" /> 
 
    <task:scheduler id="taskScheduler" pool-size="1" /> 
 
    
 
\t <context:component-scan base-package="com.apmc.controller" /> 
 
\t <context:component-scan base-package="com.apmc.rest" /> 
 
    \t <context:property-placeholder location="classpath:database.properties" /> 
 
    \t <context:property-placeholder location="classpath:log4j.properties" /> 
 

 
\t <mvc:resources mapping="/resources/**" location="/resources/mytheme/" /> 
 
\t <mvc:annotation-driven /> 
 

 
\t <bean id="dataSource" 
 
\t \t class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
 
\t \t <property name="driverClassName" value="${database.driver}" /> 
 
\t \t <property name="url" value="${database.url}" /> 
 
\t \t <property name="username" value="${database.user}" /> 
 
\t \t <property name="password" value="${database.password}" /> 
 
\t </bean> 
 
\t 
 
\t <bean id="sessionFactory" 
 
\t \t class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
 
\t \t <property name="dataSource" ref="dataSource" /> 
 
\t \t <property name="annotatedClasses"> 
 
      <list> 
 
       <value>com.apmc.domain.Vehicle</value> 
 
      </list> 
 
     </property> 
 
     
 
\t \t <property name="hibernateProperties"> 
 
\t \t \t <props> 
 
\t \t \t \t <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
 
\t \t \t \t <prop key="hibernate.hbm2ddl.auto">update</prop> 
 
\t \t \t \t <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
 
\t \t \t \t <prop key="hibernate.format_sql">false</prop> 
 
\t \t \t \t <prop key="hibernate.use_sql_comments">false</prop> 
 
\t \t \t </props> 
 
\t \t </property> 
 
\t \t 
 
\t </bean> 
 
    
 
\t <bean id="txManager" 
 
\t \t class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
 
\t \t <property name="sessionFactory" ref="sessionFactory" /> 
 
\t </bean> 
 
\t 
 
\t <bean id="persistenceExceptionTranslationPostProcessor" 
 
\t \t class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 
 
    \t \t 
 
\t <bean 
 
\t \t class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
 
\t \t <property name="prefix"> 
 
\t \t \t <value>/WEB-INF/pages/</value> 
 
\t \t </property> 
 
\t \t <property name="suffix"> 
 
\t \t \t <value>.jsp</value> 
 
\t \t </property> 
 
\t </bean> 
 
\t 
 
\t <bean id="messageSource" 
 
\t \t class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
 

 
\t \t <property name="basename" value="/WEB-INF/messages" /> 
 

 
\t </bean> 
 
\t 
 
\t <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate"> 
 
\t \t <property name="sessionFactory" ref="sessionFactory" /> 
 
    </bean> 
 
    
 
</beans>

上面的代码是弹簧的配置。xml

在src文件夹的资源文件夹中添加database.properties文件。所以写在database.properties

database.driver=com.mysql.jdbc.Driver 
 
database.url=jdbc:mysql://localhost:3306/apmc_db 
 
database.user=root 
 
database.password= 
 
hibernate.show_sql=true 

代码
相关问题