2012-09-26 5 views
1

이전에이 문제를 처음 접한 적이 없습니다. Actaully, 나는 전쟁 파일을 통해 실행중인 웹 응용 프로그램을 가지고 있습니다. Spring과 함께 작동하도록 설정했으며 완벽하게 작동합니다.Spring MVC로 웹 애플리케이션 배치

문제는 내가 Spring을 통해 Activiti를 구성하려고한다는 것입니다. 기본적으로 WEB-INF/processes 폴더 내에 .bpmn20.xml 파일 세트가 있습니다. Activiti 팀은 웹 응용 프로그램 내부에서이를 구성하는 방법을 알지 못한다고 언급했습니다. 독립 실행 형 응용 프로그램으로서 프로세스 폴더가 클래스 경로에 있으므로 리소스 .bpmn20.xml 파일을 자동으로 배포 할 수 있습니다. 웹 응용 프로그램 구조에서 구성하는 데 문제가 있습니다.

아래를 참조하십시오 :

나는 스프링 MVC 애플리케이션을 생성하고하고 DbSchemaCreate.main() 실행하여 Activiti 데이터베이스를 만들었습니다. Actaully 내 프로세스가 war 파일에 배포하지 않는 것 같습니다. Tomcat이 시작되면 ProcessEngine은 Spring을 통해 시작되어 작동합니다. RuntimeService에 액세스 할 수 있습니다. 아래의 코드는 알 수

web.xml의 자동 resosource 배치가 배치되지 않는

<?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"/> 

<?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. 또한 배포 할 코드를 시도했지만 예외가 throw됩니다.

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) 

이 리소스를 webapp 내부에 어떻게 배치 할 수 있습니까?

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 폴더의 resources 폴더에 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 

에서 코드를 작성
관련 문제